Ага. Но как правило больше трех не пишут, так как такой код потом трудно читать, особенно если с момента написания прошло много времени. Лучше разбить эти множество вложенных if на отдельные функции. Или использовать оператор switch ... case
void Trailing()
{
for (int i=OrdersTotal() - 1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
{
if (OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol())
{
if (OrderType() == OP_BUY)
{
if (Bid - OrderOpenPrice() > TrailingStop*Point)
{
if (OrderStopLoss() < Bid-Point*(TrailingStop+TrailingStep) || OrderStopLoss() == 0)
{
if (!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),OrderTakeProfit(),0,Blue))
Print("error order modify");
}
}
}
}
}
}
if (OrderType() == OP_SELL)
{
if (OrderOpenPrice() - Ask > TrailingStop*Point)
{
if (OrderStopLoss() > Ask + Point * (TrailingStop+TrailingStep) || OrderStopLoss() == 0 )
{
if (!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+Point*TrailingStop,Digits),OrderTakeProfit(),0,Red))
Print("error order modify");
}
}
}
}
//--------------------------------------------------------
Добрый день, при тестах трейлинг работает как задумано, а в реале нет или через раз, периодически спамит ошибкой OrderModify error 4108, не как не пойму что не так, поправте пожалуйста, я так понимаю советник не верно выбирает ордера для модификации.
Опишу советник:
При пересечении двух МА открыть 2 позиции, одну короткую, одну длинную по магику. Короткая закрывается либо по тейку либо по обратному пересечению МА, длинная должна тралица. Выбор длинной позиции для трала происходит по магику.
Возможно у меня ошибка в часте кода по открытию поз. написал как смог...:
//BUYif (fast1>slow1&&fast2<slow2)
{
if (StopLoss_1>0) sl=NormalizeDouble(Bid-StopLoss_1*Point,Digits); else sl=0;
if (TakeProfit_1>0) tp=NormalizeDouble(Ask+TakeProfit_1*Point,Digits); else tp=0;
closeshrts();
OrderSend(Symbol(),OP_BUY,Lts,NormalizeDouble(Ask,Digits),5,sl,tp,NULL,0,0,Blue);
}
//BUY_2if (fast1>slow1&&fast2<slow2)
{
if (StopLoss_2>0) sl=NormalizeDouble(Bid-StopLoss_2*Point,Digits); else sl=0;
if (TakeProfit_2>0) tp=NormalizeDouble(Ask+TakeProfit_2*Point,Digits); else tp=0;
closeshrts();
OrderSend(Symbol(),OP_BUY,Lts,NormalizeDouble(Ask,Digits),5,sl,tp,NULL,MagicNumber,0,Blue);
}
//SELLif(fast1<slow1&&fast2>slow2)
{
if (TakeProfit_1>0) sl=NormalizeDouble(Ask+StopLoss_1*Point,Digits); else sl=0;
if (StopLoss_1>0) tp=NormalizeDouble(Bid-TakeProfit_1*Point,Digits); else tp=0;
closelongs();
OrderSend(Symbol(),OP_SELL,Lts,NormalizeDouble(Bid,Digits),5,sl,tp,NULL,0,0,Red);
}
//SELL_2if(fast1<slow1&&fast2>slow2)
{
if (TakeProfit_2>0) sl=NormalizeDouble(Ask+StopLoss_2*Point,Digits); else sl=0;
if (StopLoss_2>0) tp=NormalizeDouble(Bid-TakeProfit_2*Point,Digits); else tp=0;
closelongs();
OrderSend(Symbol(),OP_SELL,Lts,NormalizeDouble(Bid,Digits),5,sl,tp,NULL,MagicNumber,0,Red);
}
Не знаю, возможно стоит писать здесь открытие ордеров через цикл? И как правильно написать что бы были корректные стопы и тейкпрофиты? как у меня написано - работает только на селл, на бай ставит стоп на 0
Можно подробно - что входит ? То что я написал - это цитата знакомого . Я её просто скопировал и суда вставил . Он пытается меня уму разуму MQL научить . Ну а я скрежетаю мозгами . так что пожалуйста напишите что именно входит ?
Можно подробно - что входит ? То что я написал - это цитата знакомого . Я её просто скопировал и суда вставил . Он пытается меня уму разуму MQL научить . Ну а я скрежетаю мозгами . так что пожалуйста напишите что именно входит ?
а ) вопросительный знак ( ? )
б ) обратная наклонная черта ( \\ )
Использование кириллицы - таки недокументированная возможность
Допустимые символы при написании идентификатора: цифры 0-9, латинские прописные и строчные буквы а-z и А-Z, распознаваемые как разные символы, символ подчеркивания (_). Первый символ не может быть цифрой.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Пока не устанете их писать
серьезно?))
Ага. Но как правило больше трех не пишут, так как такой код потом трудно читать, особенно если с момента написания прошло много времени. Лучше разбить эти множество вложенных if на отдельные функции. Или использовать оператор switch ... case
MessageBox()
есть ли возможность сделать чтоб если кликнул после поступления нового тика, не появлялось новое окно а использовались значения первого окна?
Добрый день, при тестах трейлинг работает как задумано, а в реале нет или через раз, периодически спамит ошибкой OrderModify error 4108, не как не пойму что не так, поправте пожалуйста, я так понимаю советник не верно выбирает ордера для модификации.
Опишу советник:
При пересечении двух МА открыть 2 позиции, одну короткую, одну длинную по магику. Короткая закрывается либо по тейку либо по обратному пересечению МА, длинная должна тралица. Выбор длинной позиции для трала происходит по магику.
Возможно у меня ошибка в часте кода по открытию поз. написал как смог...:
Не знаю, возможно стоит писать здесь открытие ордеров через цикл? И как правильно написать что бы были корректные стопы и тейкпрофиты? как у меня написано - работает только на селл, на бай ставит стоп на 0
Направте на путь истинный пожалуйста))
входит.
Можно подробно - что входит ? То что я написал - это цитата знакомого . Я её просто скопировал и суда вставил . Он пытается меня уму разуму MQL научить . Ну а я скрежетаю мозгами . так что пожалуйста напишите что именно входит ?
а ) вопросительный знак ( ? )
б ) обратная наклонная черта ( \\ )
Можно подробно - что входит ? То что я написал - это цитата знакомого . Я её просто скопировал и суда вставил . Он пытается меня уму разуму MQL научить . Ну а я скрежетаю мозгами . так что пожалуйста напишите что именно входит ?
а ) вопросительный знак ( ? )
б ) обратная наклонная черта ( \\ )
Использование кириллицы - таки недокументированная возможность
Допустимые символы при написании идентификатора: цифры 0-9, латинские прописные и строчные буквы а-z и А-Z, распознаваемые как разные символы, символ подчеркивания (_). Первый символ не может быть цифрой.
syntax.
Здравствуйте, подскажите пожалуйста, почему в сомменте не выводит ZigD[0]