Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Delay zwischen Orders einfügen? (http://www.expert-advisor.com/forum/showthread.php?t=7115)

droyo33 24.11.21 20:23

Delay zwischen Orders einfügen?
 
Hallo Zusammen,

ich habe ein Problem mit meinem EA.
Es gibt eine if-Abfrage, die erfüllt sein muss, damit ein Trade geöffnet wird.
In dieser if-Abfrage, dürfen Maximal 5 unterschiedliche Paare getradet werden, soblad bereits 5 offen sind, kann kein neues Paar getradet/geöffnet werden.

Nun kommt es häufig vor, dass ich ein Signal für zwei unterschiedliche Paare zur exakt der selben Uhrzeit bekomme und somit zB. der EA zwei Paare öffnet, obwohl bereits 4 Paare geöffnet sind.
Somit habe ich 6 offene Paare, was eigentlich mit der if-Abfrage verhindert werden sollte.
Gibt es eine möglichkeit einen "DELAY" einzufügen, nachdem der EA mit der nächsten öffnenden Position wartet, oder wie fange ich dieses Problem ab?


Über Antworten freue ich mich!

MFG Dennis

traderdoc 24.11.21 21:12

Wenn die if-Abfrage nach 4 Paaren noch true ergibt, dann wäre doch eher die Frage, für welches der anderen beiden Paare, deren Signale exakt zum selben Zeitpunkt gegegebwn wurden, soll als erstes eine Order geöffnet werden.

Ist diese Order geöffnet wird zwangsweise das sechste Paar, per Abfrage, eben nicht geöffnet.

traderdoc

droyo33 24.11.21 21:23

es ist "eigentlich" egal welches der beiden Paare zuerst geöffnet werden soll, da für beide die if Abfrage True wäre und somit ein Trade nach den konditionen möglich ist.
Der EA könnte meinetwegen ein zufälliges Paar auswählen, nur soll er nicht beide Orders zeitgleich ausführen...

traderdoc 24.11.21 21:56

Werden denn beide unterschiedlichen Paare per einem EA geöffnet oder werden die in zwei separaten EAs (d.h. auf 2 Charts) geöffnet?

traderdoc

droyo33 24.11.21 21:58

Beide Paare werden per unterschiedlichem EA geöffnet.
Also ein EA tradet nur ein Paar

traderdoc 24.11.21 22:38

Gut, dann sollte eine Globale Variable existieren, auf die beide EA schauen können. D.h. sobald die Signale gegeben werden (wer oder was geben diese Signale konkret?) muss vor der if-Abfrage diese Globale Variable mit den Währungspaarnamen gefüllt werden. Also z.B. EURUSD, USDJPY, NZDUSD, wenn für diese drei WP gleichzeitig ein Signal generiert worder war.
Nun sollte in der if-Abfrage zuerst diese Globale Variable abgefragt weden, ob nur 1 WP enthalten ist oder zwei oder mehrere. Bei 1 WP wird die Order geöffnet, sofern das WP in der Globalen Variablen mit dem des Charts übereinstimmt.
Sollten zwei oder mehrere WP in dieser GV enthalten sein, dann kann nach dem ersten in der GV abgespeicherten WP entschieden werden oder die Order des WP wird geöffnet, dessen WP-Symbol zuerst im Alphabet erscheint o.ä. Auswahlkriterien.

Nach dem Öffnen der einen Order muss die GV gelöscht werden oder mit dem Leerstring gefüllt wird.

traderdoc

droyo33 25.11.21 18:49

Zitat:

Zitat von traderdoc (Beitrag 45817)
Gut, dann sollte eine Globale Variable existieren, auf die beide EA schauen können. D.h. sobald die Signale gegeben werden (wer oder was geben diese Signale konkret?) muss vor der if-Abfrage diese Globale Variable mit den Währungspaarnamen gefüllt werden. Also z.B. EURUSD, USDJPY, NZDUSD, wenn für diese drei WP gleichzeitig ein Signal generiert worder war.
Nun sollte in der if-Abfrage zuerst diese Globale Variable abgefragt weden, ob nur 1 WP enthalten ist oder zwei oder mehrere. Bei 1 WP wird die Order geöffnet, sofern das WP in der Globalen Variablen mit dem des Charts übereinstimmt.
Sollten zwei oder mehrere WP in dieser GV enthalten sein, dann kann nach dem ersten in der GV abgespeicherten WP entschieden werden oder die Order des WP wird geöffnet, dessen WP-Symbol zuerst im Alphabet erscheint o.ä. Auswahlkriterien.

Nach dem Öffnen der einen Order muss die GV gelöscht werden oder mit dem Leerstring gefüllt wird.

traderdoc

zunächt einmal Danke für die Antworten!
Die Signale werden durch mehrere Indikatoren ausgelöst die übereinstimmen müssen.
Welche GV nehme ich am besten zur Lösung des Problems?
Es gibt ja unzähliige:
-GlobalVariableCheck
-GlobalVariableDel etc.
Globale Variablen sind absolutes Neuland für mich....

MA-EA 25.11.21 19:47

Warum soll er nur 5 WP gleichzeitig traden?


GV deklariert man einfach vor OnInit().

Wie wärs mit sowas wie
Code:

Vor
OnInit():int OT;

Dann nach OnTick(){

 if( Handelssignal == true ){

  OT = 0; ( OrdersTotal Zähler-Startwert )

  for(i=OrdersTotal()-1;i>=0;i--){

  if(OrderSelect(i,SELECT_BY_POS)){

  OT++;} }

if( OT < (z.B.) 6 ){

  OrderSend(...UndSoWeiterUndSoFort...

So ungefähr müsste das eigentlich gehn. :confused:

Oder nach WP selektieren und schalten und walten...

traderdoc 25.11.21 20:45

Zitat:

Zitat von MA-EA (Beitrag 45821)
Warum soll er nur 5 WP gleichzeitig traden?

Na weil er das so will!

GV deklariert man einfach vor OnInit().

Ne, das geht auch nicht.

Wie wärs mit sowas wie
Code:

Vor
OnInit():int OT;

Dann nach OnTick(){

 if( Handelssignal == true ){

  OT = 0; ( OrdersTotal Zähler-Startwert )

  for(i=OrdersTotal()-1;i>=0;i--){

  if(OrderSelect(i,SELECT_BY_POS)){

  OT++;} }

if( OT < (z.B.) 6 ){

  OrderSend(...UndSoWeiterUndSoFort...

So ungefähr müsste das eigentlich gehn. :confused:

Ne, so geht das eben gar nicht!

Oder nach WP selektieren und schalten und walten...

Globale Variablen haben den Vorteil, dass auf sie von allen Programmen des Accounts zugegriffen werden kann.
Gesetzt werden die GVs über GlobalVariableSet() und ausgelesen werden sie über GlobalVariableGet().
>es wäre hilfreich, wenn Du in der MQL4-Referenz über die verschiedenen Funktionen bzgl. der GV nachliest. Diese Funktionen sind eigentlich recht simpel.

traderdoc

droyo33 25.11.21 21:24

Zitat:

Zitat von MA-EA (Beitrag 45821)
Warum soll er nur 5 WP gleichzeitig traden?


GV deklariert man einfach vor OnInit().

Wie wärs mit sowas wie
Code:

Vor
OnInit():int OT;

Dann nach OnTick(){

 if( Handelssignal == true ){

  OT = 0; ( OrdersTotal Zähler-Startwert )

  for(i=OrdersTotal()-1;i>=0;i--){

  if(OrderSelect(i,SELECT_BY_POS)){

  OT++;} }

if( OT < (z.B.) 6 ){

  OrderSend(...UndSoWeiterUndSoFort...

So ungefähr müsste das eigentlich gehn. :confused:

Oder nach WP selektieren und schalten und walten...

traderdoc hat rechrtt, das würde nicht funkionieren, da er mir mit der OrdersTotal Funktion alle Orders zurück gibt und nicht nur die eines bestimmten Paares.
AUDNZD 3x
AUDCHF 1x
sind zwar 4 Orders aber nur 2 Paare.
5 Paare deshalb, um den Drawdown gering wie möglich zu halten > 10%.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:59 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum