[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 215

 

И все таки, как ограничить количество открытых ордеров в советнике, а то он их открывает как снежный ком? кусок кода выкладывал ранее.

 
stalkertula:

И все таки, как ограничить количество открытых ордеров в советнике, а то он их открывает как снежный ком? кусок кода выкладывал ранее.

1. Проверили необходимость установки ордера, если да, то...

2. Проверили количество существующих уже ордеров, если да, то...

3. Проверили время, прошедшее после установки предыдущего ордера (или любой другой критерий задержки), если да, то...

4. Выставили ордер.

В общем случае как-то так...

Хотя... каждый из этих пунктов включает в себя ещё различные необходимые проверки для корректировки параметров установки ордера (во избежание возврата ошибки от ДЦ)

Совет:
Когда вы решаете установить ордер или открыть позицию, какие критерии сами оцениваете?
А теперь задайте себе вопрос: "а почему я не даю моему советнику так-же, как и я сам, оценить все критерии для принятия решения?"
Как только учтёте все критерии в советнике, так сразу и ошибки в логике убавятся значительно...

Возьмите себе за правило сначала расписать на бумажке (ничего в этом нет зазорного, а наоборот - помогает) всю логику работы того или иного блока программы,
А уж потом воплощайте её в код.

 
artmedia70:

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();

}
 
Roman.:

  Я тестирую советников по ценам открытия нового бара (для этого в коде советника необходимо указать контроль за образованием нового бара)   
Я стараюсь модифицировать стопы потиково. Роман, чем недостатки такой модификации, помимо отсутствующих стрелочек  модификации?
 

у меня при вставке индикатора зависает терминал и пишет в логи одно и то же: unknown subwindow number -1 for ObjectCreate function

во всех ObjectCreate у меня индекс окна с именем этого индикатора (x=WindowFind(short_name); ObjectCreate("fut "+i,OBJ_TREND,x,0,0,0,0);)

раньше всегда всё работало.. не пойму почему так

 
eddy:

у меня при вставке индикатора зависает терминал и пишет в логи одно и то же: 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, даже если правильно указано имя индикатора.
 
это он и делает.. спасибо
 
Блин понять не могу, пишит
2011.03.07 15:49:40     2011.01.19 10:50  RSI-тралинг EURUSD,H1: OrderSend error 131

Это на терменате альпари...с плавающим спредом...атам где фиксированный работает норм...

Почитал про ошибку, ставил все объемы и 1 лот и 0.1 лот и 0.01 лот.....пишет одну и туже ошибку((((((

 
Vovo4ka:
Блин понять не могу, пишит

Это на терменате альпари...с плавающим спредом...атам где фиксированный работает норм...

Почитал про ошибку, ставил все объемы и 1 лот и 0.1 лот и 0.01 лот.....пишет одну и туже ошибку((((((

По коду ошибки можно узнать направление, в котором копать. Но без кода никто вам не подскажет откуда всплывает эта ошибка.

 
Vovo4ka:
Блин понять не могу, пишит

Это на терменате альпари...с плавающим спредом...атам где фиксированный работает норм...

Почитал про ошибку, ставил все объемы и 1 лот и 0.1 лот и 0.01 лот.....пишет одну и туже ошибку((((((


пиши код
Причина обращения: