Errori, bug, domande - pagina 2226

 
Andrey Khatimlianskii:

In attesa nella KB ;)

La soluzione si è rivelata molto più semplice di quanto pensassi.

Un esempio di indicatore, in cui è possibile conoscere lo stato di Timer. Hai solo bisogno di aggiungere una linea #include <Timer.mqh> e OnTimer() sotto controllo.

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#include  <Timer.mqh>

int OnInit()
  {
   if(iTimer.On) Print("Таймер включен, период таймера = "+IntegerToString(iTimer.curPer)+" миллисеккунд"); else Print("Таймер выключен");
   EventSetMillisecondTimer(2201);
   return(INIT_SUCCEEDED);
  }
////////////////////////////////////////////  
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   return(rates_total);
  }
///////////////////////////////////////////// 
void OnTimer()
  {
   if(iTimer.On) Print("Таймер включен, период таймера = "+IntegerToString(iTimer.curPer)+" миллисеккунд"); else Print("Таймер выключен");
   EventKillTimer();
   if(iTimer.On) Print("Таймер включен, период таймера = "+IntegerToString(iTimer.curPer)+" миллисеккунд"); else Print("Таймер выключен");
  }

Ed ecco la classe stessa:

//+------------------------------------------------------------------+
//|                                                        Timer.mqh |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                         https://www.mql5.com/ru/users/nikolay7ko |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, Nikolay Semko"
#property link      "https://www.mql5.com/ru/users/nikolay7ko"
#property link      "SemkoNV@bk.ru"  

///////////////////////////////////////////////////////////////////////////
class CTimer
  {
public:
                     CTimer() {curPer=0; On=false;}
                    ~CTimer() {}
   bool              On;
   int               curPer;
   void              AddNewProgTimerSec(int per){EventSetTimer(per); curPer=per*1000; On=true;}
   void              AddNewProgTimerMilliSec(int per) {EventSetMillisecondTimer(per); curPer=per; On=true;}
   void              KillProgTimer() {EventKillTimer(); curPer=0; On=false;}
  };
///////////////////////////////////////////////////////////////////////////
static CTimer iTimer;

#define EventSetMillisecondTimer iTimer.AddNewProgTimerMilliSec
#define EventSetTimer iTimer.AddNewProgTimerSec
#define EventKillTimer iTimer.KillProgTimer
Il risultato:
2018.07.12 21:10:37.177	TestСTimer (EURUSD.m,M5)	Таймер выключен
2018.07.12 21:10:39.385	TestСTimer (EURUSD.m,M5)	Таймер включен, период таймера = 2201 миллисеккунд
2018.07.12 21:10:39.385	TestСTimer (EURUSD.m,M5)	Таймер выключен
File:
Timer.mqh  3 kb
 
Nikolai Semko:

La soluzione era molto più semplice di quanto pensassi.
...


Volevo scrivere sul livello di codifica nella comunità in generale, ma omettiamo per evitare problemi...
Secondo me, un buon modo per risolvere il problema è quello di implementare una classe singleton o statica, che implementa il controllo del timer e fornisce la possibilità di "iscriversi" a un evento del timer,
La "sottoscrizione" è implementata passando un puntatore a una funzione da chiamare a certi intervalli.

 

I risultati del trading sono diversi dal test su tutti i tick. Puoi dirmi dove scavare - le citazioni sono in eccesso o cosa?

Test di tutte le zecche - dà sempre lo stesso risultato. Commercio reale - ci dà scambi extra sullo stesso periodo.

L'Expert Advisor non si è spento per 2 settimane. Il test è stato anche eseguito per 2 settimane. L'ho eseguito 50 volte.

 
Anton Ohmat:

I risultati del trading sono diversi dal test su tutti i tick. Puoi dirmi dove scavare - le citazioni sono in eccesso o cosa?

Test di tutte le zecche - dà sempre lo stesso risultato. Trading reale - dà scambi extra sullo stesso periodo.

L'Expert Advisor non si è fermato per 2 settimane. Il test è stato anche eseguito per 2 settimane. L'ho eseguito 50 volte - era sempre lo stesso

Il test viene eseguito usando "tutte le zecche" o "zecche reali"?

 
Per tutti i tick, il parametro più alto
 
Anton Ohmat:
Per tutte le zecche - parametro più alto

In modalità "All ticks", i tick sono modellati dal tester a partire dalle barre dei minuti. Qui c'è un articolo sulle diverse modalità di test. https://www.mql5.com/ru/articles/2612

Тестирование торговых стратегий на реальных тиках
Тестирование торговых стратегий на реальных тиках
  • www.mql5.com
В данной статье мы покажем результаты тестирования простой торговой стратегии в 3-х режимах: "OHLC на M1" с использованием только цен Open,High, Low и Close минутных баров; затем детальное моделирование в режиме "Все тики", и самое достоверное тестирование в режиме "Каждый тик на основе реальных тиков" с использованием записанных тиков из...
 
l'ho appena eseguito e ho ottenuto lo stesso risultato
 
Sergey Dzyublik:


Volevo scrivere sul livello di codifica nella comunità in generale, ma omettiamo per evitare problemi...
Secondo me, un buon modo per risolvere il problema è quello di implementare una classe singleton o statica, che implementa il controllo del timer e fornisce la possibilità di "iscriversi" all'evento del timer,
La "sottoscrizione" è implementata passando un puntatore a una funzione da chiamare a certi intervalli.

Devi essere un ottimo programmatore se dici cose così sensate. E grazie per il politicamente corretto :)).
Ho certamente una visione di come creare un pratico politizzatore. Il tuo punto di vista ha ampliato ulteriormente la mia visione. Grazie.

 
Sergey Dzyublik:

il problema è risolto attraverso l'implementazione di un singleton

Come si può implementare un singleton in MQL5?
 
fxsaber:

Errore in FileLoad. Se due agenti locali con il flag FILE_COMMON cercano di leggere i dati tramite FileLoad, uno degli agenti fallisce.

È possibile impostare i flag appropriati in FileOpen, ma non in FileLoad. Pertanto, permettete l'accesso al file tramite FileLoad se un altro FileLoad lo legge.

Come possono aiutarvi queste bandiere? Ecco un esempiohttps://www.mql5.com/ru/forum/1111/page1628#comment_2702870

Due Expert Advisors cercano di leggere i datitramite FileOpen (con il flag FILE_SHARE_READ ). Risultato:uno degli Expert Advisors va in crash


Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2016.08.03
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
Motivazione: