И все таки, как ограничить количество открытых ордеров в советнике, а то он их открывает как снежный ком? кусок кода выкладывал ранее.
1. Проверили необходимость установки ордера, если да, то...
2. Проверили количество существующих уже ордеров, если да, то...
3. Проверили время, прошедшее после установки предыдущего ордера (или любой другой критерий задержки), если да, то...
4. Выставили ордер.
В общем случае как-то так...
Хотя... каждый из этих пунктов включает в себя ещё различные необходимые проверки для корректировки параметров установки ордера (во избежание возврата ошибки от ДЦ)
Совет: Когда вы решаете установить ордер или открыть позицию, какие критерии сами оцениваете? А теперь задайте себе вопрос: "а почему я не даю моему советнику так-же, как и я сам, оценить все критерии для принятия решения?" Как только учтёте все критерии в советнике, так сразу и ошибки в логике убавятся значительно...
Возьмите себе за правило сначала расписать на бумажке (ничего в этом нет зазорного, а наоборот - помогает) всю логику работы того или иного блока программы, А уж потом воплощайте её в код.
1. Проверили необходимость установки ордера, если да, то...
2. Проверили количество существующих уже ордеров, если да, то...
3. Проверили время, прошедшее после установки предыдущего ордера (или любой другой критерий задержки), если да, то...
4. Выставили ордер.
В общем случае как-то так... Хотя... каждый из этих пунктов включает в себя ещё различные необходимые проверки для корректировки параметров установки ордера (во избежание возврата ошибки от ДЦ)
Спасибо за ответ, но алгоритм на русском у меня написан, а вот в mql, я не силен, хотя бы наводку по функциям, которые зафиксировали количество (количество пропишу в настройках) открытых ордеров sell/buy, и далее сигнал на запрет выставления отложек sellstop/buystop.
//----------------------------------------------------------------------- проверка установленных стоп ордеровdouble StopOrderUp,StopOrderDn,price,MinBuyOrder=1000000000,MaxSellOrder,OldBuyOrder,OldSellOrder,OldBuyLot,OldSellLot;
int TicketUp,TicketDn;
TimeOllOpenBuy=0;TimeOllOpenSell=0;
double OOL_BUYSTOP,OOL_SELSTOP;
for (i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{ price = OrderOpenPrice();
if (Magic==OrderMagicNumber() && OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUYSTOP ) {StopOrderUp = price; TicketUp=OrderTicket(); OOL_BUYSTOP=OrderLots();}
if (OrderType()==OP_SELLSTOP) {StopOrderDn = price; TicketDn=OrderTicket(); OOL_SELSTOP=OrderLots();}
if (OrderType()==OP_BUY )
{ TimeOllOpenBuy = TimeOllOpenBuy + TimeCurrent()-OrderOpenTime();
if (MinBuyOrder > price) MinBuyOrder = price;
OldBuyOrder=price;
OldBuyLot=OrderLots();
if (DrawInfo&&!IsTesting()){
NameLine="ордер Bay "+OrderTicket();ObjectDelete(NameLine);ObjectDelete(NameLine+" з");
ObjectCreate(NameLine, OBJ_TREND, 0, OrderOpenTime(),price,Time[0],Bid);
ObjectSet(NameLine, OBJPROP_COLOR,LightSkyBlue);
ObjectCreate(NameLine+" з",OBJ_ARROW,0,Time[0],Bid,0,0,0,0);
ObjectSet(NameLine, OBJPROP_STYLE, STYLE_DOT);// Стиль
ObjectSet(NameLine, OBJPROP_RAY, false); // Луч
ObjectSet(NameLine+" з",OBJPROP_ARROWCODE,3);ObjectSet(NameLine+" з",OBJPROP_COLOR,WhiteColor);}
}
if (OrderType()==OP_SELL)
{ TimeOllOpenSell = TimeOllOpenSell + TimeCurrent()-OrderOpenTime();
if (MaxSellOrder < price) MaxSellOrder = price;
OldSellOrder=price;
OldSellLot=OrderLots();
if (DrawInfo&&!IsTesting()){
NameLine="ордер Sell "+OrderTicket();ObjectDelete(NameLine);ObjectDelete(NameLine+" з");
ObjectCreate(NameLine, OBJ_TREND, 0, OrderOpenTime(),price,Time[0],Ask);
ObjectSet(NameLine, OBJPROP_COLOR,Pink);
ObjectCreate(NameLine+" з",OBJ_ARROW,0,Time[0],Ask,0,0,0,0);
ObjectSet(NameLine, OBJPROP_STYLE, STYLE_DOT);// Стиль
ObjectSet(NameLine, OBJPROP_RAY, false); // Луч
ObjectSet(NameLine+" з",OBJPROP_ARROWCODE,3);ObjectSet(NameLine+" з",OBJPROP_COLOR,WhiteColor);}
}
}
}
}
if (MinBuyOrder==1000000000 && MaxSellOrder==0 && OOL_BUYSTOP!=OOL_SELSTOP)//если серия закрылась
{
DELETEORDERS();
}
у меня при вставке индикатора зависает терминал и пишет в логи одно и то же: 15:18:16 RSI EURUSD,M15: unknown subwindow number -1 for ObjectCreate function
во всех ObjectCreate у меня индекс окна с именем этого индикатора (WindowFind(indikator_name)), например ObjectCreate("fut "+i,OBJ_TREND,x,0,0,0,0);
раньше всегда всё работало.. не пойму почему так
Возможно, это из-за того, что ObjectCreate вызывается из init(). В этом случае поиск окна может возвращать -1, даже если правильно указано имя индикатора.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
И все таки, как ограничить количество открытых ордеров в советнике, а то он их открывает как снежный ком? кусок кода выкладывал ранее.
И все таки, как ограничить количество открытых ордеров в советнике, а то он их открывает как снежный ком? кусок кода выкладывал ранее.
1. Проверили необходимость установки ордера, если да, то...
2. Проверили количество существующих уже ордеров, если да, то...
3. Проверили время, прошедшее после установки предыдущего ордера (или любой другой критерий задержки), если да, то...
4. Выставили ордер.
В общем случае как-то так...Хотя... каждый из этих пунктов включает в себя ещё различные необходимые проверки для корректировки параметров установки ордера (во избежание возврата ошибки от ДЦ)
Совет:
Когда вы решаете установить ордер или открыть позицию, какие критерии сами оцениваете?
А теперь задайте себе вопрос: "а почему я не даю моему советнику так-же, как и я сам, оценить все критерии для принятия решения?"
Как только учтёте все критерии в советнике, так сразу и ошибки в логике убавятся значительно...
Возьмите себе за правило сначала расписать на бумажке (ничего в этом нет зазорного, а наоборот - помогает) всю логику работы того или иного блока программы,
А уж потом воплощайте её в код.
1. Проверили необходимость установки ордера, если да, то...
2. Проверили количество существующих уже ордеров, если да, то...
3. Проверили время, прошедшее после установки предыдущего ордера (или любой другой критерий задержки), если да, то...
4. Выставили ордер.
В общем случае как-то так...Хотя... каждый из этих пунктов включает в себя ещё различные необходимые проверки для корректировки параметров установки ордера (во избежание возврата ошибки от ДЦ)
Спасибо за ответ, но алгоритм на русском у меня написан, а вот в mql, я не силен, хотя бы наводку по функциям, которые зафиксировали количество (количество пропишу в настройках) открытых ордеров sell/buy, и далее сигнал на запрет выставления отложек sellstop/buystop.
Я тестирую советников по ценам открытия нового бара (для этого в коде советника необходимо указать контроль за образованием нового бара)
у меня при вставке индикатора зависает терминал и пишет в логи одно и то же: unknown subwindow number -1 for ObjectCreate function
во всех ObjectCreate у меня индекс окна с именем этого индикатора (x=WindowFind(short_name); ObjectCreate("fut "+i,OBJ_TREND,x,0,0,0,0);)
раньше всегда всё работало.. не пойму почему так
у меня при вставке индикатора зависает терминал и пишет в логи одно и то же: 15:18:16 RSI EURUSD,M15: unknown subwindow number -1 for ObjectCreate function
во всех ObjectCreate у меня индекс окна с именем этого индикатора (WindowFind(indikator_name)), например ObjectCreate("fut "+i,OBJ_TREND,x,0,0,0,0);
раньше всегда всё работало.. не пойму почему так
Это на терменате альпари...с плавающим спредом...атам где фиксированный работает норм...
Почитал про ошибку, ставил все объемы и 1 лот и 0.1 лот и 0.01 лот.....пишет одну и туже ошибку((((((
Блин понять не могу, пишит
Это на терменате альпари...с плавающим спредом...атам где фиксированный работает норм...
Почитал про ошибку, ставил все объемы и 1 лот и 0.1 лот и 0.01 лот.....пишет одну и туже ошибку((((((
По коду ошибки можно узнать направление, в котором копать. Но без кода никто вам не подскажет откуда всплывает эта ошибка.
Блин понять не могу, пишит
Это на терменате альпари...с плавающим спредом...атам где фиксированный работает норм...
Почитал про ошибку, ставил все объемы и 1 лот и 0.1 лот и 0.01 лот.....пишет одну и туже ошибку((((((
пиши код