Code:
int Slippage = 3;
double Pt;
int M;
M = 1;
if (MarketInfo(Symbol(), MODE_PROFITCALCMODE) == 0) {
if (Digits == 3 || Digits == 5) M = 10;
if (Digits == 6) M = 100;
if (Digits == 7) M = 1000;
Pt = Point*M;
} else Pt = 1.0;
int BuyStop_Preis = Ask + (PipDifferenz*Pt);
int BuyStop_StopLoss = Ask + ((PipDifferenz - StopLoss)*Pt);
int BuyStop_TakeProfit = Ask + ((PipDifferenz + TakeProfit)*Pt);
int SellStop_Preis = Bid - (PipDifferenz*Pt);
int SellStop_StopLoss = Bid - ((PipDifferenz + StopLoss)*Pt);
int SellStop_TakeProfit = Bid - ((PipDifferenz - TakeProfit)*Pt);
Slippage *= M;
void OpenBuyStop() {
int ticket, tries;
tries = 0;
if (!GlobalVariableCheck("InTrade")) {
while (tries < 3) {
GlobalVariableSet("InTrade", CurTime()); // set lock indicator
ticket =OrderSend(Symbol(), OP_BUYSTOP, Lots, BuyStop_Preis, Slippage, BuyStop_StopLoss, BuyStop_TakeProfit, "EA Order", 0, 0, Red);
if (ticket > 0) {
Alert("BuyStop eröffnet, Ticket ="+ticket);
GlobalVariableDel("InTrade"); // clear lock indicator
break;
} else {
Alert("Fehler bei der BuyStop -Aufgabe aufgetreten! (Fehlernummer: "+ErrorDescription(GetLastError()) + " BuyStop @ "+BuyStop_Preis + " SL @ " + BuyStop_StopLoss + " TP @" + BuyStop_TakeProfit);
tries++;
}
}
}
}
void OpenSellStop() {
int ticket, tries;
tries = 0;
if (!GlobalVariableCheck("InTrade")) {
while (tries < 3) {
GlobalVariableSet("InTrade", CurTime()); // set lock indicator
ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, SellStop_Preis, Slippage, SellStop_StopLoss, SellStop_TakeProfit, "EA Order", 0, 0, Red);
if (ticket > 0) {
Alert("SellStop eröffnet, Ticket ="+ticket);
GlobalVariableDel("InTrade"); // clear lock indicator
break;
} else {
Alert("Fehler bei der SellStop-Aufgabe aufgetreten! (Fehlernummer: "+ErrorDescription(GetLastError()) + " BuyStop @ " + SellStop_Preis + " SL @ " + SellStop_StopLoss + " TP @" + SellStop_TakeProfit);
tries++;
}
}
}
}
Über M, Digit, Point und Pt wird automatisch festgestellt, ob mit einem 4- oder 5-Digitbroker gehandelt wird. Das ist für die Festlegung des SL, TP und der Slippage eminent wichtig!
Die Slippage war vorher fix mit 1 angegeben. Bei einem 5-Digitbroker hätte das bedeutet, dass nur eine Slippage von 0.1 Pip möglich gewesen wäre - viel zu wenig.
Die Magicnumber wurde als 0 eingesetzt.
Falls Order geöffnet wurde - kurze Alertmeldung und dann mit break Sprung aus der while-Schleife.
traderdoc