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

 
keekkenen >>:

боюсь эта конструкция if(Time[0]>iTime(0,1440,60)) всегда будет возвращать истину, т.к. это iTime(0,1440,60) значение будет на 60 баров левее, чем Time[0]..

что показывает тест ?




Problema: ho un EA e voglio ottimizzarlo sulle ultime 40 barre (vedi thread) nello strategy tester, per esempio.

if(Time[0]>iTime(0,1440,60))

Se il tempo (simulato) è diventato più lungo del tempo di apertura della 60a barra sulla barra giornaliera, allora eseguite la funzione cosa c'è di sbagliato?

 
giusto, allora è necessario definire in anticipo il momento in cui l'EA dovrebbe iniziare il test
dal momento che sapete quando dovrebbe finire, allora fate come segue

diciamo che il test finisce 2010.02.10 0:00


fare uno script dal codice qui sotto

#property show_inputs
// время окончания тестировани						
extern string 		endTestTime 		= "2010.02.10 0:00";
// название пары
extern string		symbolTest			= "";
// период на котором ищем нужное время по номеру testBarCount бара относительно времени endTestTime
extern int 			periodTest		   = 0;
// количество баров в прошлое относительно времени endTestTime
extern int 			testBarCount 		= 60;

int init(){
	if ( symbolTest == "") symbolTest = Symbol();
	// искомое время
	Print(TimeToStr(iTime( symbolTest, periodTest,	iBarShift( symbolTest, periodTest,StrToTime( endTestTime)) + testBarCount)));
}
 

questo script ti permette di trovare il tempo dal quale vuoi testare l'EA...

impostare un paio di variabili nell'EA

extern string startTime = "";
extern string endTime = "";

int StartTime = StrToTime( startTime), EndTime = StrToTime( endTime);

if (Time[0] < StartTime || Time[0] > EndTime) return(0);
 

questo script ti permette di trovare il tempo dal quale vuoi testare l'EA...

impostare un paio di variabili nell'EA

extern string startTime = "";
extern string endTime = "";

int StartTime = StrToTime( startTime), EndTime = StrToTime( endTime);

if (Time[0] < StartTime || Time[0] > EndTime) return(0);
Nella startTime registriamo il tempo ottenuto dallo script, e nella endTime registriamo il tempo inserito nella variabile endTestTime dello script...
 
costy_ >>:

Постановка задачи: имеется советник, есть желание его оптимизировать на последних, например, 40-ка барах (60 см. ветку)в тестере стратегий.

if(Time[0]>iTime(0,1440,60))

если время(моделируемое) стало больше времени открытия 60-го бара на дневке тогда выполнить функцию что не так?!

quindi il 60 bar è anche modulato rispetto allo 0 bar modulato

 

Dichiarazione del compito: ho un EA e voglio ottimizzarlo sulle ultime 40 barre nello strategy tester, per esempio, rispetto al tempo corrente. Queste quaranta barre possono essere su un timeframe orario, 4 ore, giornaliero o altro. Il tester di strategia funziona: l'intervallo di tempo in cui funziona è impostato sul pannello del tester. Questo modo di impostare il tempo di funzionamento non soddisfa il compito di cui sopra - testare per 40 bar. Significa che dobbiamo cambiare l'Expert Advisor in modo che non sia il tester a definire il tempo di prova (le sue capacità non sono soddisfatte), ma il codice stesso.

Il tuo suggerimento non funzionerà, poiché per il tester, il tempo che era N battute fa è il tempo attuale.


T.K.

Per l'ora corrente, il tester calcolerà il tempo di apertura di una determinata barra (all'indietro) a partire dall'ora corrente. Cioè di nuovo non risolverà il problema. Dovrebbe essere N barre indietro dalla barra (momentanea) di oggi , non dall'ora corrente del tester


Ho capito bene.

 
keekkenen >>:
допустим тестирование заканчивается 2010.02.10 0:00


делаем скрипт из кода ниже

Lo script è buono, MA!!! Darà un valore di tempo che deve essere successivamente "segnato" nel pannello del tester. Questo non è buono.... Ma su piccoli TF e piccole quantità di baro mostrerà tale tempo, che non può essere "segnato" nel tester, perché nel tester viene data la data e solo la data. I test sono condotti dalle 00:00 della data di inizio alle 00:00 della data di fine. È impossibile specificare il tempo, soprattutto in minuti!!!!

 

La semplice ragione è che il tester vive nel suo tempo, mentre noi e le citazioni reali viviamo in un tempo diverso e questi spazi temporali si sovrappongono solo nella nostra immaginazione...


va bene che non puoi impostare l'ora esatta nel tester, metti l'inizio del giorno corrente o il giorno prima dell'ora di inizio - è già un costo...


Questo pezzo di codice taglierà il tempo extra prima del tempo di inizio dell'ottimizzazione richiesto (quello che abbiamo impostato nei parametri) e dopo il tempo di fine dell'ottimizzazione...

if (Time[0] < StartTime || Time[0] > EndTime) return(0);
 

Guardate la figura ind. ha iniziato a disegnare solo con un offset di 60 barre l'altro giorno. Qui sotto c'è una parte del codice. Hai provato qualcuno di quelli raccomandati? Provatelo e lo capirete.

int start()  {
double stoch1, stoch2;
   int pos = Bars-IndicatorCounted() ;  
//----

if(Time[0]>iTime(0,1440,60)) 
   for(int b=0; b<= pos; b++)
   {    
 
keekkenen >>:

этот кусок кода будет отсекать лишнее время до требуемого времени начала оптимизации (то что мы задаем в параметрах) и после времени окончания оптимизации..

La mia comprensione è che l'EA andrà allo script per i dati, le barre indietro dovrebbero essere impostate nello script.

И! Scusa, potresti postare il codice completo dello script? Per mia vergogna, non ho mai scritto uno script nel mio anno e mezzo di MQL.

Motivazione: