[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 301

 
rustein:
Habe das Forum durchsucht, aber keine schnelle Lösung gefunden, helfen Sie das Problem mit, während in Tester nicht funktioniert, im wirklichen Leben tut es.

Ich danke Ihnen.

Wenn das Testgerät hängen bleibt, dann sollte es das auch. (Achten Sie darauf, den Ausgang der Schleife zu beschreiben).

Wie diese

    while(Result == -1)
    {
      if(TotalOpenOrders() < TotalOrders)
      {
        if(TrendDetection() == BULL)
        {
          Result = OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,NormalizeDouble(Ask,Digits)-(StopLoss*Point),NormalizeDouble(Ask,Digits)+(TakeProfit*Point),OrderComments,Magic,0,CLR_NONE); 
         if((IsTesting()||IsOptimization())&&Result == -1)break;
        }
 
drknn:


Es ist schwer zu sagen, was Ihr Problem ist. Nehmen Sie es als Regel in MQL4, dass negative Zahlen im Code immer in Klammern gesetzt werden sollten. Manchmal können Fehler ohne Klammern auftreten.

In Codezeilen, die mit extern beginnen, ist es jedoch nicht notwendig, negative Werte in Klammern zu setzen. Ich weiß nicht, warum das so ist.

Vielen Dank, aber es funktioniert nicht, können Sie ein Konstrukt vorschlagen, um die Schleife loszuwerden if(IsTesting()==true || IsOptimization()==true)
 
rustein:
Danke, aber es funktioniert nicht, können Sie ein Konstrukt vorschlagen, um die Schleife loszuwerden if(IsTesting()==true || IsOptimization()==true)

 while(Result == -1)
    {
      if(TotalOpenOrders() < TotalOrders)
      {
        if(TrendDetection() == BULL)
        {
          Result = OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,NormalizeDouble(Ask,Digits)-(StopLoss*Point),NormalizeDouble(Ask,Digits)+(TakeProfit*Point),OrderComments,Magic,0,CLR_NONE); 
         if((IsTesting()||IsOptimization())&&Result == -1)break;
        }

^^

 
drknn:
Eine Warnmeldung ist nicht erforderlich - meines Erachtens ist die Datei irgendwo im Code wahrscheinlich bereits geöffnet, aber nicht geschlossen. Das ist wahrscheinlich der Grund, warum die Datei nicht wieder geöffnet werden kann und das Warnfenster immer wieder auftaucht. Vielleicht irre ich mich aber auch - ich bin kein Mitglied des Telepathen-Clubs :(
Die Situation ist wie folgt: zu einem bestimmten Zeitpunkt gibt der Expert Advisor eine csv-Datei ein und prüft, welcher Befehl dort steht (kaufen, verkaufen, schließen), dieser Befehl wird von EXCEL in die Datei geschrieben. Das Problem ist, dass im Moment, wenn expert die Datei liest, sie von EXCEL geöffnet werden kann, ekspert eine Fehlermeldung ausgibt und das war's, und ich brauche es, um wieder zu gehen und zu versuchen, bis es den Befehl liest.
Ich wusste nichts von dem Konstrukt...
Bitte überprüfen Sie, ob ich es richtig geschrieben habe:
 
int init()
{
while(handle<1)
{ 
handle=FileOpen("firstfile.csv",FILE_CSV|FILE_READ|FILE_WRITE,'\t') 
} 

}

 
sanches83:

}

Ja, warum fragen, Sie können es mit einem "Kampf" testen )).
 
rustein:
Danke, aber es funktioniert nicht, können Sie ein Konstrukt vorschlagen, um die Schleife loszuwerden if(IsTesting()==true || IsOptimization()==true)


Versuchen Sie es einmal ganz ohne Schleife, etwa so:

double  PR,SL,TP;
PR=NormalizeDouble(Ask,Digits);
SL=NormalizeDouble(PR-StopLoss*Point,Digits);
TP=NormalizeDouble(PR+TakeProfit*Point,Digits);
int Result=0;
Result = OrderSend(Symbol(),OP_BUY,Lots,PR,Slippage,SL,TP,OrderComments,Magic,0,CLR_NONE);
if(Result<=0){
        Print("Ошибка № ",GetLastError()," при открытии бай-ордера. PR = ",PR,"   SL = ",SL,"   TP = ",TP);
}

Es würde zumindest helfen zu verstehen, warum sich die Pose nicht öffnet.

 
costy_:

^^

Vielen Dank :)

Danke an alle, ich habe es repariert, es funktioniert.

Vielen Dank für Ihre Hilfe.

 
costy_:
Ja, warum müssen wir fragen, wir können es durch "Kämpfen" überprüfen )).


Im Allgemeinen ist dies korrekt, aber damit es funktioniert, müssen wir die Variable vor der Schleife initialisieren

Griff=0;

while(handle<1)
{
handle=FileOpen("firstfile.csv",FILE_CSV|FILE_READ|FILE_WRITE,'\t');
}

Nun, es geht nur darum, absolut sicher zu sein, dass die Codeausführung in den Schleifenkörper eintritt und ihn nicht ignoriert.

 
drknn:


Eigentlich ist es richtig, aber damit es funktioniert, sollte die Variable vor der Schleife initialisiert werden

Griff=0;

while(handle<1)
{
handle=FileOpen("firstfile.csv",FILE_CSV|FILE_READ|FILE_WRITE,'\t');
}

Damit soll sichergestellt werden, dass die Codeausführung in den Schleifenkörper eintritt und ihn nicht ignoriert.

Ja, leider muss ich wie ein Wahrsager sein, erstellen Sie Skripte mit einem Teil des Codes auf die Frage, gut oder alle den Code und es wird einfacher für Sie, um den Fehler zu zeigen. (Kaffeesatz zakAchyVeTso).
 

Leute, helft mir ein bisschen!!!

Ich versuche, einen EA zu schreiben, der die Morning-Channel-Strategie verwendet. Die Quintessenz ist folgende: Um 6:01 Uhr bestimmen wir beim EURGBP-Paar den Kanal der Preisbewegung von 0 Uhr bis 6 Uhr. Wir setzen zwei schwebende Aufträge und wenn der ausgelöste schwebende Auftrag durch einen Stopper geschlossen wird, eröffnen wir einen Auftrag in der entgegengesetzten Richtung. Es ist der zweite Teil der Strategie, der nicht funktioniert. D.h. wenn ein Stop ausgelöst wurde, können wir keinen Auftrag in der Gegenrichtung eröffnen.
Dateien:
Grund der Beschwerde: