модификация с помощью SELECT не получается, помогите пожалуйста!!!

 

СКОМПИЛИРОВАЛ БЕЗ ОШИБОК НО ПОЧЕМУ-ТО НЕ РАБОТАЕТ

double dwn;

double up;
double SL,TP,ticket_upA,ticket_dwnA;
bool ticket_upAmod,ticket_dwnAmod;

int init()
{
up=Bid+15*Point;
dwn=Bid-15*Point;


SL= dwn+7.5*Point;
TP=up-7.5*Point;
Alert("SL= ",SL,"TP= ",TP);

ticket_upA =OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0);
ticket_dwnA =OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0);

return(0);
}
//--------------------------------------------------------------------------+
int start()
{
ticket_upAmod=false;


ticket_dwnAmod=false;


while(ticket_upAmod==false || ticket_dwnAmod==false)
{


if(Bid<=dwn)


ticket_upAmod=OrderModify(ticket_upA,Ask,dwn,up,0);


if(ticket_upAmod==true)
{
Alert("Win!!!");
return;
}

if(Bid>=up)


ticket_dwnAmod=OrderModify(ticket_dwnA,Bid,up,dwn,0);


if(ticket_dwnAmod==true)
{
Alert("Win!!!");
return;
}
}
//------------------------------------------------------+
return(0);
}

//+-------------------------

вот что сам накалякал. Компилировал без ошибок. но почему-то не модифицирует.

 
dinrid писал(а) >>

вот что сам накалякал. Компилировал без ошибок. но почему-то не модифицирует.

Посмотри к CodeBase. Там все виды трала можно найти (практически). В одной библиотеке

 
Vinin >>:

Посмотри к CodeBase. Там все виды трала можно найти (практически). В одной библиотеке

Спасибо, уже кое-что нашел...

Подскажите, после выставленя ордера переменной прсваивается номер тикета данного ордера, так? Следовательно, OrderModify(переменная со значением тикета, и тд....),функция верна? И как использовать OrderTicket(), если открыто несколько ордеров?

 
dinrid писал(а) >>

Спасибо, уже кое-что нашел...

Подскажите, после выставленя ордера переменной прсваивается номер тикета данного ордера, так? Следовательно, OrderModify(переменная со значением тикета, и тд....),функция верна? И как использовать OrderTicket(), если открыто несколько ордеров?

void Order_Modify(){
   for (int i=OrdersTotal()-1;i>=0;i--){
      if (!OrderSelect(i,SELECT_BY_POS))  continue;
      if (OrderSymbol()!=Symbol())         continue;
      if (OrderMagicNumber()!=Magic)         continue;

      if (OrderType()==OP_BUY) {
         // Ваши условия для модификации позиции
            OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,CLR_NONE);
         }
      if (OrderType()==OP_SELL)
         // Ваши условия для модификации позиции
            OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,CLR_NONE);
      }
   }
}
Что-то примерно так
 
dinrid >>:

Спасибо, уже кое-что нашел...

Подскажите, после выставленя ордера переменной прсваивается номер тикета данного ордера, так? Следовательно, OrderModify(переменная со значением тикета, и тд....),функция верна? И как использовать OrderTicket(), если открыто несколько ордеров?


чтобы найти требуемый тикет ордера надо воспользоваться функцией

OrderSelect( i, SELECT_BY_POS, MODE_TRADES) - почитайте подробнее в справке

при выполнении этой функции в дальнейшем вы определяете тикет через OrderTicket()

Всё дело в том, что OrderTicket() - возвращает тикет только одного выбранного ордера  через OrderSelect. А следовательно, для изменения всех ордеров вам надо в цикле пройтись по ним всем - именно через предварительный вызов OrderSelect

Примерно так:

for (i=0; i<OrdersTotal(); i++)

{

 OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

 OrderModify(OrderTicket(), ......);

 ...

}
 
Vinin >>:
Что-то примерно так
sergeev >>:


чтобы найти требуемый тикет ордера надо воспользоваться функцией

OrderSelect( i, SELECT_BY_POS, MODE_TRADES) - почитайте подробнее в справке

при выполнении этой функции в дальнейшем вы определяете тикет через OrderTicket()

Спасибо! нужно подумать...

 
dinrid >>:

Спасибо! нужно подумать...

sergeev >>:


чтобы найти требуемый тикет ордера надо воспользоваться функцией

OrderSelect( i, SELECT_BY_POS, MODE_TRADES) - почитайте подробнее в справке

при выполнении этой функции в дальнейшем вы определяете тикет через OrderTicket()

Всё дело в том, что OrderTicket() - возвращает тикет только одного выбранного ордера через OrderSelect. А следовательно, для изменения всех ордеров вам надо в цикле пройтись по ним всем - именно через предварительный вызов OrderSelect

Примерно так:


Vinin >>:
Что-то примерно так

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

используя флаг способа выбора SELECT_BY_POS, MODE_TRADS его порядковый номер должен быть 0, так? Но, если из списка отложных откроется ордер под номером 3, например, тогда какой его порядковый номер?

 

нет. вы ни в коем случае не должны работать с поряковыми номерами ордеров для принятия решений.

Только конкретика по тикетам, или лотам, или дате открытия. по другому - может всё нарушится.

OrderSelect(i, SELECT_BY_POS, MODE_TRADES); - это только способ узнать тикет. 

 
sergeev >>:

нет. вы ни в коем случае не должны работать с поряковыми номерами ордеров для принятия решений.

Только конкретика по тикетам, или лотам, или дате открытия. по другому - может всё нарушится.

OrderSelect(i, SELECT_BY_POS, MODE_TRADES); - это только способ узнать тикет.


Ок! Понял.

 
sergeev >>:

нет. вы ни в коем случае не должны работать с поряковыми номерами ордеров для принятия решений.

Только конкретика по тикетам, или лотам, или дате открытия. по другому - может всё нарушится.

OrderSelect(i, SELECT_BY_POS, MODE_TRADES); - это только способ узнать тикет.


Файлы:
 
dinrid >>:


посмотрите пожалуйста код, компилировал без ошибок использовал SELECT но почему-то не исполняется.....?

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