Спасибо, уже кое-что нашел...
Подскажите, после выставленя ордера переменной прсваивается номер тикета данного ордера, так? Следовательно, OrderModify(переменная со значением тикета, и тд....),функция верна? И как использовать OrderTicket(), если открыто несколько ордеров?
Спасибо, уже кое-что нашел...
Подскажите, после выставленя ордера переменной прсваивается номер тикета данного ордера, так? Следовательно, 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); } } }Что-то примерно так
Спасибо, уже кое-что нашел...
Подскажите, после выставленя ордера переменной прсваивается номер тикета данного ордера, так? Следовательно, 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(), ......); ... }
чтобы найти требуемый тикет ордера надо воспользоваться функцией
OrderSelect( i, SELECT_BY_POS, MODE_TRADES) - почитайте подробнее в справке
при выполнении этой функции в дальнейшем вы определяете тикет через OrderTicket()
Всё дело в том, что OrderTicket() - возвращает тикет только одного выбранного ордера через OrderSelect. А следовательно, для изменения всех ордеров вам надо в цикле пройтись по ним всем - именно через предварительный вызов OrderSelect
Примерно так:
Подскажите, есть список из 8 отложных ордеров, появились необходимые условия для торговли, первый отложный ордер из списка стал рыночным.,
используя флаг способа выбора SELECT_BY_POS, MODE_TRADS его порядковый номер должен быть 0, так? Но, если из списка отложных откроется ордер под номером 3, например, тогда какой его порядковый номер?
нет. вы ни в коем случае не должны работать с поряковыми номерами ордеров для принятия решений.
Только конкретика по тикетам, или лотам, или дате открытия. по другому - может всё нарушится.
OrderSelect(i, SELECT_BY_POS, MODE_TRADES); - это только способ узнать тикет.
нет. вы ни в коем случае не должны работать с поряковыми номерами ордеров для принятия решений.
Только конкретика по тикетам, или лотам, или дате открытия. по другому - может всё нарушится.
OrderSelect(i, SELECT_BY_POS, MODE_TRADES); - это только способ узнать тикет.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
СКОМПИЛИРОВАЛ БЕЗ ОШИБОК НО ПОЧЕМУ-ТО НЕ РАБОТАЕТ
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);
}
//+-------------------------
вот что сам накалякал. Компилировал без ошибок. но почему-то не модифицирует.