[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 426
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Здравствуйте! Как бы организовать в тестере стратегий оптимизацию (или тестирование) на промежутке времени, определенном не датами, а количеством последних баров? Попытка установки в советнике ограничителя времени работы, который определяется заданным количеством баров и основывается на TimeCurrent(), ничего не дала.
Хотя:
Возвращает последнее известное время сервера (время прихода последней котировки) в виде количества секунд, прошедших после 00:00 1 января 1970 года.
Замечание: при тестировании последнее известное время сервера моделируется
Получается, что время, на котором работает оптимизатор, задается только в окне тестера фразой "Использовать дату:". Может кто знает какую-нибудь хитрость?
Intendete impostare i tempi di trading all'interno di un giorno?
Se è così
Вы имеете ввиду задавать время торгов внутри дня?
Если так то
Vorrei ottimizzare i parametri di un EA su brevi timeframe su un piccolo periodo di tempo vicino al tempo corrente. Lo Strategy Tester, d'altra parte, permette di impostare la data in cui il processo di ottimizzazione inizia e finisce. Quando il TF è di 15 minuti (per esempio), allora in un giorno (e questo è il minimo che permette al tester di impostare) ci saranno 96 barre. E penso che sia molto. Vorrei che questo TF fosse ottimizzato sulle ultime 2 ore, cioè su 8 barre per esempio.
Ho inserito un tale frammento nell'EA:
extern int History=100; //Storia in barre, su cui lavora l'Expert AdvisorStartDateTime=TimeCurrent()-History*Period()*60;
if(TimeCurrent()<StartDateTime) // L'ora di inizio non è arrivata
{
Alert("L'ora di inizio non è arrivata. EA non ha funzionato.",": ",Symb,", ",Period());
return; // Esci da start()
}
Mi aspettavo che l'EA nel tester di strategia non funzionasse prima di StartDateTime. Ma no!
Я хотел бы оптимизировать параметры советника на коротких таймфреймах на малом промежутке времени поближе к текущему времени. Тестер же стратегий позволяет установить дату на которой начинается и на которой заканчивается процесс оптимизации. Когда же ТФ равен 15 минутам (например), то в сутках (а это минимум который позволяет установить тестер) будет 96 баров. А это по моему много. Хотелось бы для этого ТФ пооптимизировать на последних 2-х часах т.е. на 8-ми например барах.
Nota: durante i test, viene simulata l'ultima ora conosciuta del server.
Il tester supporta M1 TF, non legarlo alle barre, legalo al tempo, forse ti serve anche quello.
Замечание: при тестировании последнее известное время сервера моделируется.
Тестер поддерживает ТФ М1, не привязывайтесь к барам, привязывайтесь ко времени, возможно это тоже нужно.
La frase: quando si fa il test, l'ultimo tempo conosciuto del server viene simulato è presente e in TimeCurrent( ) però non funziona. La tua variante è buona, ma dobbiamo controllare se funziona? In secondo luogo, quando si cambia TF è necessario cambiare un pezzo di codice o si deve riconoscere in quale TF funziona, per percepire adeguatamente i numeri "inizio" e "fine". In terzo luogo, penso che sia molto più conveniente impostare il numero di baro all'indietro - non c'è bisogno di calcolare l'"inizio" manualmente. In MQL ci occupiamo di barre! E l'ultima cosa: qual è lo svantaggio di questo codice? (Tranne che non funziona nel tester di strategia. E questa è la mia domanda)
Замечание: при тестировании последнее известное время сервера моделируется.
Тестер поддерживает ТФ М1, не привязывайтесь к барам, привязывайтесь ко времени, возможно это тоже нужно.
Un po' come:
datetime è data e ora, un intero senza segno contenente il numero di secondi trascorsi dalle ore 0 del 1° gennaio 1970.
и
I dati di tipo color e datetime sono rappresentati come interi. I tipi interi, insieme ai tipi a virgola mobile, sono chiamati tipi aritmetici (numerici).
Se no, come uscirne.
Grazie per la dritta sul formato dei numeri, però. C'è una direzione di ricerca. Se ancora c'è una soluzione pronta sarà grato
In realtà, è meglio usare Time[0] invece di TimeCurrent() nel tester, mi sembrava che TimeCurrent() funzionasse nel tester prima...
e ora è più probabile che TimeCurrent() nel tester (o non nel tester) dia il tempo in cui l'ultima citazione è arrivata...
in questo caso funzionerà
extern int History=100; // Storia in barre, su cui lavora l'Expert Advisor
StartDateTime=Time[History];
if(Time[0] < StartDateTime) // Il tempo di inizio non è arrivato
{
Alert("Il tempo di inizio non è arrivato. EA non funziona.",": ",Symb,", ",Period());
return; // Exit start()
}
Вроде как:
datetime - дата и время, беззнаковое целое число, содержащее количество секунд, прошедших с 0 часов 1 января 1970 года.
и
Данные типов color и datetime представляются в виде целых чисел. Целые типы вместе с типами с плавающей точкой называются арифметическими (числовыми) типами.
А если нет, то как выйти из этого положения.
Хотя, спасибо за подсказку на счет формата чисел. Есть направление поиска. Если всеже есть готовое решение буду благодарен
Bene, nel commento precedente, l'errore è stato visualizzato tramite l'avviso.
L'aiuto dice "Nota: durante i test, viene simulata l'ultima ora conosciuta del server", ma se non è simulata tutte le domande all'editor dell'aiuto.
Hai controllato, hai trovato l'errore...
Solo voi conoscete la soluzione, poiché non conosciamo l'ulteriore direzione della logica.
Non capisco proprio perché ci sia così tanto testo
StartDateTime=TimeCurrent()-History*Period()*60;
quando tutto può essere fatto in modo molto più semplice?
Готовое решение знаете только Вы, так как дальнейшее направление логики нам не известно.
Sono completamente d'accordo con la tua soluzione nella risposta precedente: è un'incompatibilità di formato di dati! La richiesta di una soluzione off-the-shelf si riduce a risolvere il problema della conversione dei formati. Ma ovviamente MQL4 non ha tali opzioni. Per esempio, oggi è il 43° giorno dell'anno, cioè la 43° barra nel timeframe giornaliero dall'inizio dell'anno. Supponiamo che io voglia ottimizzare il mio Expert Advisor su 60 barre. Significa che il tester dovrebbe iniziare a lavorare con 365-(60-43)=348° giorno (barra) dell'anno precedente. Cioè dovremmo prendere TimeDayOfYear(TimeCurrent()) (è un int!) e confrontarlo con 348. Ovviamente dobbiamo tenere conto anche del valore dell'anno (l'anno scorso). Tutto sommato, credo di aver capito. Dobbiamo solo implementarlo. Sarà molto più difficile su piccoli TF, quando si deve testare un gran numero di barre, che (per esempio, 5-minuti) vanno oltre l'ora precedente, o forse il giorno precedente.
Tutto il tuo problema è nella dichiarazione del problema, rendilo chiaro agli altri... Onestamente non ho capito da che ora hai bisogno di testare...
Se dovete iniziare con una barra di 60, iniziate con 60 barre.
int startTime = iTime(NULL,PERIOD_D1, N); // N - numero della barra dal momento attuale sul timeframe giornaliero