Gemeinsam lernen und schreiben in MQL5 - Seite 21

 

потому что вы берете каждый раз новое время тика, и оно конечно не равно предыдущему.

In der letzten Funktion haben Sie die Startzeit des Balkens genommen. Nehmen Sie also auch hier die Balkenzeit, nicht die Tickzeit.

Erklären Sie jemandem, der nicht versteht, welcher Parameter im Code in welchen zu ändern ist.

Wie kann man die Balkenzeit und nicht die Tickzeit beschreiben?

 
Khomtchenko:

Erklären Sie jemandem, der nicht versteht, welcher Parameter im Code in welchen zu ändern ist.

Wie kann man die Balkenzeit anstelle der Tickzeit beschreiben?

z.B. https://www.mql5.com/ru/docs/series/copytime
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTime
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTime
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyTime - Документация по MQL5
 
Khomtchenko:

Erklären Sie jemandem, der nicht versteht, welcher Parameter im Code in welchen zu ändern ist.

Wie kann man die Zeit eines Balkens und nicht eines Ticks beschreiben?

Hier ist eine gängige Beschreibung des "new bar"-Ereignishandlers

Seien Sie nicht zu faul, sich manchmal Artikel und die Codebasis anzuschauen, bevor Sie eine Frage stellen.

 

Вот тут все популярно описано Обработчик события "новый бар"

Seien Sie generell nicht zu faul, sich Artikel und Codebasen anzusehen, bevor Sie eine Frage stellen.

Ja, ich habe dort nachgesehen. Sie begannen mit der Gesundheit und endeten mit einem Haufen Dateien, die etwas Bestimmtes tun, aber ich brauche nur eine Funktion und das war's. Sie konnten mir den Code des Endprodukts nicht nennen. Sie haben ein Chaos angerichtet...
 

In mql4 konnte man in fünf Zeilen herausfinden, ob der Balken neu war oder nicht. Und nun sind eine ganze Reihe von Dateien geschrieben worden, und es ist nicht klar, wo sie hingehören, was in das Programm geschrieben werden soll...

Kurz gesagt, wenn es Experten, dann geben Sie mir ein Beispiel für Code, so dass ich nicht leiden, und ich kann jeder in die Bibliothek selbst zu senden, entweder auf die elektronische oder real ein.

Обработчик события "новый бар"
Обработчик события "новый бар"
  • 2010.10.04
  • Konstantin Gruzdev
  • www.mql5.com
Язык программирования MQL5 позволяет решать задачи на совершенно новом уровне. Даже те задачи, которые уже вроде имеют решения, благодаря объектно-ориентированному программированию могут подняться на качественно новый уровень. В данной статье специально взят простой пример проверки появления нового бара на графике, который был преобразован в достаточно мощный и универсальный инструмент. Какой? Читайте в статье.
 
Khomtchenko:
Ich zweifle nicht daran, aber ich frage nur zur Kontrolle - hat jemand ein und denselben EA in mql4 und mql5 erstellt und die Testergebnisse verglichen? Wenn der Code richtig umgewandelt wird, sollte er sich doch perfekt ähneln, oder? Oder liege ich da falsch?

Wenn die Prüfung sowohl pro Bar und in mql5 die Logik in onTick platziert ist, dann wird es ähnlich sein.

Der einzige Unterschied könnte in den Spreads liegen. In 5 enthält die Geschichte die Spreads. In der Version 4 entspricht die Spreizung des Testers der aktuellen Spreizung des Terminals.

Wenn man "jeden Tick" testet, sieht es so aus, als ob er noch kleiner wäre, da die Algorithmen zur Erzeugung von Ticks in den beiden Versionen unterschiedlich sind.

 
Khomtchenko:

In mql4 konnte man in fünf Zeilen herausfinden, ob der Balken neu war oder nicht. Und nun sind eine ganze Reihe von Dateien geschrieben worden, und es ist nicht klar, wo sie hingehören und was in das Programm geschrieben werden soll...

Kurz gesagt, wenn es Experten sind, dann geben Sie mir ein Beispiel für Code, so dass ich nicht leiden, und ich kann jeder in die Bibliothek selbst, elektronisch oder real zu senden.

Hier wird die Variable lastbar als statisch oder global deklariert, das Array iTime global

bool NewBar()
  {

   if(CopyTime(_Symbol,_Period,0,1,iTime)<1)return(false);

   if(lastbar!=iTime[0])
     {
      lastbar=iTime[0]];
      return(true);
     }
   else
     {
      return(false);
     }
  }
 

Auf der Seite gibt es ein Beispiel mit der Funktion isNewBar

https://www.mql5.com/ru/forum/2804/38752#comment_38752

Что меняет режим тестера "только цены открытия"?
Что меняет режим тестера "только цены открытия"?
  • www.mql5.com
Собственно, для советника работающего по onTick, в режиме "Только цены открытия" при тестировании все вычисления индикаторов и вызов функции OnTick() в экспертах происходит только один раз на бар.
 

1. Ich habe nicht nach den Ergebnissen der Tests der gleichen Strategien auf mql4 und mql5 gefragt.

Früher bin ich bei einem neuen Balken in den Markt eingestiegen, wenn die Bedingungen die Einstiegsvoraussetzungen erfüllen, und habe die Position geschlossen, wenn die Indikatoren das gegenteilige Signal anzeigten, und bin bei einem neuen Balken wieder eingestiegen.

Auf mql4 habe ich dieses Verfahren verwendet, um einen neuen Balken einzugeben:

void Fun_New_Bar() // Ф-ия обнаружения ..

{ // ... neuer Balken

static datetime New_Time=0; // Uhrzeit des aktuellen Taktes

New_Bar=false; // kein neuer Balken

if(Neue_Zeit!=Zeit[0]) // Zeiten vergleichen

{

Neue_Zeit=Zeit[0]; // Jetzt ist die Zeit

New_Bar=true; // Neuer Balken wird gefangen

}

}

So sieht das Ergebnis des Tests des Roboters auf mql4 mit meiner Strategie aus:

Testergebnisse des mql4 EA

Vielen Dank für die Übermittlung der Verfahren zur Bestimmung der neuen Leiste. Sie sind im Einsatz. Ich habe ein Skript erstellt, das Alert bei einem neuen Balken schreibt, und es auf M1 getestet, also habe ich nicht zu lange gewartet.

Aber dieselbe Strategie liefert völlig unterschiedliche Ergebnisse (und dieselben), wenn beide Verfahren in mql5 Expert Advisor verwendet werden:

Testergebnisse des mql5-Beraters

Ich habe nicht umsonst mein Hemd zerrissen und mit den Füßen aufgestampft. Ich möchte die Ergebnisse wiederholen, aber sie stimmen nicht überein.

So sieht die onStart-Funktion in mql4 ungefähr aus

int start()

{

GetIns();

Fun_New_Bar();

if (New_Bar==false) return(0);

wenn (Gesamt()>0)

{

CloseSellEnd();

CloseBuyEnd();

}

wenn (Gesamt()<1)

{

OpenBuy();

OpenSell();

}

zurück(0);

}

Dasselbe in mlq5:

void OnTick()

{

GetIns();

wenn (NeuerBalken())

{

wenn (Gesamt()>0) TryToClose();

wenn (Gesamt()<1)

{

OpenBuy(Lots,10, "EUR/USD (Buy)",102406);

OpenSell(Lots,10, "EUR/USD (Sell)",102406);

}

}

}

GetIns, um Indikatorparameter zu verarbeiten, und Total() - gibt die Anzahl der Positionen mit der erforderlichen Magie für mql4 oder mit dem erforderlichen Symbol für mql5 an.

Hilfe.

 

Ich glaube, ich habe den Grund für diese Diskrepanz gefunden. Sie werden es nicht glauben. Der MT4 und der MT5 haben einen unterschiedlichen Kursverlauf. Scheint etwas anders zu sein und die Strategie wird mit einem großen Unterschied getestet!!!!

Hier ist eine Darstellung auf verschiedenen Terminals:

Wenn man genauer hinsieht, ist da ein Unterschied. Eine kleine? Und wie groß ist der Unterschied zwischen den Testergebnissen der Strategie, der ebenfalls gering ist?

Ich werde die Entwickler kontaktieren! Was für eine Beta!!!