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

 
Sergey_Rogozin:

Я уже понял.. Сначала просто невнимательно посмотрел.

Ошибку не вижу.

Интересно тогда, почему не удаляются ордера? Могу выложить код всего советника, но будет ли в этом смысл?
 
dzhini:
Интересно тогда, почему не удаляются ордера? Могу выложить код всего советника, но будет ли в этом смысл?

Попробуйте просто в старте написать ваши условия. По-моему, вышеприведенный цикл for() в старте Вам не нужен.


      if(CalculateCurrentOrders(Symbol())>0) {Alert(CalculateCurrentOrders(Symbol()));ClosePendingOrder(OP_SELLLIMIT);} // (1) 
      if(CalculateCurrentOrders(Symbol())<0) {Alert(CalculateCurrentOrders(Symbol()));ClosePendingOrder(OP_BUYLIMIT);} //(2) 
      if(TimeCurrent() - OrderOpenTime()>=HowManyHours*60*60) {ClosePendingOrder(OP_BUYLIMIT);ClosePendingOrder(OP_SELLLIMIT);} //(3

Достаточно просто в старте их установить.

 

Хе-хе... Вот как раз и нет. Как же он будет перебирать ордера без цикла? Т.к. предполагается, что ордеров может быть довольно большое количество и при этом хотелось бы отойти от использования магиков в качестве индивидуальных меток, то основными метками является символ валюты и тип ордера. В принципе, он с ними и работает, но случайно выяснилось, что в вышеприведёной комбинации работать отказывается. Где ошибка понять не могу. А если понять не могу, то иду к настоящим специалистам.

Если действительно есть интерес, то могу выложить код совы... разберём... всяко полезно будет.

 
dzhini:

Хе-хе... Вот как раз и нет. Как же он будет перебирать ордера без цикла? Т.к. предполагается, что ордеров может быть довольно большое количество и при этом хотелось бы отойти от использования магиков в качестве индивидуальных меток, то основными метками является символ валюты и тип ордера. В принципе, он с ними и работает, но случайно выяснилось, что в вышеприведёной комбинации работать отказывается. Где ошибка понять не могу. А если понять не могу, то иду к настоящим специалистам.

Если действительно есть интерес, то могу выложить код совы... разберём... всяко полезно будет.

Сейчас разбираться поленюсь.

Цикл с селекцией по типу операции и символу у Вас установлен в функции,

а в старте Вы прописываете только условия, при выполнении которых выполняется нужное Вам действие, т.е ClosePendingOrder(OP).

Или перебирать в старте ордера по магику с исполнением ордера, удовлетворяющего условию .

 

Ребят, подстажите иностранные брокерские компании...очень боьшие деньги, а налоги платить не хочется....)) которые работают на метатрейдере 4...))

 
Vovo4ka:

Ребят, подстажите иностранные брокерские компании...очень боьшие деньги, а налоги платить не хочется....)) которые работают на метатрейдере 4...))

Их таких очень много.

Google легко Вас выведет на них.

Заплати налоги и спи спокойно...

 

Добрый день. Подскажите, плиз, как "заставить" советника прекратить выставлять отложенные ордера, если уже допустим открыто 5 бай и 5 селл рыночных ордеров, и как только хотя бы 1 из ордеров закрывается, то советник продолжает выставлять отложки, в ту сторону какой закрылся и так по циклу. (теперь то уж код выложил в правильном виде)

//----------------------------------------------------------------------- проверка установленных стоп ордеров

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

}
 

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

У них получается плавающая цифра как раз портит всю малину..((((

 
в чём вопрос то? переделывай советник..
 
eddy:
в чём вопрос то? переделывай советник..


В том и вопрос что переделывать то ХЗ....везде работает,а вот с плавающим нет((

Причина обращения: