Спасибо всем за ответы.
Чтобы повторные запросы отправлялись именно в указанном диапазоне цен, я решил поступить так:
UpDiapazon= Close[1]-3*Point;
DownDiapazon= Close[1]+3*Point;
if (OrdersTotal() == 0 && Ask<Close[1] && Ask>UpDiapazon)
{OP_BUY}
if(OrdersTotal() == 0 && Bid>Close[1] && Bid<DownDiapazon)
{OP_SELL}
Тогда вне диапазона запросы не будут отправляться.
Если у кого есть еще более практичные и легкие варианты пожалуйста пишите, буду очень признателен.
Если поможет то, вот функция которую сам юзаю
int AntiRequoteOrderSend(string symbol,int cmd,double volume,double price,int slippage,double stoploss,double takeprofit,string comment="",int magic=0,datetime expiration=0,color arrow_color=CLR_NONE) { ticket=0; int cnt=0; while(true) { if(cnt>=MaxAttempts) {Print("Order NOT opened after ",MaxAttempts," attempts"); break;} cnt++; ticket=OrderSend(symbol,cmd,volume,price,slippage,stoploss,takeprofit,Com,magic,expiration,arrow_color); if(ticket>0) break; //Order was successfully opened Sleep(DelaySeconds*1000); } return(ticket); }
При отправке ордера вместо OrderSend
К примеру
было ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,SL,TP,Com,Magic,0,BuyColor); стало ticket=AntiRequoteOrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,SL,TP,Com,Magic,0,BuyColor);
Внешние переменные
input int MaxAttempts = 3; input int DelaySeconds = 15; input int Slippage = 5;
Спасибо всем за ответы.
Чтобы повторные запросы отправлялись именно в указанном диапазоне цен, я решил поступить так:
UpDiapazon= Close[1]-3*Point;
DownDiapazon= Close[1]+3*Point;
if (OrdersTotal() == 0 && Ask<Close[1] && Ask>UpDiapazon)
{OP_BUY}
if(OrdersTotal() == 0 && Bid>Close[1] && Bid<DownDiapazon)
{OP_SELL}
Тогда вне диапазона запросы не будут отправляться.
Если у кого есть еще более практичные и легкие варианты пожалуйста пишите, буду очень признателен.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Я в форуме в первые, сам не профи по мкл программированию, все таки
умудрился написать советник)) Вопрос может быть очень простым для
профи в этом деле, но для меня это не простой вопрос.
Вопрос на счет Slippage.
Укороченный код из совы:
if (OrdersTotal() == 0&& Close[0]>Close[1])
OrderSend(Symbol(),OP_BUY,lot,Ask,Slippage,0,0,"",magic,0,Blue);
Значение слипаж =2
Вопрос: Если слипаж =2 то елси в момент открытия ордера цена отскочит на 3 или более пунктов
то отправит ли советник запрос на покупку по новой цене по причине что условия указанные
для отправки запроса все верны. Т.е. Я хочу чтобы позиция открылась именно там где поступил сигнал, к примеру это EUR/USD 1.1210 максимум 1,1212
но хоть в советнике слипаж указан =2 и цена может отскочить на 6 пунктов выше но тем не менее условия отправки запроса соответствуют повторной отправке
ордера то не смотря на слипаж =2 ордер все равно откроется по нежелательной цене (Или я ошибаюсь?)
Если я прав, то как можно избежать открытия цены на нежелательной цене, чтобы советник открывал позиции в диапазоне =2 пунктов.
Благодарю за ответы.