Есть ДЦ (пока не буду называть его) у него хотел войти на новости
несколько терминалов вошли с проскальзыванием (это как и ожидалось) но три не вошли хотя была реквота с ценой ниже чем бы при максимальном проскальзывании.
Вот часть эксперта по открытию
externdouble LotNormal=0.1; // Лот для безопасной торговлиexternint sleeppageNormal=15; // слип на исполнение externint tp_Ot_pr_open_posNormal=50; // профит от цены открытия ордераint mult=1;
//+------------------------------------------------------------------+int init()
{
MathSrand(TimeLocal());
magic=MathRand()+1;
maxPipsThenNotTradeNormal=sleeppageNormal;
maxPipsThenNotTradeAgress=sleeppageAgress;
globalTicket=0;
BUModifyOk=false;
if(Digits==3 || Digits==5){mult=10;}
return(0);
}
bool ОткрытиеОрдеров(int type,double inLot, int prolet, int profit,int sleepp)
{
double pr_open,_TP,_SL;
//int ticket=0;int startOpenMS=0,openMS=0,startmodyMS=0,modyMS=0;
//while(ticket==0) // так как открываем один только раз реквоты смысла нет отыгрывать
{
if (!IsTradeContextBusy())
{
RefreshRates();
if (type==0){pr_open=NormalizeDouble(Ask,Digits);}
if (type==1){pr_open=NormalizeDouble(Bid,Digits);}
//Print (MathAbs(Open[0]-pr_open)," ",maxPipsThenNotTrade*Point*mult);if ((type==0 && (pr_open-Close[1])>prolet*Point*mult) || // текущий аск еще не ускакал вверх при покупке
(type==1 && (Close[1]-pr_open)>prolet*Point*mult)) // текущий бид еще не упал вниз при продаже // уже поздно входить
{
Print (pr_open," ",Close[1]," ",pr_open-Close[1]," "," Цена пролетела ",MathAbs(Close[1]-pr_open)/Point/mult," настройка=",prolet," пунктов");
return(false);
}
startOpenMS=GetTickCount();
globalTicket=OrderSend(Symbol(),type,inLot,pr_open,sleepp*mult,0.0,0.0,"",magic,0,DarkOrange);
openMS=GetTickCount();
if (globalTicket<0){Print("Ошибка открытия ордера", GetLastError());}
if (globalTicket>0)
{
startmodyMS=GetTickCount();
OrderSelect(globalTicket,SELECT_BY_TICKET,MODE_TRADES);
if (type==0){_TP=OrderOpenPrice()+profit*Point*mult;_SL=OrderOpenPrice()-SL_Ot_pr_open_pos*Point*mult;}
if (type==1){_TP=OrderOpenPrice()-profit*Point*mult;_SL=OrderOpenPrice()+SL_Ot_pr_open_pos*Point*mult;}
OrderModify(globalTicket,OrderOpenPrice(),_SL,_TP,0,Aqua);
modyMS=GetTickCount();
}
Print("cmd=",type," хотели по цене=",DoubleToStr(pr_open,Digits)," а исполнили по цене=",DoubleToStr(OrderOpenPrice(),Digits)," _SL=",DoubleToStr(_SL,Digits)," _TP=",DoubleToStr(_TP,Digits), " lot=",inLot);
Print("время на открытие =", openMS-startOpenMS, " время на модификацию=",modyMS-startmodyMS);
priceOpenNewsBar=Open[0];
}
//else {break;}
}
//bars=Time[1];return(0);
}
//********************************************************************************************
... вызов и start
if(buyNormal)
{
//timestartsend=GetTickCount();
ОткрытиеОрдеров(0,LotNormal,maxPipsThenNotTradeNormal,tp_Ot_pr_open_posNormal,sleeppageNormal);
Print("Отправили запрос по безопасному бай по цене ",Ask," ",hread[1]," ",GetTickCount()-hread[1], " общее время на открытие и модификацию брокером=",GetTickCount()-timestartsend);
lastSignalIsTrade=true;
buyNormal=false;
}
Вот лог терминала
16:30:01 '*******': instant order buy 3.00 USDJPY at 98.87 sl: 0.00 tp: 0.00
16:30:01 '*******': request was accepted by server
16:30:02 '*******': requote 98.89 / 98.91 for open buy 3.00 USDJPY at 98.87 sl: 0.00 tp: 0.00
16:30:02 _tradeBuySell_mt4_v2-02 USDJPY,M1: Ошибка открытия ордера13816:30:02 _tradeBuySell_mt4_v2-02 USDJPY,M1: cmd=0 хотели по цене=98.87 а исполнили по цене=1.67 _SL=0.00 _TP=0.00 lot=316:30:02 _tradeBuySell_mt4_v2-02 USDJPY,M1: время на открытие =358 время на модификацию=016:30:02 _tradeBuySell_mt4_v2-02 USDJPY,M1: Отправили запрос по безопасному бай по цене 98.87 -1006854429374 общее время на открытие и модификацию брокером=358
Из лога видно что терминал запускался с параметрами слипа 13 пунктов
по коду эксперта приказ уходит с параметром слипа 13*1
но в итоге получаю реквтоту по цене заказанная + 4п целых, то есть укладывается с запасом в проскальзывание
и еще почему то функция при таком "глюке"
DoubleToStr(OrderOpenPrice(),Digits)
возвращает значение 1,67 ну никак к баксене эта цена не прикручивается.
на другом счете этого же брокера данный эксперт отправил приказ по цене 98,87 а открыли по 99,00 то есть уложился в 13п целых ровно счет так же инстант исполнение
16:30:03 _tradeBuySell_mt4_v2-02 USDJPY,M1: open #27662910buy 2.00 USDJPY at 99.00 ok
16:30:04 _tradeBuySell_mt4_v2-02 USDJPY,M1: modify #27662910buy 2.00 USDJPY at 99.00 sl: 98.70 tp: 99.50 ok
16:30:04 _tradeBuySell_mt4_v2-02 USDJPY,M1: cmd=0 хотели по цене=98.87 а исполнили по цене=99.00 _SL=98.70 _TP=99.50 lot=216:30:04 _tradeBuySell_mt4_v2-02 USDJPY,M1: время на открытие =1170 время на модификацию=106016:30:04 _tradeBuySell_mt4_v2-02 USDJPY,M1: Отправили запрос по безопасному бай по цене 98.87 -10068543512246 общее время на открытие и модификацию брокером=2230
Добрый день
Есть ДЦ (пока не буду называть его) у него хотел войти на новости
несколько терминалов вошли с проскальзыванием (это как и ожидалось) но три не вошли хотя была реквота с ценой ниже чем бы при максимальном проскальзывании.
Вот часть эксперта по открытию
Вот лог терминала
А вот лог эксперта
Из лога видно что терминал запускался с параметрами слипа 13 пунктов
по коду эксперта приказ уходит с параметром слипа 13*1
но в итоге получаю реквтоту по цене заказанная + 4п целых, то есть укладывается с запасом в проскальзывание
и еще почему то функция при таком "глюке"
DoubleToStr(OrderOpenPrice(),Digits)возвращает значение 1,67 ну никак к баксене эта цена не прикручивается.
на другом счете этого же брокера данный эксперт отправил приказ по цене 98,87 а открыли по 99,00 то есть уложился в 13п целых ровно счет так же инстант исполнение
В чем подвох ?