[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 11

 
Fox_RM:

Ich habe versucht, dort mit der Funktion NewBar() Aufträge auf einem neuen Balken zu eröffnen. Wenn es zu diesem Zweck verwendet wird?

Zum Beispiel if (NewBar())i++; So etwas wie dies.

Ich habe NewBar nicht bemerkt, tut mir leid.

Dann ändern Sie Folgendes: Sie brauchen nicht jeden Tick den gesamten Indikator zu berechnen, wenn Sie den Handel nur bei einem neuen Balken eröffnen.

Verschieben Sie also die gesamte Berechnung des Indikators, bevor Sie die Bedingungen für die Eröffnung eines Geschäfts prüfen, und zählen Sie so viele Balken wie nötig (20, wenn ich mich nicht irre).


Die Strategie sieht also folgendermaßen aus:

1) neue Bar? nein - gehen

2) ja - berechnen alles, was wir brauchen (MA, Indikator, alles andere für die Bedingungen)

3) Überprüfen Sie die Bedingungen - nein - gehen Sie

4) Ja - Öffnen zum aktuellen Kurs (Ask bzw. Bid)

 
ilunga:

NewBar hat es nicht bemerkt, ich entschuldige mich.

Dann ändern Sie Folgendes: Sie brauchen nicht jeden Tick den gesamten Indikator zu zählen, wenn Sie den Handel nur bei einem neuen Balken eröffnen.

Verschieben Sie also die gesamte Indikatorberechnung, bevor Sie die Bedingungen für die Handelseröffnung prüfen, und zählen Sie nicht so viele Balken, sondern so viele, wie Sie benötigen (20, wenn ich mich nicht irre).

Das ist richtig, 20. Ich weiß ungefähr, wie man es macht. Bitte erklären Sie mir den Unterschied zwischen meiner Berechnung und der Berechnung von 20 Balken für Expert Advisors.

Ich möchte nur den Kern des Fehlers verstehen.

 
Fox_RM:
Guten Tag an alle!
Ich habe beschlossen, den Code meines Indikators für einen Expert Advisor umzuschreiben, um die
Ich habe beschlossen, den Code meines Indikators zu ändern, um die Funktionsweise seiner Signale zu verfolgen.
Beim Kompilieren treten keine Fehler auf, und im Strategy Tester funktioniert es ohne Fehler.

Ich weiß nicht, wie man es benutzt.

Z.U. Ich bin sicher, dass es viele dumme Fehler gibt, bitte schießen Sie mit Platzpatronen.

Es ist einfacher, den Code so umzuschreiben, wie Sie ihn sehen, als herauszufinden, um was Sie hier zum Beispiel herumtanzen":

  ArrayResize(MA1,Bars);ArrayResize(MA2,Bars);

Ich bin nicht darauf gestoßen, wie die Funktion in den Indikatoren in der EA verwendet wird, funktionieren:

  int counted_bars=IndicatorCounted();  

Aber, wenn "was auch immer", die Schleife, die Sie organisieren:

   for(i=0; i<=limit; i++) 

Wo Limit = Bars - counted_bars, auf der 2. Tick wird ein Wert gleich 0, dann von Code wird es einen Wert zugewiesen werden... OPA - und das ist eine NEUE WELT in der Programmierung:

  if(limit>0) limit=0;

...versuchen Sie, diese Bedingung so zu schreiben, wenn das nicht die ganze Strategie kaputt macht:

  if(limit<=0) limit=1;
 
Fox_RM:

D.h. diese Bedingung für die Neuberechnung der Balken verwenden?

Aber in meinem Indikator werden bei jedem Tick die Arrays TP_UP und TP_DN berechnet.Daher müssen sie zunächst berechnet werden.


Auch hier ist der Eröffnungspreis von OP_BUY==Ask, OP_SELL==Bid.

Und Sie haben Close[i].

 
Fox_RM:

Das ist richtig, 20. Ich weiß ungefähr, wie man das macht. Bitte erklären Sie den Unterschied zwischen meiner Berechnung und der Berechnung von 20 Balken für Expert Advisor ONLY.

Ich möchte nur den Kern des Fehlers verstehen.

Bei der Berechnung des gesamten Indikators liegt kein Fehler vor. Überlegen Sie einfach, was schneller ist:

1) Zählen der Balken (ca. 10000) pro Tick

2) 20 Takte 1 Mal pro Minute (oder sogar mehr) zu zählen

 
Fox_RM:
Guten Tag an alle!
Ich habe beschlossen, den Code meines Indikators für einen Expert Advisor umzuschreiben, um die
Ich habe beschlossen, den Code meines Indikators zu ändern, um die Funktionsweise seiner Signale zu verfolgen.
Beim Kompilieren treten keine Fehler auf, und im Strategy Tester funktioniert es ohne Fehler.

Ich weiß nicht, wie man es benutzt.

Z.I. Ich bin sicher, dass es eine Menge Fehler und Dummheiten gibt, bitte schießen Sie mit Platzpatronen.

NOT PRINCIPAL, aber zur Vereinfachung des Codes, dieses Konstrukt:

  ArrayResize(TP_UP,20);ArrayResize(TP_DN,20); 
  ArrayResize(TP_UPMin,20);ArrayResize(TP_DNPl,20);

Sollte durch eine einfache Array-Deklaration mit Dimensionalität ersetzt werden:

double delta,price,old_price,col_bar,sum_tick,sum_pip,TP_UP[20],TP_DN[20],TP_UPMin[20],TP_DNPl[20];
 
Fox_RM:

Das ist richtig, 20. Ich weiß ungefähr, wie man das macht. Bitte erklären Sie den Unterschied zwischen meiner Berechnung und der Berechnung von 20 Balken für Expert Advisor ONLY.

Ich möchte nur den Kern des Fehlers verstehen.

Dies sind die GRUNDSÄTZLICHEN {FUNDAMENTALEN} Programmierprinzipien - tun Sie nichts, was keinen Sinn ergibt! :)))
 
Fox_RM:
Und eine weitere Frage betraf den Betrieb der Bibliothek.
Ich habe die Bibliotheksdatei erstellt und kompiliert, alles lief ohne Fehler.
Ich habe die Funktion in den Indikatorcode importiert und kompiliert, es ist auch alles in Ordnung.
Wenn ich den Indikator starte, wird die zu importierende Funktion nicht ausgeführt, wenn ich

Indikatorcode, alles funktioniert. Hier ist der Bibliothekscode.

Dies ist ein Aufruf im Indikatorcode:

//+------------------------------------------------------------------+
//|                                                         lib1.mq4 |
//|                                         Copyright © 2012, Fox.RM |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Fox.RM"
#property link      "http://www.metaquotes.net"
#property library
//+------------------------------------------------------------------+
//| My function                                                      |
//+------------------------------------------------------------------+
double Sredn(double & ArrSr[])
{
double a=1,c,step=1/20;
for (int i=0;i<=20;i++)
{if (ArrSr[i]==0){a*=1;}else{a*=MathAbs(ArrSr[i]);}}
c=MathPow(a, step);
  return(c);
}
//+------------------------------------------------------------------+
 
Zhunko:

Vadim, du hast ein so kleines (&) gesetzt, dass man es nicht gleich sehen kann...! :)))

Ich frage mich, wie der Autor (in der Version des Autors) diese Funktion an einem Ort ausführen konnte und an einem anderen nicht! ;)

 
Fox_RM:

Das ist richtig, 20. Ich weiß ungefähr, wie man das macht. Bitte erklären Sie den Unterschied zwischen meiner Berechnung und der Berechnung von 20 Balken für Expert Advisor ONLY.

Ich möchte nur den Kern des Fehlers verstehen.

Übrigens ist mir aufgefallen, dass Sie Arbeitsfelder der Größe 20 deklarieren:

  ArrayResize(TP_UP,20);ArrayResize(TP_DN,20); 
  ArrayResize(TP_UPMin,20);ArrayResize(TP_DNPl,20);

Und Ihre Bibliothek berechnet 21 Elemente:

for (int i=0;i<=20;i++)

Ich kann davon ausgehen, dass die Schleife bei 1 beginnen sollte:

for (int i=1;i<=20;i++)