[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 628

 
IgorM:

for-Anweisung ohne Parameter? - die zweite ist, dass es globale Variablen für den EA gibt - nicht für das Terminal, sie werden ganz am Anfang des Codes vor allen Funktionen beschrieben, einschließlich der start()-Funktion, wie Sie geschrieben haben - bei jedem Tick wird die start()-Funktion aufgerufen, Sie flagchange = false; und dann versuchen Sie, diese Flagge mit dem vorherigen Zustand zu vergleichen, aber ihr Zustand wird immer falsch sein

Wenn Sie gerade erst anfangen, sich auszuprobieren, nehmen Sie einen beliebigen vorgefertigten Expert Advisor von Kodobase und ändern Sie die Bedingungen für den Markteintritt nach Ihren eigenen - es wird schneller gehen.


Vinin
Was ist der Zweck der Schleife?

Sie meinen, dass die Funktion start() bei jedem Tick ausgeführt wird? Dann ist die Schleife wirklich unnötig.

 

MarkTrade:

Die Funktion start() wird also bei jedem Tick ausgeführt? Dann ist eine Schleife wirklich unnötig.

https://book.mql4.com/ru/programm/special
 

Interessant, wie die Mädchen tanzen... Einstimmig stehen und singen...

Getestet und getestet, Funktionen/Bedingungen/Daten basierend auf den Ergebnissen hinzugefügt/geändert, mehr oder weniger gute Ergebnisse in Bezug auf Rentabilität und Drawdown erhalten... ohne Optimierung. Ich lud die ganze Geschichte neu und sie begann zu sinken, nein - Pflaume, nicht einmal - Große Pflaume...

Wenn, bevor ich neu geladen Notierungen Geschichte(ich hatte eine vorgeladene EURUSD Geschichte vor dem Testen, ich neu geladen es nur für den Fall - ich hatte Fehler in der Modellierung Qualität im Jahr 2010 aus irgendeinem Grund...)... Vor dem Neuladen der Geschichte der Expert Advisor erfolgreich, gut fast erfolgreich widerstanden verschiedenen hin-und-her-Tests, erfolgreich gehandelt auf drei Jahre Geschichte, aber nach dem Neuladen Zitate begonnen, Drawdowns zwei oder drei Mal pro Monat haben und nicht für mehr als zwei-drei Monate nach dem Test begann ... Ich habe keine Bedingungen geändert, nur den Verlauf...

Es stellt sich heraus, dass auf dem Server die Geschichte neu geschrieben wird? Wie seit Urzeiten in der UdSSR?

Was ist dann der Sinn des Ganzen?

 
artmedia70:

Die Mädchen tanzen auf interessante Weise... standen gemeinsam auf und sangen...

Getestet und getestet, Funktionen/Bedingungen/Daten hinzugefügt/erstellt, mehr oder weniger gute Ergebnisse in Bezug auf Rentabilität und Drawdown erzielt... ohne Optimierung. Ich lud die ganze Geschichte neu und es begann zu sinken, nein - sinken, nicht einmal - groß sinken...

Wenn vor dem Neuladen von Kursen Geschichte(vor dem Testen hatte ich alle EURUSD Geschichte vorgeladen, nur um sicher zu sein, habe ich es neu geladen, aber es gab Fehler in der Modellierung Qualität seit 2010 aus irgendeinem Grund...) Vor dem Neuladen der Geschichte der Expert Advisor erfolgreich, gut fast erfolgreich widerstanden verschiedenen hin-und-her-Tests, erfolgreich auf drei Jahre Geschichte gehandelt, aber nach dem Neuladen Zitate begonnen, Drawdowns zwei oder drei Mal pro Monat haben und nicht für mehr als zwei-drei Monate nach dem Test begann ... Ich habe keine Bedingungen geändert, nur den Verlauf...

Es stellt sich heraus, dass auf dem Server Geschichte umgeschrieben wird? Wie seit Urzeiten in der UdSSR?

Und was ist der Sinn von all dem?

Wenn Ihr MT immer noch nicht vom Server getrennt ist, dann ist es an der Zeit, dies zu tun (und verbinden Sie es nicht unnötigerweise wieder) - jedes Mal, wenn Sie den Tester oder die Optimierung starten, erhält MT einen Spread (usw.) vom Server. Also, wenn der Spread 1 Pip ist, wird alles super-awesome, aber wenn zu einem anderen Zeitpunkt steigt es auf 4-5 - der Expert Advisor wird wahrscheinlich beginnen, Geld zu verlieren. Natürlich ist es besser, für die ungünstigsten Bedingungen zu optimieren, da diese im realen Handel mit größerer Wahrscheinlichkeit eintreten.

 

Hier ist eine kleine Überarbeitung.

глобальные переменные (в самом начале, под #property link )
bool flagchange = false;
bool PrevFlag = false;
bool flag = false; 

int start()
  {
   //---вход в позицию
   //int    spread=MarketInfo("EURUSD",MODE_SPREAD);
   int Slippage = 3;
   int i = 0;
   double lt = getLots() ; // минимальный лот
   RefreshRates();
   int total = OrdersTotal();   
   int ticket = -1;
      flag = GetEma();
        if (PrevFlag != flag) // проверим, сигнал ема изменился?
         {flagchange = true;      // изменился!
         PrevFlag = flag;}
        else flagchange = false;
        if (flagchange == True)
         {       
           int Total=OrdersTotal(); // есть открытые позиции?
           if(Total>0)
            {
              for(i=Total-1; i>=0; i--) 
              {
                if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true) 
                  {
                    if(OrderType()==OP_BUY || OrderType()==OP_SELL) // Только Buy и Sell
                     {
                       if(OrderType()==OP_BUY) 
                         bool Result=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,CLR_NONE);
                       else
                         Result=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,CLR_NONE);
                     if(Result!=true) 
                        {          
                          Print("LastError = ",GetLastError()); 
                         }              
                      }
                   }
                else 
                   if (flag ==true) OrderSend(Symbol(),OP_BUY,lt,Ask,Slippage,Bid - sl * Point,0,"Buy",888,0,Blue);
                   else OrderSend(Symbol(),OP_SELL,lt,Bid,Slippage,Ask + sl * Point,0,"Seel",888,0,Red);
              }
           }                                            
        }
     
   return(0);
  }
      //////////////////////////////////////////////////////
  bool GetEma() {
  //----Получим значение EMA1
      int ma1= iMA(Symbol(),PERIOD_H1,ema1,0,1,6,0);
  //----Получим значение EMA2   
      int ma2= iMA("",PERIOD_H1,ema2,0,1,6,0); 
      if (ma1>ma2) return (True);
      else return (False);}
   /////////////////////////////////////////////////////  
         // посчитаем разтер лота
   double getLots() 
        {
                double minlot = MarketInfo(Symbol(), MODE_MINLOT);
                 int round = MathAbs(MathLog(minlot) / MathLog(10.0)) + 0.5;
                 double lot = minlot;
//---- select lot size
                 lot = NormalizeDouble(AccountFreeMargin() * Risk / 1000.0, round);
                 if (AccountFreeMargin() < lot * MarketInfo(Symbol(), MODE_MARGINREQUIRED)) 
                        {
                                lot = NormalizeDouble(AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED), round);
                        }
                 if(lot < minlot) lot = minlot;
                 double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
                 if(lot > maxlot) lot = maxlot;
//---- return lot size
   return(lot);
        }

Immer noch kein Handel :(

 
chief2000:

Wenn Ihr MT immer noch nicht vom Server getrennt ist, ist es an der Zeit, dies zu tun (und es nicht mehr unnötig zu verbinden) - jedes Mal, wenn Sie einen Tester laufen lassen oder eine Optimierung durchführen, erhält das MT einen Spread (usw.) vom Server. Also, wenn der Spread 1 Pip ist, wird alles super-awesome, aber wenn zu einem anderen Zeitpunkt steigt es auf 4-5 - der Expert Advisor wird wahrscheinlich beginnen, Geld zu verlieren. Natürlich ist es besser, für die ungünstigsten Bedingungen zu optimieren, da diese im realen Handel mit größerer Wahrscheinlichkeit eintreten.

Es ist alles klar und längst verstanden... Aber es ist Samstag... Kann sich der Spread heute ändern? Nein... Wahrscheinlich ist er jetzt am niedrigsten, d.h. unter den besten Bedingungen... Aber nein... Auch mit jedem Spread, war der EA Handel gut... vor dem Zurücksetzen der Historie.
 
artmedia70:
Es ist alles klar und längst verstanden... Aber es ist Samstag... Kann sich der Spread heute ändern? Nein... Wahrscheinlich ist er jetzt am niedrigsten, d.h. die besten Bedingungen... Aber nein... Auch mit jedem Spread, war der EA Handel gut... vor dem Zurücksetzen der Historie.
Nun, wenn Sie sich den Handelsverlauf auf dem Chart ansehen, was hat sich geändert?
 
Techno:
Nun, wenn Sie sich den Handelsverlauf auf dem Diagramm ansehen, was hat sich geändert?
Der Aktienrückzug hat sich vervielfacht... Es hat sich herausgestellt, dass es mehr Bedingungen für offene Stellen gibt. Er eröffnet tatsächlich mehr Stellen...
 
MarkTrade:

Hier ist eine kleine Überarbeitung.

Immer noch kein Handel :(

Es muss irgendwo ein Fehler in den Bedingungen / Logik
weil MetaEditor nicht über einen Debugger, so dass ich dies tun:

am Ende des Codes hinzufügen

Comment( "flag= ", flag, " PrevFlag=", PrevFlag, ......);

zurück(0);

}

und im Visualisierungsmodus im Testgerät bei niedriger Geschwindigkeit sehen, was sich ändert und was nicht

 
artmedia70:
Der Kapitalabzug hat sich um ein Vielfaches erhöht... Es hat sich gezeigt, dass sich die Bedingungen für die Eröffnung von Stellen verbessert haben. Er eröffnet tatsächlich mehr Stellen...
Ich meine nicht das Testdiagramm, sondern das Kursdiagramm, wie sehen die Veränderungen bei den Eröffnungen und Schließungen aus?
Grund der Beschwerde: