Fehler, Irrtümer, Fragen - Seite 2226

 
Andrey Khatimlianskii:

Ich warte im KB ;)

Die Lösung erwies sich als viel einfacher, als ich dachte.

Ein Beispiel für eine Anzeige, mit der Sie den Status des Timers feststellen können. Sie müssen nur eine Zeile #include <Timer.mqh> und OnTimer() unter Kontrolle hinzufügen.

#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("Таймер выключен");
  }

Und hier ist die Klasse selbst:

//+------------------------------------------------------------------+
//|                                                        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
Das Ergebnis:
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)	Таймер выключен
Dateien:
Timer.mqh  3 kb
 
Nikolai Semko:

Die Lösung war viel einfacher als ich dachte.
...


Ich wollte über das Niveau der Codierung in der Gemeinschaft im Allgemeinen schreiben, aber lassen wir das weg, um Ärger zu vermeiden...
Meiner Meinung nach ist eine gute Möglichkeit, das Problem zu lösen, eine singleton oder statische Klasse zu implementieren, die die Zeitsteuerung implementiert und die Möglichkeit bietet, ein Zeitereignis zu "abonnieren",
Das "Abonnement" wird durch die Übergabe eines Zeigers auf eine Funktion implementiert, die in bestimmten Abständen aufgerufen wird.

 

Die Handelsergebnisse unterscheiden sich von den Ergebnissen des Tests für alle Ticks. Können Sie mir sagen, wo ich suchen soll - sind die Angebote überzogen oder was?

Der Test für alle Zecken ergibt immer das gleiche Ergebnis. Real Trade - gibt uns zusätzliche Trades im gleichen Zeitraum.

Der Expert Advisor hat sich seit 2 Wochen nicht ausgeschaltet. Der Test läuft auch schon seit 2 Wochen. Ich habe ihn 50 Mal ausgeführt - und er liefert immer das gleiche Ergebnis.

 
Anton Ohmat:

Die Handelsergebnisse unterscheiden sich von den Ergebnissen des Tests für alle Ticks. Können Sie mir sagen, wo ich suchen soll - sind die Angebote überzogen oder was?

Der Test für alle Zecken ergibt immer das gleiche Ergebnis. Real-Trading - gibt zusätzliche Trades im gleichen Zeitraum.

Der Expert Advisor hat seit 2 Wochen nicht mehr angehalten. Der Test läuft auch schon seit 2 Wochen. Ich habe es 50 Mal durchgeführt - es war immer das Gleiche

Wird der Test mit "allen Zecken" oder mit "echten Zecken" durchgeführt?

 
Für alle Ticks gilt, dass der oberste Parameter
 
Anton Ohmat:
Für alle Zecken - oberster Parameter

Im Modus "Alle Ticks" werden die Ticks vom Prüfgerät aus den Minutenbalken modelliert. Hier ist ein Artikel über die verschiedenen Testmodi. https://www.mql5.com/ru/articles/2612

Тестирование торговых стратегий на реальных тиках
Тестирование торговых стратегий на реальных тиках
  • www.mql5.com
В данной статье мы покажем результаты тестирования простой торговой стратегии в 3-х режимах: "OHLC на M1" с использованием только цен Open,High, Low и Close минутных баров; затем детальное моделирование в режиме "Все тики", и самое достоверное тестирование в режиме "Каждый тик на основе реальных тиков" с использованием записанных тиков из...
 
Ich habe es gerade ausgeführt - mit dem gleichen Ergebnis
 
Sergey Dzyublik:


Ich wollte über das Niveau der Codierung in der Gemeinschaft im Allgemeinen schreiben, aber lassen wir das weg, um Ärger zu vermeiden...
Meiner Meinung nach ist eine gute Möglichkeit, das Problem zu lösen, eine singleton oder statische Klasse zu implementieren, die die Timer-Steuerung implementiert und die Möglichkeit bietet, das Timer-Ereignis zu "abonnieren",
Das "Abonnement" wird durch die Übergabe eines Zeigers auf eine Funktion implementiert, die in bestimmten Abständen aufgerufen wird.

Sie müssen ein sehr guter Programmierer sein, wenn Sie so vernünftige Dinge sagen. Und danke für die politische Korrektheit :)).
Ich habe durchaus eine Vorstellung davon, wie man einen praktischen Polytimer erstellen kann. Ihre Sichtweise hat meine Sichtweise noch mehr erweitert. Ich danke Ihnen.

 
Sergey Dzyublik:

das Problem wird durch die Implementierung eines Singletons gelöst

Wie kann ein Singleton in MQL5 implementiert werden?
 
fxsaber:

Fehler in FileLoad. Wenn zwei lokale Agenten mit FILE_COMMON-Flag versuchen, Daten über FileLoad zu lesen, schlägt einer der Agenten fehl.

Esist möglich, entsprechende Flags in FileOpen zu setzen, aber nicht in FileLoad. Erlauben Sie daher bitte den Zugriff auf die Datei über FileLoad, wenn ein anderer FileLoad sie liest.

Wie können diese Flaggen Ihnen helfen? Hier ist ein Beispielhttps://www.mql5.com/ru/forum/1111/page1628#comment_2702870

Zwei Expert Advisors versuchen, Datenüber FileOpen (mit Flag FILE_SHARE_READ ) zu lesen. Ergebnis: Einer der Expert Advisors stürzt ab


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