не поняли сути. к примеру я выставляю отложенный ордер (т.е. есть параметры: цена отркытия стоп лосс и тейк профит). так вот к примеру рынок идет в мою сторону, ордер открывается и после некоторых колебаний закрывается по стоп лоссу. вот мне нужно если ордер закрылся по стоп лоссу открыть его по новой с известными параметрами.
Спасибо вам за помощь, но OOP прошлая цена открытия ордера, которую я выбираю из ИСТОРИИ:
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
Это величина постоянная, по ней открывается отложенный/выставленный ордер.
rabanik:
Добрый вечер, суть кода - после закрытия ордера по стоп лоссу требуется чтобы советник его перевыставил по старым параметрам.
Но почему то, ордера не перевыставляются ((( Помогите плиз начинающему!!!
Принтовать передаваемые значения и код ошибки в журнал надо после OrderSend, тогда и узнаете, почему не сработало.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Добрый вечер, суть кода - после закрытия ордера по стоп лоссу требуется чтобы советник его перевыставил по старым параметрам.
Но почему то, ордера не перевыставляются ((( Помогите плиз начинающему!!!
Спасибо!
Писал вот такой код:
double OOP=0,OTP=0,OSL=0,OL=0;
int OT=0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
OT = OrderType();
OSL = NormalizeDouble(OrderStopLoss(),Digits);
if (OT<2)
{
if ( (OrderSymbol()==Symbol()) && ((TimeCurrent()-OrderCloseTime()) < 36000) ) //моя проверка, 36000 - это 10 часов
{
if (NormalizeDouble(OrderClosePrice(),Digits)==OSL)
{
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
OTP = NormalizeDouble(OrderTakeProfit(),Digits);
OL = OrderLots();
}
}
else OOP=0;
break;
}
}
}
if (OOP!=0)
{
for (i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (NormalizeDouble(OrderOpenPrice(),Digits) == OOP && OL == OrderLots()) return(0);
}
}
if (OT==OP_BUY) OT=OP_BUYLIMIT;
if (OT==OP_SELL) OT=OP_SELLLIMIT;
if (OrderSend(Symbol(),OT,OL,OOP,0,OSL,OTP,NULL,0,0,clrNONE)==-1);
}