[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 628

 
IgorM:

for statement senza un parametro? - la seconda è che ci sono variabili globali per l'EA - non per il terminale, sono descritte all'inizio del codice prima di tutte le funzioni, compresa la funzione start(), come hai scritto - ad ogni tick la funzione start() è chiamata, si flagchange = false; e poi si cerca di confrontare questo flag con lo stato precedente, ma il suo stato sarà sempre falso

Se hai appena iniziato a cimentarti - prendi un qualsiasi Expert Advisor pronto da Kodobase e cambia le condizioni per entrare nel mercato con le tue - sarà più veloce.


Vinin
Qual è lo scopo del ciclo?

Vuoi dire che la funzione start() viene eseguita ad ogni tick? Allora il ciclo è davvero inutile.

 

MarkTrade:

Quindi la funzione start() viene eseguita ad ogni tick? Allora un ciclo è davvero inutile.

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

Interessante come ballano le ragazze... Stare insieme e cantare...

Testato e testato, aggiunto/modificato funzioni/condizioni/dati in base ai risultati, ottenuto risultati più o meno buoni in termini di redditività e drawdown... senza ottimizzazione. Ricaricato tutta la storia e ha cominciato a precipitare, no - Plum, nemmeno - Big Plum...

Se prima ho ricaricato la cronologia delle quotazioni(avevo una cronologia EURUSD precaricata prima del test, l'ho ricaricata per sicurezza - ho avuto errori nella qualità del modello nel 2010 per qualche motivo...)... Prima di ricaricare la cronologia l'Expert Advisor ha resistito con successo, beh, quasi con successo a diversi test di back-and-forth, ha negoziato con successo sulla cronologia di tre anni, ma dopo aver ricaricato le quotazioni ha iniziato ad avere drawdown due o tre volte al mese e non ha funzionato per più di due-tre mesi dopo l'inizio del test... Non ho cambiato nessuna condizione, solo la storia...

Si scopre che sul server la storia viene riscritta? Per quanto riguarda i secoli in Unione Sovietica?

Qual è il senso di tutto questo, allora?

 
artmedia70:

Le ragazze ballano in modo interessante... si alzarono insieme e cantarono...

Provato e riprovato, aggiunto/creato funzioni/condizioni/dati, ottenuto risultati più o meno buoni in termini di redditività e drawdown... senza ottimizzazione. Ricaricato tutta la storia e ha cominciato ad andare giù, no - giù, nemmeno - grande giù...

Se prima di ricaricare la cronologia delle quotazioni(prima del test avevo tutta la cronologia EURUSD precaricata, per sicurezza l'ho ricaricata, ma per qualche motivo ho avuto errori nella qualità del modello dal 2010)... Prima di ricaricare la cronologia l'Expert Advisor ha resistito con successo, beh, quasi con successo a diversi test di back-and-forth, ha negoziato con successo sulla cronologia di tre anni, ma dopo aver ricaricato le quotazioni ha iniziato ad avere drawdown due o tre volte al mese e non ha funzionato per più di due-tre mesi dopo l'inizio del test... Non ho cambiato nessuna condizione, solo la storia...

Si scopre che sul server la storia viene riscritta? Come da tempo immemorabile in URSS?

E poi il senso di tutto questo?

Se il tuo MT non è ancora disconnesso dal server, allora è il momento di farlo (e non connetterlo di nuovo inutilmente) - ogni volta che avvii tester o ottimizzazione, MT riceve uno spread (ecc.) dal server. Così, quando lo spread è di 1 pip, tutto sarà super fantastico, ma se in un altro momento aumenta a 4-5 - l'Expert Advisor probabilmente inizierà a perdere soldi. Naturalmente, è meglio ottimizzare nelle condizioni peggiori, perché è più probabile che si verifichino nel trading reale.

 

Qui c'è un po' di rifacimento.

глобальные переменные (в самом начале, под #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);
        }

Ancora non si scambiano :(

 
chief2000:

Se la vostra MT non è ancora scollegata dal server è il momento di farlo (e di non collegarla più inutilmente) - ogni volta che eseguite un tester o ottimizzate la MT riceve uno spread (ecc.) dal server. Quindi, quando lo spread è di 1 pip, tutto sarà super fantastico, ma se in un altro momento aumenta a 4-5 - l'Expert Advisor probabilmente inizierà a perdere soldi. Naturalmente, è meglio ottimizzare nelle condizioni peggiori, perché è più probabile che si verifichino nel trading reale.

È tutto chiaro e compreso da tempo... Ma è sabato... Lo spread può cambiare oggi? No... Probabilmente ora è minimo, cioè le condizioni migliori... No... Anche con qualsiasi spread, l'EA stava scambiando bene... prima del reset della storia.
 
artmedia70:
È tutto chiaro e compreso da tempo... Ma è sabato... Lo spread può cambiare oggi? No... Probabilmente ora è minimo, cioè le condizioni migliori... No... Anche con qualsiasi spread, l'EA stava scambiando bene... prima del reset della storia.
Beh, se guardate l'andamento del trading sul grafico, cosa è cambiato?
 
Techno:
Beh, se guardate l'andamento del trading sul grafico, cosa è cambiato?
Il drawdown azionario è aumentato molte volte... Si scopre che ci sono più condizioni per le posizioni aperte. In realtà apre più posizioni...
 
MarkTrade:

Qui c'è un po' di rifacimento.

Ancora non si scambiano :(

Ci deve essere un errore da qualche parte nelle condizioni / logica
perché MetaEditor non ha un debugger, quindi faccio questo:

aggiungere alla fine del codice

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

ritorno(0);

}

e nella modalità di visualizzazione nel tester a bassa velocità vedere cosa cambia e cosa no

 
artmedia70:
Il drawdown azionario è aumentato molte volte... Si scopre che le condizioni di apertura delle posizioni sono aumentate. In realtà apre più posizioni...
Non intendo il grafico dei test, ma il grafico delle quotazioni, più o meno, quali sono i cambiamenti nelle aperture, nelle chiusure?