Добрый день.
Хотел сделать траил стоп, но не знаю как закциклить, сделка редактируется лишь раз.
for(int i= OrdersTotal()-1; i>= 0 ; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == magicnumber)
{
if(OrderType() == OP_BUY && Bid >= OrderOpenPrice()+ 210*Point && OrderStopLoss() < OrderOpenPrice())
OrderModify(OrderTicket(), OrderOpenPrice(), Bid-20*Point, OrderTakeProfit(), 0, CLR_NONE);
}
if(OrderSymbol() == Symbol() && OrderMagicNumber() == magicnumber)
{
if(OrderType() == OP_SELL && Ask <= OrderOpenPrice()- 210*Point && OrderStopLoss() > OrderOpenPrice())
OrderModify(OrderTicket(), OrderOpenPrice(), Ask+20*Point, OrderTakeProfit(), 0, CLR_NONE);
}
Нужно чтобы редактирование происходило постоянно.
Поместите ваш код в функцию OnTick(). Код будет выполнятся каждый раз после прихода нового тика.
Сейчас код находится в ontick(). Я попробовал удалить проверку
OrderStopLoss() > OrderOpenPrice()
Добрый день.
Хотел сделать траил стоп, но не знаю как закциклить, сделка редактируется лишь раз.
for(int i= OrdersTotal()-1; i>= 0 ; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == magicnumber)
{
if(OrderType() == OP_BUY && Bid >= OrderOpenPrice()+ 210*Point && OrderStopLoss() < OrderOpenPrice())
OrderModify(OrderTicket(), OrderOpenPrice(), Bid-20*Point, OrderTakeProfit(), 0, CLR_NONE);
}
if(OrderSymbol() == Symbol() && OrderMagicNumber() == magicnumber)
{
if(OrderType() == OP_SELL && Ask <= OrderOpenPrice()- 210*Point && OrderStopLoss() > OrderOpenPrice())
OrderModify(OrderTicket(), OrderOpenPrice(), Ask+20*Point, OrderTakeProfit(), 0, CLR_NONE);
}
Нужно чтобы редактирование происходило постоянно.
Это ты бу написал.
Надо сравнивать цену с СЛ
Bid >= OrderStopLoss()+trailing*Point
Попробовал сделать так:
for(int b = OrdersTotal()-1;b >= 0;b--)
{
OrderSelect(b, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == magicnumber && OrderType()==OP_BUY)
{
if(Bid >= OrderOpenPrice()+ 210*Point && Bid >= OrderStopLoss())
OrderModify(OrderTicket(), OrderOpenPrice(), Bid-20*Point, OrderTakeProfit(), 0, CLR_NONE);
}
if(OrderSymbol() == Symbol() && OrderMagicNumber() == magicnumber && OrderType()==OP_SELL)
{
if(Ask <= OrderOpenPrice()- 210*Point && Ask <= OrderStopLoss())
OrderModify(OrderTicket(), OrderOpenPrice(), Ask+20*Point, OrderTakeProfit(), 0, CLR_NONE);
}
}
В итоге стоп лосс редактируется то постоянно, но теперь он просто летает за ценой на расстоянии 2х пунктов (когда цена выше 21) .
Тоесть если открыт бай - цена прошла 21 пункт вверх мне нужно разместить стоп на 2 пункта ниже, и вести его за ценой, но не уменьшать (сейчас уменьшается)
Я пас.
Говорю надо цену СЛ сравнивать, а ты опять про цену открытия.
Мне сейчас нужно сделать так чтобы стоп не двигался в обратном направлении, то есть шел только за ценой на расстоянии 2 пунктов, когда цена прошла больше 21 пункта.
Если кто знает, подскажите пожалуйста как это можно сделать
if(Bid >= OrderStopLoss()+ 210*Point)
В итоге второй раз стоп переносится только тогда когда цена будет выше стопа на 21 пункт. А мне нужно чтобы редактировалась уже после как пройдет 2 пункта.
То есть первый перенос стопа делать как прошла цена 21 пункт ( на 19 пунктах будет стоп ) , а после уже на расстоянии 2х пунктов от текущей цены
Не могу понять как это осуществить
for(int b = OrdersTotal()-1;b >= 0;b--)
{
OrderSelect(b, SELECT_BY_POS, MODE_TRADES);
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == magicnumber && OrderType()==OP_BUY)
{
if(Bid >= OrderStopLoss()+ 210*Point)
OrderModify(OrderTicket(), OrderOpenPrice(), Bid-20*Point, OrderTakeProfit(), 0, CLR_NONE);
}
if(OrderSymbol() == Symbol() && OrderMagicNumber() == magicnumber && OrderType()==OP_SELL)
{
if(Ask <= OrderStopLoss()- 210*Point)
OrderModify(OrderTicket(), OrderOpenPrice(), Ask+20*Point, OrderTakeProfit(), 0, CLR_NONE);
}
}
}
В итоге второй раз стоп переносится только тогда когда цена будет выше стопа на 21 пункт. А мне нужно чтобы редактировалась уже после как пройдет 2 пункта.
То есть первый перенос стопа делать как прошла цена 21 пункт ( на 19 пунктах будет стоп ) , а после уже на расстоянии 2х пунктов от текущей цены
Не могу понять как это осуществить
for(int b = OrdersTotal()-1;b >= 0;b--)
{
OrderSelect(b, SELECT_BY_POS, MODE_TRADES);
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == magicnumber && OrderType()==OP_BUY)
{
if(Bid >= OrderStopLoss()+ 210*Point)
OrderModify(OrderTicket(), OrderOpenPrice(), Bid-20*Point, OrderTakeProfit(), 0, CLR_NONE);
}
if(OrderSymbol() == Symbol() && OrderMagicNumber() == magicnumber && OrderType()==OP_SELL)
{
if(Ask <= OrderStopLoss()- 210*Point)
OrderModify(OrderTicket(), OrderOpenPrice(), Ask+20*Point, OrderTakeProfit(), 0, CLR_NONE);
}
}
}
Я думал ты хочешь вникнуть. Надо было сразу сказать "Мне нужен код трейлинга" а не голову морочить.
extern int TrailingStart =0; extern int TrailingStop = 20; extern int TrailingStep =10;
void Traling_Stop_f() { for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS)) { if(OrderSymbol() == Symbol()) { if(OrderMagicNumber()==Magic) { if(OrderType()==OP_BUY) { if(Bid>=NormalizeDouble(OrderOpenPrice()+TrailingStart*point+TrailingStop*point,Digits)) { if(NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-(TrailingStop+TrailingStep)*point,Digits)) { if(NormalizeDouble(OrderStopLoss(),Digits)!=NormalizeDouble(Bid-TrailingStop*point,Digits)) { while(IsTradeContextBusy()) Sleep(int(pause_if_busy*1000)); RefreshRates(); if(OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-TrailingStop*point,Digits), OrderTakeProfit(), 0, clrNONE)) continue; } } } } else if(OrderType()==OP_SELL) { if(Ask<=NormalizeDouble(OrderOpenPrice()-TrailingStart*point-TrailingStop*point,Digits)) { if((NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(Ask+(TrailingStop+TrailingStep)*point,Digits)) || OrderStopLoss()==0) { if(NormalizeDouble(OrderStopLoss(),Digits)!=NormalizeDouble(Ask+TrailingStop*point,Digits)) { while(IsTradeContextBusy()) Sleep(int(pause_if_busy*1000)); RefreshRates(); if(OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+TrailingStop*point,Digits), OrderTakeProfit(), 0, clrNONE)) continue; } } } } } } } } }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день.
Хотел сделать траил стоп, но не знаю как закциклить, сделка редактируется лишь раз.
for(int i= OrdersTotal()-1; i>= 0 ; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == magicnumber)
{
if(OrderType() == OP_BUY && Bid >= OrderOpenPrice()+ 210*Point && OrderStopLoss() < OrderOpenPrice())
OrderModify(OrderTicket(), OrderOpenPrice(), Bid-20*Point, OrderTakeProfit(), 0, CLR_NONE);
}
if(OrderSymbol() == Symbol() && OrderMagicNumber() == magicnumber)
{
if(OrderType() == OP_SELL && Ask <= OrderOpenPrice()- 210*Point && OrderStopLoss() > OrderOpenPrice())
OrderModify(OrderTicket(), OrderOpenPrice(), Ask+20*Point, OrderTakeProfit(), 0, CLR_NONE);
}
Нужно чтобы редактирование происходило постоянно.