Ich habe mir mal erlaubt, den Code per #-Button so darzustellen, dass man ihn auch lesen kann. So sollte das in Zukunft immer geschrieben werden, sonst kann ihn keiner helfen!
Code:
extern double Lot=0.01;
extern int StopLoss=6;
extern int TakeProfit=10;
int Multiplier;
int i=0;
int zaehler;
int MagicNumber=1234;
double TPValue,SLValue;
//+------------------------------------------------------------------+
void OnInit() {
Multiplier = 1;
if(Digits == 3 || Digits == 5) Multiplier = 10;
if(Digits == 6) Multiplier = 100;
if(Digits == 7) Multiplier = 1000;
TakeProfit *= Multiplier;
StopLoss *= Multiplier;
TPValue = NormalizeDouble(TakeProfit * Point, Digits);
SLValue = NormalizeDouble(StopLoss * Point, Digits);
}
void start() {
int ticket;
string comment="Expiration v2 (Long)";
//+------------------------------------------------------------------+
int offeneorders=0;
int anzahlorders=OrdersTotal();
if (Close[2] < Open[2] && Close[1] > Open[1]) {
for(zaehler=0; zaehler<anzahlorders; zaehler++) {
OrderSelect(zaehler, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol()) {
offeneorders++;
}
}
if(offeneorders==0) {
ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask- SLValue,Ask+TPValue,comment,0,0,Blue);
}
if (Time[0] > OrderOpenTime() + 4*Period()*60) {
OrderClose(ticket,Lot,Bid,3,0);
}
}
return(0);
}
So kann das Programm nicht funktionieren.
Ich habe Einiges umgestellt und v.a. über Funktionsaufrufe den Code strukturiert und die SellOpen-Funktion eingebaut.
Code:
extern double Lot=0.01;
extern int StopLoss=6;
extern int TakeProfit=10;
int Multiplier;
int i=0;
int OffeneOrders;
int MagicNumber=1234;
double TPValue, SLValue;
string Comment = "Expiration v2 (Long)";
//+------------------------------------------------------------------+
int OnInit() {
Multiplier = 1;
if(Digits == 3 || Digits == 5) Multiplier = 10;
if(Digits == 6) Multiplier = 100;
if(Digits == 7) Multiplier = 1000;
TakeProfit *= Multiplier;
StopLoss *= Multiplier;
TPValue = NormalizeDouble(TakeProfit * Point, Digits);
SLValue = NormalizeDouble(StopLoss * Point, Digits);
return(INIT_SUCCEEDED);
}
void OnTick() {
CheckOrders();
CheckOpening();
}
void CheckOrders() {
bool ret;
OffeneOrders = 0;
for(int i = OrdersTotal()-1; i >= 0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if(OrderSymbol() == Symbol()) {
if (OrderType() == OP_BUY) {
if (Time[0] > OrderOpenTime() + 4*Period()*60) {
ret = OrderClose(OrderTicket(), OrderLots(), Bid, 3, 0);
if (ret) continue;
}
}
if (OrderType() == OP_SELL) {
if (Time[0] > OrderOpenTime() + 4*Period()*60) {
ret = OrderClose(OrderTicket(), OrderLots(), Ask, 3, 0);
if (ret) continue;
}
}
OffeneOrders++;
}
}
}
}
void CheckOpening() {
if (Close[2] < Open[2] && Close[1] > Open[1]) {
if(OffeneOrders == 0) {
int ticket = OrderSend(Symbol(), OP_BUY, Lot, Ask, 3, Ask-SLValue, Ask+TPValue, Comment, 0, 0, Blue);
}
}
if (Close[2] > Open[2] && Close[1] < Open[1]) {
if(OffeneOrders == 0) {
int ticket = OrderSend(Symbol(), OP_SELL, Lot, Bid, 3, Bid+SLValue, Bid-TPValue, Comment, 0, 0, Green);
}
}
}
Viel Erfolg!
traderdoc