Wie kann man EA für mehrere Paare ausführen? - Seite 3

 

Jacques, ich schätze Ihr anhaltendes Interesse an diesem Thema. Ich bin immer noch Debugging mein EA für seine erste Währung, aber beabsichtigen, es auf mehrere, wenn für geeignet befunden zu verwenden. Unter dieser Prämisse habe ich über eine Strategie nachgedacht, wie ich diese Idee umsetzen kann. Daher mein Interesse an diesem Thread.


Auf Ihre Anfrage hin habe ich Diagramme für drei weitere Paare erstellt und dabei festgestellt, dass zwei der Paare mehr als 32.000 Ticks in einem 24-Stunden-Zeitraum hatten (das Datenlimit für Diagramme in Excel). Daher musste ich das Diagramm in zwei Perioden unterteilen (1. 12 Stunden und 2. 12 Stunden). Um relativ konsistent zu bleiben, habe ich alle drei Paare in 12-Stunden-Perioden unterteilt.


Die vertikale Skala dieser Diagramme ist proportional zu den horizontalen Linien, aber die horizontale Skala ist NICHT zeitproportional (d. h. man kann nicht davon ausgehen, dass 1/12 der Ticks eine Stunde darstellt).


Ich denke, die wichtigste Erkenntnis aus diesen Diagrammen ist, dass es bei allen Paaren innerhalb eines 24-Stunden-Zeitraums erhebliche Zeitabstände zwischen den Ticks gibt. Wenn Sie daher mehrere Paare in einem EA kombinieren, wäre es meiner Meinung nach ratsam, eine "While"-Schleife zu verwenden. Der Verweis von StraightTrader auf https://book.mql4.com/special/index mit dem Titel "General Characteristics of Complex Programs" enthält eine gute Diskussion dieser Technik und eine Grafik im ersten Abschnitt dieses Artikels.


GBPJPY 44.834 Ticks in 24 Stunden

EURJPY 37.140 Ticks in 24 Stunden

GBPUSD 29.313 Ticks innerhalb von 24 Stunden

EURUSD 22.627 Ticks in 24 Stunden













Prost!

 
FXtrader2008:

Wenn Sie also mehrere Paare in einem EA kombinieren, wäre es meiner Meinung nach ratsam, eine "While"-Schleife zu verwenden. StraightTrader's Verweis auf https://book.mql4.com/special/index mit dem Titel "General Characteristics of Complex Programs" enthält eine gute Diskussion dieser Technik und eine Grafik im ersten Abschnitt dieses Artikels.

Das ist genau der Fall. Mehrere Paare in einem EA -> verwenden Sie den Ansatz der while-Schleife, anstatt die Aktivierung der Funktion durch eintreffende Ticks zu starten.


Ich würde gerne gegen ein Währungspaar für einen EA sein.

Mein langfristiger Ansatz ist EIN MULTICURRENCY MULTISTRATEGY EA. Ich habe vor einiger Zeit Universal Expert Advisor Schema, das einige dieser Ideen implementiert vorbereitet.

Später, nicht in meinem Beitrag enthalten, folgte ich durch die Entwicklung dieses Codes und startete Google-Code-Projekt namens Universaltrader. Dieses Projekt könnte Ihre Erwartungen erfüllen. Das einzige, was dort nicht implementiert ist, ist der While Cycle Ansatz (einfach zu implementieren).


Einige der Vorteile von MULTICURRENCY MULTISTRATEGY EA:

  • alle Strategien zusammen
  • es ist möglich, alle Strategien zusammen und auch unabhängig voneinander zu tunen/einzustellen
  • Möglichkeit, verschiedene Strategien/Währungspaare EIN/AUS zu schalten
  • Ich bin sicher, dass es noch viele weitere Vorteile gibt.

Nachteile:

  • Möglichkeit, jeweils nur ein Währungspaar zu testen - man muss so viele Backtests durchführen, wie viele Währungspaare man handelt, wobei die anderen Paare ausgeschaltet sind
  • Performance-Problem - ich habe das Performance-Problem nur im Backtest bemerkt, aber ich bin sicher, dass es im realen Handel auch relevant ist - es hängt von der Komplexität der implementierten Strategien und deren Anzahl ab.

Dieses Projekt muss noch verbessert werden, wenn also jemand Interesse hat, kann ich ihn in dieses Google-Code-Projekt einladen


Aktuelles Skript hier angehängt:

 
FXtrader2008 wrote >>

Jacques, ich schätze Ihr anhaltendes Interesse an diesem Thema. Ich bin immer noch Debugging mein EA für seine erste Währung, aber beabsichtigen, es auf mehrere, wenn für geeignet befunden zu verwenden. Unter dieser Prämisse habe ich über eine Strategie nachgedacht, wie ich diese Idee umsetzen kann. Daher mein Interesse an diesem Thread.

Auf Ihre Anfrage hin habe ich Diagramme für drei weitere Paare erstellt und dabei festgestellt, dass zwei der Paare mehr als 32.000 Ticks in einem 24-Stunden-Zeitraum hatten (das Datenlimit für Diagramme in Excel). Daher musste ich das Diagramm in zwei Perioden unterteilen (1. 12 Stunden und 2. 12 Stunden). Um relativ konsistent zu bleiben, habe ich alle drei Paare in 12-Stunden-Perioden unterteilt.

Die vertikale Skala in diesen Diagrammen ist proportional zu den horizontalen Linien, aber die horizontale Skala ist NICHT zeitproportional (d. h. man kann nicht davon ausgehen, dass 1/12 der Ticks eine Stunde darstellt).

Ich denke, die wichtigste Erkenntnis aus diesen Diagrammen ist, dass es bei allen Paaren innerhalb eines 24-Stunden-Zeitraums erhebliche Zeitabstände zwischen den Ticks gibt. Wenn Sie daher mehrere Paare in einem EA kombinieren, wäre es meiner Meinung nach ratsam, eine "While"-Schleife zu verwenden. Der Verweis von StraightTrader auf https://book.mql4.com/special/index mit dem Titel "General Characteristics of Complex Programs" enthält eine gute Diskussion dieser Technik und eine Grafik im ersten Abschnitt dieses Artikels.

GBPJPY 44.834 Ticks in 24 Stunden

EURJPY 37.140 Ticks in 24 Stunden

GBPUSD 29.313 Ticks innerhalb von 24 Stunden

EURUSD 22.627 Ticks in 24 Stunden

Prost!

Vielen Dank für Ihre Charts.

Entscheiden Sie sich für eine Schleife anstelle einer Tick-Run-Aktivierung, das ist wissenschaftlicher für diejenigen, die Minutengenauigkeit benötigen, und es ist keine große Sache zu implementieren. Ein weiterer Vorteil ist, dass Sie den EA an jedes beliebige Währungspaar anhängen können (es ist nützlich, wenn er ein Objekt auf dem Chart zeichnet).

Prost

 
cloudbreaker wrote >>

Außerdem können Sie mit der Funktion MarketInfo() die jüngsten Geld- und Briefkurse für Symbole außerhalb des aktuellen Charts abrufen.

Sie haben also folgende Möglichkeiten.

- Ein und derselbe EA ist an viele Charts angehängt und wird für das native Symbol jedes Charts ausgeführt (unter Verwendung der integrierten Variablen Ask und Bid)

- Sie haben einen EA, der an einen bestimmten Chart angehängt ist und für alle ausgewählten Symbole ausgeführt wird (mit der Funktion MarketInfo() für nicht-native Symbole) - wobei nur die Ticks des nativen Symbols als Auslöser verwendet werden

- Master- und Slave-EAs, die an verschiedene Charts angehängt sind, wobei der eine durch den anderen ausgelöst wird (z. B. schreibt der eine einen Wert in eine Datei, der andere liest die Datei ständig, bis er diese Daten findet und handelt dann)

Im Moment verwende ich die einfachste dieser Strategien - ich habe einen EA für drei Zeitrahmen und vier Währungen, also insgesamt zwölf. Sie alle sind so eingestellt, dass sie beim ersten Tick des Zeitrahmens ausgeführt werden. Ich habe jedoch das Problem, dass MT4 nicht immer alle EAs ausführt. Ich habe eine Druckanweisung direkt nach der Startfunktion, nur um zu sehen, was passiert, und es war nur immer auf drei der vier EA's von H1 zum Beispiel, aber es fehlte verschiedene Paare verschiedene Zeiten, und die EA war identisch, außer für die Einstellungen von Optimierungen für jedes Paar.

Frage - Führt MT4 immer nur einen EA gleichzeitig aus, wenn mehrere EAs gleichzeitig laufen sollen? Ist die Ausführung eines EA in irgendeiner Weise von der eines anderen abhängig (abgesehen davon, dass der Handelskontext belegt ist), oder sind sie völlig unabhängig?

Wenn ja, könnte ich die zweite Option verwenden, ich versuche nur, den EA so einfach wie möglich zu halten, denn je mehr Komplexität ich hineinschreibe, desto mehr Fehler mache ich, zumindest für mich.

 
joetrader:

Im Moment verwende ich die einfachste dieser Strategien - ich habe einen EA auf drei Zeitrahmen von vier Währungen, also insgesamt zwölf. Sie alle sind so eingestellt, dass sie beim ersten Tick des Zeitrahmens ausgeführt werden. Ich habe jedoch das Problem, dass MT4 nicht immer alle EAs ausführt. Ich habe eine Druckanweisung direkt nach der Startfunktion, nur um zu sehen, was passiert, und es war nur immer auf drei der vier EA's von H1 zum Beispiel, aber es fehlte verschiedene Paare verschiedene Zeiten, und die EA war identisch, außer für die Einstellungen von Optimierungen für jedes Paar.

Frage - Führt MT4 immer nur einen EA gleichzeitig aus, wenn mehrere EAs gleichzeitig laufen sollen? Ist die Ausführung eines EA in irgendeiner Weise von der eines anderen abhängig (abgesehen davon, dass der Handelskontext belegt ist), oder sind sie völlig unabhängig?

Wenn ja, könnte ich die zweite Option verwenden, ich versuche nur, den EA so einfach wie möglich zu halten, denn je mehr Komplexität ich hineinschreibe, desto mehr Fehler mache ich.

Ich habe mehrere EAs auf Charts laufen, ohne dass solche Probleme auftreten. Soweit ich das beurteilen kann, laufen sie gleichzeitig. Sie bemerken einander nur dann, wenn der Handelskontext von einem von ihnen verwendet wird. Was den EA selbst angeht, so ist er völlig unabhängig - jeder hat seine eigene Kopie der Variablen usw. Lassen Sie mich das klarstellen - Sie lassen 12 EAs laufen, die an 12 Charts angehängt sind? Vielleicht haben Sie Speicherprobleme?

 
gordon wrote >>

Ich habe mehrere EAs auf Charts laufen, ohne dass solche Probleme auftreten. Soweit ich das beurteilen kann, laufen sie gleichzeitig. Sie bemerken einander nur dann, wenn der Handelskontext von einem von ihnen verwendet wird. Was den EA selbst angeht, so ist er völlig unabhängig - jeder hat seine eigene Kopie der Variablen usw. Lassen Sie mich das klarstellen - Sie lassen 12 EAs laufen, die an 12 Charts angehängt sind? Vielleicht haben Sie Speicherprobleme?

Richtig! 12 EA's auf 12 Charts. Ich habe einen ziemlich neuen Computer mit 6 GB Arbeitsspeicher, also würde ich nicht denken, dass es am Arbeitsspeicher liegt, aber es ist eine Überlegung wert, und ich werde es nicht ausschließen. Aber Sie haben meine Frage beantwortet: Wenn die EAs gleichzeitig laufen können sollen, dann mache ich vielleicht einfach etwas falsch. Das ist nicht das erste Mal! Ich werde den Code überprüfen und noch mehr studieren. Vielen Dank für Ihre Hilfe.

 
Führen Sie die Charts in separaten Instanzen des MT4-Clients aus? Wenn Sie alle Charts in einer Instanz öffnen, teilen sie sich einen einzigen Handelskontext, und Sie müssen die Logik für die gemeinsame Nutzung dieses Kontexts kodieren - wenn das Verhalten Ihrer EAs bedeutet, dass wahrscheinlich mehr als einer gleichzeitig eine Handelsoperation durchführt. CB
 
cloudbreaker wrote >>
Führen Sie die Charts in separaten Instanzen des MT4-Clients aus? Wenn Sie alle Charts in einer Instanz öffnen, teilen sie sich einen einzigen Handelskontext, und Sie müssen die Logik für die gemeinsame Nutzung dieses Kontexts codieren - wenn das Verhalten Ihrer EAs bedeutet, dass wahrscheinlich mehr als einer gleichzeitig eine Handelsoperation durchführt. CB

Ja - ich führe sie auf demselben MT4-Client aus. Aber ich verwende eine der Handelskontext beschäftigt Lösungen aus diesem Artikel https://www.mql5.com/en/articles/1412 und ich nicht erhalten alle Handelskontext beschäftigt Fehler.

Es scheint nicht einmal zu dem Punkt zu kommen, an dem es versucht, eine Position zu eröffnen. Es scheint nicht den EA überhaupt für einige zu starten. Ich sage das, weil ich eine Druckanweisung an den Anfang meiner Startfunktion gesetzt habe.

Hier ist meine Startfunktion:

void start()
{
//---- nur für die ersten Ticks des neuen Balkens handeln
if(Volume[0]>1) return;
Print("Tick Check");

if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();
}

Ich handle mit CADJPY,EURCHF,GBPUSD, & USDJPY

Und ich erhalte dies:

2010.01.22 8:59:45 [EAName]USDJPY,H1: Tick Check

2010.01.22 8:59:45 [EAName]CADJPY,H1: Tick-Check

2010.01.22 8:59:45 [EAName]GBPUSD,H1: Tick-Check

2010.01.22 9:59:45 [EAName]EURCHF,H1: Tick-Check

2010.01.22 9:59:46 [EAName]GBPUSD,H1: Häkchenprüfung

2010.01.22 9:59:46 [EAName]CADJPY,H1: Tick Check

In manchen Stunden werden alle vier gehandelt, in manchen nur drei. Wenn es eine Stunde dauert, bis die H4 gehandelt werden, können drei von ihnen handeln, aber normalerweise nicht alle vier zusammen mit drei oder vier der H1.

Ich habe einen Workaround entwickelt, bei dem ich das Volumen auf 3 oder 4 Ticks erhöhe, nur um sicherzugehen, dass alles gehandelt wird, aber ich versuche, MetaTrader besser zu verstehen, damit ich das Grundproblem beheben kann.

Meine Frage ist also - da mein EA nur einen Tick laufen kann, würde er jeden EA gleichzeitig laufen lassen, und vielleicht ist das der Grund, warum sie nicht alle laufen? Ich habe eine Schleife in meinem EA, die bis zu 1500 der vergangenen Fraktale vergleicht, um einen Stoploss zu finden, also könnte das einige Zeit dauern.

Auch hier kann es nur ein Problem in meinem Code irgendwo sein.

 
Ich vermute, dass Sie ein Problem mit Ihrem Code haben, und das hat nichts mit dem Thema der multiplen EAs zu tun. Sie müssen das Problem für diejenigen, die nicht mit den Standard Print()/Alert()-Methoden zu sehen, was nicht funktioniert, zu lokalisieren.
 
tigersoft:
Hier ist ein einfacher Code zum Öffnen von EURUSD und USDCHF in einem Chart. Auch ea ist auf einem anderen Chart hinzugefügt, so dass es EURUSD und USDCHF öffnen wird.

//+------------------------------------------------------------------+
//|                                                          jkh.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

bool wannaBuy = true;
bool wannaBuy1 = true;
extern double LotSize = 0.01;
extern string symbol1 = "EURUSD";
extern string symbol2 = "USDCHF";
extern int MaxDifference = 6;
extern int Slippage = 3;
extern int Magicnumber1 = 786;
extern int Magicnumber2 = 123;
int sendticket = 3;
string pairs[18];

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
pairs[0] = symbol1;
pairs[1] = symbol2;
wannaBuy = true;
wannaBuy1 = true;

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   // Send order for EURUSD & USDCHF
   if (wannaBuy) {   
   int ticket1;
   RefreshRates();
   ticket1 = OrderSend(symbol1, OP_BUY, LotSize, MarketInfo(symbol1,MODE_ASK), Slippage, 0, 0, 0,0,Magicnumber1,0) & OrderSend(symbol2, OP_BUY, LotSize, MarketInfo(symbol2,MODE_ASK), Slippage, 0, 0, 0,0,Magicnumber2,0);
   if (ticket1 <0 )
   {
   Print ("OrderSend failed with error #", GetLastError());
   return(0);
   }
   wannaBuy = false;
   }

//----
   return(0);
  }
//+------------------------------------------------------------------+

Funktioniert nicht?

für Backtesting
bekam ordersend Fehler 4106

Unbekannter Symbolname für USDCHF für die Funktion Ordersend

Ordersend funktioniert für EURUSD, wenn ich das Symbol EURUSD für die Einstellung oder den EURUSD-Chart wähle.

Wenn ich zu einem anderen Chart wechsle, erhalte ich sowohl für EURUSD als auch für USDCHF ein unbekanntes Symbol.

Vielen Dank im Voraus!