Я написал простенький советник. Принципы таковы:
1. Допускается только один открытый ордер.
2. Закрытие ордера происходит при открытии нового бара.
Проблема состоит в том, что при выполнении условия открытия ордера совершается открытие одного ордера и закрытие его же в пределах данного бара, а потом открытие другого ордера, закрытие которого, как и заложено в условиях, происходит при открытии нового бара.
Буду очень признателен если вы мне поможете найти ошибку и исключить открытие незапланированного ордера.
Спасибо.
проблема в том, что вы проверяете новый бар или нет только тогда, когда есть ордер.
Соответственно (условно)
в 9 утра открылся ордер, в 10 утра закрылся.
Далее. В 14 дня открылся ордер
На следующем тике проверяем новый бар или нет. А он новый - последний раз новый бар или нет проверяли только в 10 утра...
Самое простое - измените эксперта так:
//+------------------------------------------------------------------+ //| iSAR_3bars.mq4 | //| Copyright 2012, Che | //| | //+------------------------------------------------------------------+ #property copyright "Copyright 2012, Che" #property link "" extern double StopLoss =50; extern double TakeProfit =50; extern double Lots =0.01; int i; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } datetime Prev_Time=0; //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- double sl = NormalizeDouble(StopLoss * Point,Digits); double tp = NormalizeDouble(TakeProfit * Point,Digits); double Op0=Open[0]; double Op1=Open[1]; double Op2=Open[2]; double Op3=Open[3]; double A=NormalizeDouble(Ask,Digits); double B=NormalizeDouble(Bid,Digits); double iS0 = iSAR(NULL,0,2.71,6.41,0); // 0 bar double iS1 = iSAR(NULL,0,2.71,6.41,1); // 1 bar double iS2 = iSAR(NULL,0,2.71,6.41,2); // 2 bar double iS3 = iSAR(NULL,0,2.71,6.41,3); // 3 bar //---- if(OrdersTotal()>0) // Если уже совершена покупка или продажа. { if(Fun_New_Bar()==false) // Если нет нового бара выходим. { return(0); } OrderSelect(0,SELECT_BY_POS,MODE_TRADES); // Если есть новый бар выбираем ордер (он у нас должен быть всего один). if(OrderType()==OP_BUY) // Если это Buy.. { OrderClose(OrderTicket(),Lots,B,0); // ..закрываем его. return(0); } if(OrderType()==OP_SELL) // Если это Sell.. { OrderClose(OrderTicket(),Lots,A,0); // ..закрываем его. return(0); } } //else { if(iS3<Op3 && iS2<Op2 && iS1<Op1 && iS0>Op0) // condition to sell { OrderSend(Symbol(),OP_SELL,Lots,B,0,A+sl,A-tp,"",0,0,Green); Prev_Time = Time[0]; return(0); } if(iS3>Op3 && iS2>Op2 && iS1>Op1 && iS0<Op0) // condition to buy {OrderSend(Symbol(),OP_BUY,Lots,A,0,B-sl,B+tp,"",0,0,Green); Prev_Time = Time[0]; return(0); } } return(0); } //-- bool Fun_New_Bar() // Ф-ия обнаружения .. { // .. нового бара if(Prev_Time!=Time[0]) { return(true); } return(false); } //+------------------------------------------------------------------+
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Я написал простенький советник. Принципы таковы:
1. Допускается только один открытый ордер.
2. Закрытие ордера происходит при открытии нового бара.
Проблема состоит в том, что при выполнении условия открытия ордера совершается открытие одного ордера и закрытие его же в пределах данного бара, а потом открытие другого ордера, закрытие которого, как и заложено в условиях, происходит при открытии нового бара.
Буду очень признателен если вы мне поможете найти ошибку и исключить открытие незапланированного ордера.
Спасибо.