ich hab ein Test-EA der eine Buy-Order öffnet wenn "Stochastik < 20" und "Kurs > MA". Den EA als Strategie bitte ignorieren :-) es geht mir nämlich um Folgendes: Die Bedingungen sollen hintereinander und nicht gleichzeitig den Trade auslösen. Also erst "Stochastik < 20" und dann soll danach zeitlich unabhängig davon "Kurs > MA" den Trade auslösen (auch wenn zu dem Zeitpunkt die Stochastikbedingung nicht mehr gültig ist). Habe theroretisch gelernt das dies zB mit einer Bool-Variablen zu machen wäre aber im Detail hab ich das nicht ansatzweise hinbekommen. Wie müsste der Code aussehen sodass die Bedingungen hintereinander und nicht nur gleichzeitig funktionieren? Würde mich riesig über ein bisschen Hilfe freuen !
Lieben Gruß
Anbei der Code:
#property copyright "123"
#property link ""
#include <stdlib.mqh>
#include <WinUser32.mqh>
extern double BuyLots4 = 0.01;
extern int BuyStoploss4 = 20;
extern int BuyTakeprofit4 = 20;
double PipValue=1;
bool Terminated = false;
string LF = "\n";
int NDigits = 4;
int ObjCount = 0;
int current = 0;
int init()
{
NDigits = Digits;
if (false) ObjectsDeleteAll();
Comment("");
}
int start()
{
if (Bars < 10)
{
Comment("Not enough bars");
return (0);
}
if (Terminated == true)
{
Comment("EA Terminated.");
return (0);
}
OnEveryTick1();
}
void OnEveryTick1()
{
if (true == false && false) PipValue = 10;
if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;
indikator1();
}
void indikator1()
{
if (iStochastic(NULL, NULL,5,3,3,MODE_SMA,0,MODE_MAIN,0) < 20)
{
indikator2();
}
}
void indikator2()
{
if (Close[0] > iMA(NULL, NULL,14,0,0,0,0))
{
IfOrderDoesNotExist();
}
}
void IfOrderDoesNotExist()
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
exists = true;
}
}
else
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
}
if (exists == false)
{
BuyOrder();
}
}
void BuyOrder()
{
double SL = Ask - BuyStoploss4*PipValue*Point;
if (BuyStoploss4 == 0) SL = 0;
double TP = Ask + BuyTakeprofit4*PipValue*Point;
if (BuyTakeprofit4 == 0) TP = 0;
int ticket = -1;
if (true)
ticket = OrderSend(Symbol(), OP_BUY, BuyLots4, Ask, 4, 0, 0, "My Expert", 1, 0, Blue);
else
ticket = OrderSend(Symbol(), OP_BUY, BuyLots4, Ask, 4, SL, TP, "My Expert", 1, 0, Blue);
if (ticket > -1)
{
if (true)
{
OrderSelect(ticket, SELECT_BY_TICKET);
bool ret = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Blue);
if (ret == false)
Print("OrderModify() error - ", ErrorDescription(GetLastError()));
}
}
else
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()));
}
}
int deinit()
{
if (false) ObjectsDeleteAll();
}
Hallo liebes Forum,
ich hab ein Test-EA der eine Buy-Order öffnet wenn "Stochastik < 20" und "Kurs > MA". Den EA als Strategie bitte ignorieren :-) es geht mir nämlich um Folgendes: Die Bedingungen sollen hintereinander und nicht gleichzeitig den Trade auslösen. Also erst "Stochastik < 20" und dann soll danach zeitlich unabhängig davon "Kurs > MA" den Trade auslösen (auch wenn zu dem Zeitpunkt die Stochastikbedingung nicht mehr gültig ist). Habe theroretisch gelernt das dies zB mit einer Bool-Variablen zu machen wäre aber im Detail hab ich das nicht ansatzweise hinbekommen. Wie müsste der Code aussehen sodass die Bedingungen hintereinander und nicht nur gleichzeitig funktionieren? Würde mich riesig über ein bisschen Hilfe freuen !
Lieben Gruß
Anbei der Code:
#property copyright "123" #property link "" #include <stdlib.mqh> #include <WinUser32.mqh> extern double BuyLots4 = 0.01; extern int BuyStoploss4 = 20; extern int BuyTakeprofit4 = 20; double PipValue=1; bool Terminated = false; string LF = "\n"; int NDigits = 4; int ObjCount = 0; int current = 0; int init() { NDigits = Digits; if (false) ObjectsDeleteAll(); Comment(""); } int start() { if (Bars < 10) { Comment("Not enough bars"); return (0); } if (Terminated == true) { Comment("EA Terminated."); return (0); } OnEveryTick1(); } void OnEveryTick1() { if (true == false && false) PipValue = 10; if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10; indikator1(); } void indikator1() { if (iStochastic(NULL, NULL,5,3,3,MODE_SMA,0,MODE_MAIN,0) < 20) { indikator2(); } } void indikator2() { if (Close[0] > iMA(NULL, NULL,14,0,0,0,0)) { IfOrderDoesNotExist(); } } void IfOrderDoesNotExist() { bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == 1) { exists = true; } } else { Print("OrderSelect() error - ", ErrorDescription(GetLastError())); } if (exists == false) { BuyOrder(); } } void BuyOrder() { double SL = Ask - BuyStoploss4*PipValue*Point; if (BuyStoploss4 == 0) SL = 0; double TP = Ask + BuyTakeprofit4*PipValue*Point; if (BuyTakeprofit4 == 0) TP = 0; int ticket = -1; if (true) ticket = OrderSend(Symbol(), OP_BUY, BuyLots4, Ask, 4, 0, 0, "My Expert", 1, 0, Blue); else ticket = OrderSend(Symbol(), OP_BUY, BuyLots4, Ask, 4, SL, TP, "My Expert", 1, 0, Blue); if (ticket > -1) { if (true) { OrderSelect(ticket, SELECT_BY_TICKET); bool ret = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Blue); if (ret == false) Print("OrderModify() error - ", ErrorDescription(GetLastError())); } } else { Print("OrderSend() error - ", ErrorDescription(GetLastError())); } } int deinit() { if (false) ObjectsDeleteAll(); }