Вот так, хотя над кодом ещё работать и работать. Но для тестирования пойдёт
externint TP=350;
externint SL=400;
externint H=0;
externint M=0;
externdouble Lot=3;
externint n=100;
int magic=1234;
int slippage=30;
int init(){return(0);}
int deinit(){return(0);}
int start(){
int ticket=-1,NoS=0,NoL=0,NoBS=0,NoSS=0;
for (int i=OrdersTotal()-1;i>=0;i--) {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {
if(OrderSymbol()=="XAUUSD" && OrderMagicNumber()==magic){
switch(OrderType()){
case OP_BUY: NoL++;break;
case OP_SELL: NoS++;break;
case OP_BUYSTOP: NoBS++;break;
case OP_SELLSTOP: NoSS++;break;
default: break;
}
}
}
}
if(Hour()==H && Minute()==M ){// Открываем ордер ровно в заданный час и заданную минуту, не минутой больше, не минутой меньше.datetime expiration=0;// отложенный ордер будет существовать до тех пор пока не сработает или сам хозяин не удалит егоdouble price=Ask+n*Point;// Цена открытия отложенного ордераdouble spread=Ask-Bid; // Текущий спрэдdouble sl=SL*Point;// стоплосс, double tp=TP*Point;// тейкпрофитif(NoL+NoBS==0)ticket=OrderSend("XAUUSD",OP_BUYSTOP,Lot,price,slippage,price-sl-spread,price+tp+spread,"My order ",magic,expiration,Blue);
if(NoS+NoSS==0)ticket=OrderSend("XAUUSD",OP_SELLSTOP,Lot,price,slippage,price+sl+spread,price-tp-spread,"My order ",magic,expiration,Red);
}
return(0);
}
Попробуйте тестировать на М1 и по всем тикам. У Вас очень жесткое условие if(Hour()==H && Minute()==M ){// Открываем ордер ровно в заданный час и заданную минуту, не минутой больше, не минутой меньше.
Попробуйте тестировать на М1 и по всем тикам. У Вас очень жесткое условие if(Hour()==H && Minute()==M ){// Открываем ордер ровно в заданный час и заданную минуту, не минутой больше, не минутой меньше.
Я так и тестирую, а у тебя чей терминал? какого брокера?
Да, ёлки, был небольшой недароботк))). Сейчас у себя попробовал - выставляет. Но наверное нужно подумать о времени когда ордера уже не нужно открывать. А то с заданного до полунучи будут открываться если закрылся предыдущий......
Специально вставил Symbol() вместо "XAUUSD". Запускайте именно на XAUUSD. А то это как-то не совсем правильно.....
externint TP=350;
externint SL=400;
externint H=15;
externint M=45;
externdouble Lot=3;
externint n=100;
int magic=1234;
int slippage=30;
int init(){return(0);}
int deinit(){return(0);}
int start(){
int ticket=-1,NoS=0,NoL=0,NoBS=0,NoSS=0;
double price;
for (int i=OrdersTotal()-1;i>=0;i--) {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic){
switch(OrderType()){
case OP_BUY: NoL++;break;
case OP_SELL: NoS++;break;
case OP_BUYSTOP: NoBS++;break;
case OP_SELLSTOP: NoSS++;break;
default: break;
}
}
}
}
if((Hour()>H) || (Hour()==H && Minute()>=M)){// Открываем ордер только после достижения заданного времени.datetime expiration=0;// отложенный ордер будет существовать до тех пор пока не сработает или сам хозяин не удалит его double spread=Ask-Bid; // Текущий спрэдdouble sl=SL*Point;// стоплосс, double tp=TP*Point;// тейкпрофит
price=Ask+n*Point;// Цена открытия отложенного ордераif(NoL+NoBS==0)ticket=OrderSend(Symbol(),OP_BUYSTOP,Lot,price,slippage,price-sl-spread,price+tp+spread,"My order ",magic,expiration,Blue);// Ордер BUY только один, других не открываем
price=Bid-n*Point;// Цена открытия отложенного ордераif(NoS+NoSS==0)ticket=OrderSend(Symbol(),OP_SELLSTOP,Lot,price,slippage,price+sl+spread,price-tp-spread,"My order ",magic,expiration,Red);// Ордер SELL только один, других не открываем
}
return(0);
}
Да, ёлки, был небольшой недароботк))). Сейчас у себя попробовал - выставляет. Но наверное нужно подумать о времени когда ордера уже не нужно открывать. А то с заданного до полунучи будут открываться если закрылся предыдущий......
Клево все теперь работает)) но действительно выставляет все время ордера((
Вот так, хотя над кодом ещё работать и работать. Но для тестирования пойдёт
Вот так, хотя над кодом ещё работать и работать. Но для тестирования пойдёт
Ошибок нету но ордера тоже не выставляются(
Ошибок нету но ордера тоже не выставляются(
Точнее в одном терминале алпари ставит байстоп а во втором вообще ничего!( и теперь я окончательно потерялся в этом коде!(
Ошибок нету но ордера тоже не выставляются(
Попробуйте тестировать на М1 и по всем тикам. У Вас очень жесткое условие if(Hour()==H && Minute()==M ){// Открываем ордер ровно в заданный час и заданную минуту, не минутой больше, не минутой меньше.
Попробуйте тестировать на М1 и по всем тикам. У Вас очень жесткое условие if(Hour()==H && Minute()==M ){// Открываем ордер ровно в заданный час и заданную минуту, не минутой больше, не минутой меньше.
Я так и тестирую, а у тебя чей терминал? какого брокера?
Я так и тестирую, а у тебя чей терминал? какого брокера?
Альпари, ну не думаю что это как-то влияет в тестере.
Альпари, ну не думаю что это как-то влияет в тестере.
А у тебя он выставляет ордера?
Щас попробую
Да, ёлки, был небольшой недароботк))). Сейчас у себя попробовал - выставляет. Но наверное нужно подумать о времени когда ордера уже не нужно открывать. А то с заданного до полунучи будут открываться если закрылся предыдущий......
Специально вставил Symbol() вместо "XAUUSD". Запускайте именно на XAUUSD. А то это как-то не совсем правильно.....
Да, ёлки, был небольшой недароботк))). Сейчас у себя попробовал - выставляет. Но наверное нужно подумать о времени когда ордера уже не нужно открывать. А то с заданного до полунучи будут открываться если закрылся предыдущий......
Клево все теперь работает)) но действительно выставляет все время ордера((