Небольшой код для простого советника, по отложкам! - страница 3

 

Вот так, хотя над кодом ещё работать и работать. Но для тестирования пойдёт

 extern int TP=350;
 extern int SL=400;
 extern int H=0;
 extern int M=0;
 extern double Lot=3;
 extern int 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);
}
 
Sepulca:

Вот так, хотя над кодом ещё работать и работать. Но для тестирования пойдёт


Ошибок нету но ордера тоже не выставляются(
 
Rebornnn:

Ошибок нету но ордера тоже не выставляются(

Точнее в одном терминале алпари ставит байстоп а во втором вообще ничего!( и теперь я окончательно потерялся в этом коде!(
 
Rebornnn:

Ошибок нету но ордера тоже не выставляются(

Попробуйте тестировать на М1 и по всем тикам. У Вас очень жесткое условие if(Hour()==H && Minute()==M ){// Открываем ордер ровно в заданный час и заданную минуту, не минутой больше, не минутой меньше.
 
Sepulca:

Попробуйте тестировать на М1 и по всем тикам. У Вас очень жесткое условие if(Hour()==H && Minute()==M ){// Открываем ордер ровно в заданный час и заданную минуту, не минутой больше, не минутой меньше.

Я так и тестирую, а у тебя чей терминал? какого брокера?
 
Rebornnn:

Я так и тестирую, а у тебя чей терминал? какого брокера?

Альпари, ну не думаю что это как-то влияет в тестере.
 
Sepulca:

Альпари, ну не думаю что это как-то влияет в тестере.
А у тебя он выставляет ордера?
 
Rebornnn:
А у тебя он выставляет ордера?

Щас попробую
 

Да, ёлки, был небольшой недароботк))). Сейчас у себя попробовал - выставляет. Но наверное нужно подумать о времени когда ордера уже не нужно открывать. А то с заданного до полунучи будут открываться если закрылся предыдущий......

Специально вставил Symbol() вместо "XAUUSD". Запускайте именно на XAUUSD. А то это как-то не совсем правильно.....

 extern int TP=350;
 extern int SL=400;
 extern int H=15;
 extern int M=45;
 extern double Lot=3;
 extern int 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);
}
 
Sepulca:

Да, ёлки, был небольшой недароботк))). Сейчас у себя попробовал - выставляет. Но наверное нужно подумать о времени когда ордера уже не нужно открывать. А то с заданного до полунучи будут открываться если закрылся предыдущий......


Клево все теперь работает)) но действительно выставляет все время ордера((
Причина обращения: