HILFE :bei EA Start in der OnInit Funktion nach offenen Orders suchen (anhand von der Magic Nummer). Wenn welche gefunden werden, dann kann der EA darauf reagieren und demendsprechen weiterarbeiten.
#property strict
#include <Arrays/ArrayInt.mqh>
input double Lots = 0.01;
input int GridPoints = 300;
input int TpPoints = 400; //TP Punkte
input int SlPoints = 0; //SL Punkte
input string Commentary = ""; //Kommentar
input int Magic = 1; //Magic Nummer
CArrayInt ticketsBuy;
CArrayInt ticketsSell;
double totalLotsBuy = 0;
double totalLotsSell = 0;
int OnInit() {
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason){
}
void OnTick(){
if(ticketsBuy.Total() == 0){
executeBuy();
}else if(OrderSelect(ticketsBuy.At(ticketsBuy.Total()-1) ,SELECT_BY_TICKET)){
if(OrderCloseTime() > 0) ticketsBuy.Delete(ticketsBuy.Total()-1);
else if(Bid < OrderOpenPrice() - GridPoints * _Point){
executeBuy();
double bePrice = calcBePrice(ticketsBuy);
double tp = 0;
switch(ticketsBuy.Total()){
case 2: tp = bePrice + TpPoints * _Point / (totalLotsBuy / Lots); break;
case 3: tp = bePrice + TpPoints * _Point / (totalLotsBuy / Lots) / 2; break;
case 4: tp = bePrice + TpPoints * _Point / (totalLotsBuy / Lots) / 4; break;
default: tp = bePrice;
}
adjustTargetAndStop(ticketsBuy,tp);
}
}
if(ticketsSell.Total() == 0){
executeSell();
}else if(OrderSelect(ticketsSell.At(ticketsSell.Total()-1),SELECT_BY_TICKET)){
- This is my first EA and I'm trying to apply hedging and martingale strategy. Help anyone;)
- help for this code
- RangeBreakout EA
Hallo und herzlich Willkommen, aber bitte:
- Code immer mit dem Code-Knopf der Editierzeile (oder Alt+S) verwenden.
- Da es fast nichts gibt, was nicht schon für MT4/MT5 programmiert wurde, spart eine Suche (oben links die Lupe) viiiiiel Zeit.
- Bei einem EA wird OnInit() nur einmal beim Start ausgeführt, dann OnTick() bei jeden neuen Tick. Wenn das (einmal) das Ziel ist würde auch ein Skript reichen.
- Wenn es nur um Info geht, also kein Handel, dann ginge auch ein Indikator.
- Lies mal:
https://www.mql5.com/de/articles/648 Das MQL5-Kochbuch: Mehrwährungsfähiger Expert Advisor – eine einfache, saubere und schnelle Herangehensweise
https://www.mql5.com/de/articles/650 Das MQL5-Kochbuch: Entwicklung eines mehrwährungsfähigen Expert Advisors mit unbegrenzter Anzahl von Parametern
https://www.mql5.com/de/articles/651 Das MQL5-Kochbuch: Schreiben der Historie von Abschlüssen in eine Datei und Erstellen von Bilanzdiagrammen für jedes Symbol in Excel
https://www.mql5.com/de/articles/211: Orders, Positions und Abschlüsse in MetaTrader 5
https://www.mql5.com/de/articles/7981: Schnelle Werkzeuge für den manuellen Handel: Arbeiten mit offenen Positionen und Pending-Orders - Such in der CodeBase unter: https://www.mql5.com/en/search#!keyword=open%20positions%20and%20pending&module=mql5_module_codebase
Das MQL5-Kochbuch: Mehrwährungsfähiger Expert Advisor – eine einfache, saubere und schnelle Herangehensweise
- www.mql5.com
In diesem Beitrag wird die Umsetzung einer einfachen Herangehensweise an einen mehrwährungsfähigen Expert Advisor beschrieben. Das heißt, Sie werden in der Lage sein, den Expert Advisor für das Testen/den Handel unter identischen Bedingungen aber mit unterschiedlichen Parametern je Symbol einzurichten. Als Beispiel erstellen wir ein Muster für zwei Symbole auf eine Weise, mit der Sie nach Bedarf zusätzliche Symbole hinzufügen können, indem Sie kleine Änderungen am Code vornehmen.
schnuky:
#property strict
#include <Arrays/ArrayInt.mqh>
input double Lots = 0.01;
input int GridPoints = 300;
input int TpPoints = 400; //TP Punkte
input int SlPoints = 0; //SL Punkte
input string Commentary = ""; //Kommentar
input int Magic = 1; //Magic Nummer
CArrayInt ticketsBuy;
CArrayInt ticketsSell;
double totalLotsBuy = 0;
double totalLotsSell = 0;
int OnInit() {
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason){
}
void OnTick(){
if(ticketsBuy.Total() == 0){
executeBuy();
}else if(OrderSelect(ticketsBuy.At(ticketsBuy.Total()-1) ,SELECT_BY_TICKET)){
if(OrderCloseTime() > 0) ticketsBuy.Delete(ticketsBuy.Total()-1);
else if(Bid < OrderOpenPrice() - GridPoints * _Point){
executeBuy();
double bePrice = calcBePrice(ticketsBuy);
double tp = 0;
switch(ticketsBuy.Total()){
case 2: tp = bePrice + TpPoints * _Point / (totalLotsBuy / Lots); break;
case 3: tp = bePrice + TpPoints * _Point / (totalLotsBuy / Lots) / 2; break;
case 4: tp = bePrice + TpPoints * _Point / (totalLotsBuy / Lots) / 4; break;
default: tp = bePrice;
}
adjustTargetAndStop(ticketsBuy,tp);
}
}
if(ticketsSell.Total() == 0){
executeSell();
}else if(OrderSelect(ticketsSell.At(ticketsSell.Total()-1),SELECT_BY_TICKET)){
Hallo,
in der OnInit Funktion können die Orders nicht gesucht werden! OnInit Funktion wird nur bei EA Start einmal aufgerufen.
Nur in OnTick Funktion dürfen die Orders selectiert werden.
Gruß Igor.
Und wo ist das problem? Kannst du mal beschreiben was nicht geht?
amando:
Und wo ist das problem? Kannst du mal beschreiben was nicht geht?
Und wo ist das problem? Kannst du mal beschreiben was nicht geht?
Hallo,
executeBuy(); und executeSell(); müssen deklariert werden.
Gruß Igor
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich