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

 
dzhini:
Ma non funziona :(
Quindi non funziona altrove o mi manca qualcosa
 
Reshetov:
Quindi non funziona altrove o mi sono perso qualcosa
Posso bussare di persona alla tua porta?
 
dzhini:
Posso bussare di persona alla tua porta?
No. I messaggi privati sono solo per comunicazioni personali. E gli errori nel codice devono essere discussi pubblicamente, in modo che altri non facciano gli stessi errori, o qualcuno potrebbe poi condividere un link a una soluzione già pronta.
 

Ciao, questo semplice codice funziona con un errore. Non riesco a capirne il motivo.

Il primo ordine apre, modifica. Il secondo apre e... Non modifica. Lo mantiene finché non si guasta.

Nel registro c'è scritto:

"01:23:22 MarkTrade avviato per il test

01:23:22 2010.01.29 00:00 MarkTrade EURUSD,H1: aperto #1 comprare 1.00 EURUSD a 1.3965 ok

01:23:22 2010.01.29 00:00 MarkTrade EURUSD,H1: modifica #1 comprare 1.00 EURUSD a 1.3965 sl: 1.3935 tp: 0.0000 ok

01:23:22 2010.01.29 00:28 Tester: stop loss #1 a 1,3935 (1,3935 / 1,3937)

01:23:22 2010.02.01 00:00 MarkTrade EURUSD,H1: aperto #2 comprare 1.00 EURUSD a 1.3877 ok

01:23:22 2010.05.05 13:17 MarkTrade: fermato a causa di Stop Out

01:23:22 2010.05.05 13:17 Tester: ordine #2 è chiuso

Ho capito il mio errore! OrderSend restituisce un valore non booleano!

int start()
  {
  int total=OrdersTotal();
  if (total==0)
   {
      if (TimeHour(TimeCurrent())==00&&TimeMinute(TimeCurrent())==00)
      {
      Buy();
      }
   }
return(0);
  }
//////////////////////////
void Buy()
 {
 RefreshRates();
 if (OrderSend(Symbol(), OP_BUY, 1, NormalizeDouble(Ask,Digits), 0,0,0,"",123321,0,Blue)==true)
         {
           Modify();
         }
 }
/////////////////////////////
void Modify()
 {
    int total = OrdersTotal();
      for(int i=total-1;i>=0;i--)
       {
       OrderSelect(i, SELECT_BY_POS,MODE_TRADES);
       if (OrderModify (OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-NormalizeDouble(30*Point,Digits),OrderTakeProfit(),0,CLR_NONE)== false) Modify();
       }
 }
 

buon pomeriggio

Come creare un tester che funziona su diversi frame.

e lo fa passare attraverso la storia.

 

Buongiorno!

Si prega di chiarire. Quando ottimizzo Expert Advisor, ho notato che impostando diversi TP con l'algoritmo genetico attivato ottengo risultati diversi, cioè se imposto TP=400, allora ottimizzo a passi da 1 a 400, poi imposto 350, poi ottimizzo a passi da 1 a 350 e così via fino a TP=50. Così si scopre che se corro solo a TR = 400, allora "salto" i risultati che sono a TP più bassi e migliori ! È a causa della genetica? (L'articolo https://www.mql5.com/ru/articles/1347 (Creato: 25.12.2009 Autore: Rider) dice: "...La genetica è certamente una cosa utile, ma entro limiti ragionevoli. Il fatto è che il suo algoritmo può giocare uno scherzo crudele - qualche set di parametri vantaggioso, dal suo punto di vista, sarà identificato, e tutte le ulteriori ottimizzazioni andranno "intorno ad esso" fino alla fine. Penso che sia chiaro quali siano le conseguenze. La maggior parte delle varianti veramente buone che funzioneranno al di fuori dell'area di ottimizzazione saranno lasciate "fuori" e non appariranno nella tabella "Risultati dell'ottimizzazione".

Ci sono diverse vie d'uscita. Una soluzione radicale è quella di rifiutare l'uso dell'algoritmo genetico nell'ottimizzazione. Ma questa non è sempre una buona soluzione per un motivo o per un altro. I prossimi due sono mezze misure, ma almeno qualcosa:

- Conducete l'ottimizzazione non una, ma due o più volte. La prima volta, per esempio, per "Balance", la prossima per "Maximal Drawdown" o qualcos'altro..."). Quindi, per non ottenere il miglior risultato, dovrei eseguirlo con diversi TP + con diversi "parametri ottimizzabili" e più, per esempio, 9 test in avanti con 9 ottimizzazioni per ogni test per l'affidabilità?

 
eddy:

il ciclo non viene interrotto per qualche motivo

Break nel vostro caso innesca e interrompe il ciclo solo quando la condizione è soddisfatta. Se la condizione non è soddisfatta, il ciclo è infinito. Prova in questo modo.

int sec=Seconds();
       while(true) 
        {if(sec!=Seconds())          // new sec
          { int ms=GetTickCount(); }
       break;
        }
 
volshebnik:

break nel tuo caso funziona solo se la condizione è soddisfatta

ecco perché è in if()
 
Ciao, come faccio a cambiare le proprietà di un simbolo nel terminale? Dice che il livello minimo di stop è 300. Non posso testare l'EA.
 
Pro

Per cambiare lo spread per esempio c'è un programma TakeMySpread, ma come o con cosa si può cambiare lo "Stop Level" per testare l'EA in diverse condizioni. Aiuto!
Motivazione: