![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Как решить данную проблему?
Про сетку я не слышал, проблема была с отложенным ордером.
Цитата: Исходя из а) множественного числа; б) наличия цикла в коде; в) заданного шага, несложно сделать вывод, что ставится сетка отложенных ордеров с шагом Open_Step, в направлении рыночного ордера. Но это уже уточнит топикстартер, что-то он притих.
Да тут все верно, сетка устанавливается с шагом Open_Step в направлении ордера.
Сделаем тогда по умному:
double Price = NormalizeDouble((Ask-Bid)/Point,Digits);
double Step = NormalizeDouble((Price + open_step_2) * Point, Digits);
double PriceB = NormalizeDouble(Ask + Step, Digits);
double PriceS = NormalizeDouble(Bid - Step, Digits);
if ( (SMMA1<MA28_1)){
ticket=OrderSend(NULL,OP_BUY,Lots,Ask,3,NormalizeDouble(Bid-StopLoss*Point,Digits),NormalizeDouble(Bid+TakeProfit*Point,Digits),
"EMA position:",16384,0,Green);
ticket2=OrderSend(Symbol(),OP_BUYSTOP, Lots2, PriceB,2,
NormalizeDouble((Bid+open_step_2)-SL*Point,Digits),NormalizeDouble((Bid+open_step_2)+TP*Point,Digits),"take_trend",MagicNumber2,0,Blue);
Не совсем понял, зачем создавать отдельно переменные. Плюс не ушла проблема с открытием на SELL, ошибка не пропала, а стопы на отложенниках выставляются также как я скидывал по результатам
Отдельно - чтобы не загромождать вызов функции километровыми фразами в несколько строк. Компилятор не бумажный, место экономить не стоит.
Про SELL кода не было, но решается всё по аналогии с BUY. Главное - проверять значения, которые скармливаете функции за цену.
Например, в строке:
ticket2=OrderSend(Symbol(),OP_BUYSTOP, Lots2, PriceB,2,NormalizeDouble((Bid+open_step_2)-SL*Point,Digits),NormalizeDouble((Bid+open_step_2)+TP*Point,Digits),"take_trend",MagicNumber2,0,Blue)
в наличии попытка указать уровни стопа и профита частично в пунктах, вместо цены, конкретно вот - NormalizeDouble((Bid+open_step_2)-SL*Point,Digits),NormalizeDouble((Bid+open_step_2)+TP*Point,Digits).
Подставьте в расчёты реальные значения, результат получится далеко от нужного. Скорее всего скобки нужно расставить так: NormalizeDouble(Bid+(open_step_2-SL)*Point,Digits),NormalizeDouble(Bid+(open_step_2+TP)*Point,Digits)
Отдельно - чтобы не загромождать вызов функции километровыми фразами в несколько строк. Компилятор не бумажный, место экономить не стоит.
Про SELL кода не было, но решается всё по аналогии с BUY. Главное - проверять значения, которые скармливаете функции за цену.
Например, в строке:
ticket2=OrderSend(Symbol(),OP_BUYSTOP, Lots2, PriceB,2,NormalizeDouble((Bid+open_step_2)-SL*Point,Digits),NormalizeDouble((Bid+open_step_2)+TP*Point,Digits),"take_trend",MagicNumber2,0,Blue)
в наличии попытка указать уровни стопа и профита частично в пунктах, вместо цены, конкретно вот - NormalizeDouble((Bid+open_step_2)-SL*Point,Digits),NormalizeDouble((Bid+open_step_2)+TP*Point,Digits).
Подставьте в расчёты реальные значения, результат получится далеко от нужного. Скорее всего скобки нужно расставить так: NormalizeDouble(Bid+(open_step_2-SL)*Point,Digits),NormalizeDouble(Bid+(open_step_2+TP)*Point,Digits)
Поставил скобки, но большой разницы не увидел. Прилагаю скрин результатов, на тэйк профит и стоп лосс для отложника значение 1100, для первой сделки значение для стопа и тейка 1000, что-то мне подсказывает, что проблема не в шаге ибо на первом ордере его естественно нет
Поставил скобки, но большой разницы не увидел. Прилагаю скрин результатов, на тэйк профит и стоп лосс для отложника значение 1100, для первой сделки значение для стопа и тейка 1000, что-то мне подсказывает, что проблема не в шаге ибо на первом ордере его естественно нет
Странная цена, это что за инструмент? Может там особые правила?
Покажите код, по которому сейчас получили такой результат, как-то странно выглядит заданный стоп на 1000 пипс, который в реальности 1075.
Странная цена, это что за инструмент? Может там особые правила?
Покажите код, по которому сейчас получили такой результат, как-то странно выглядит заданный стоп на 1000 пипс, который в реальности 1075.
"EMA position:",16384,0,Green);
for(i=stop_positions;i>=0; i--)
{
ticket2=OrderSend(Symbol(),OP_SELLSTOP, Lots2, PriceS,2,
NormalizeDouble(Ask-(open_step_2+SL)*Point,Digits),NormalizeDouble(Ask-(open_step_2-TP)*Point,Digits),"take_trend",MagicNumber2,0,Blue);//тут ошибка 130
ticket=OrderSend(NULL,OP_BUY,Lots,Ask,3,NormalizeDouble(Bid-StopLoss*Point,Digits),NormalizeDouble(Bid+TakeProfit*Point,Digits),
"EMA position:",16384,0,Green);
for(i=stop_positions;i>=0; i--)
{
ticket2=OrderSend(Symbol(),OP_BUYSTOP, Lots2, PriceB,2,
NormalizeDouble(Bid+(open_step_2-SL)*Point,Digits),NormalizeDouble(Bid+(open_step_2+TP)*Point,Digits),"take_trend",MagicNumber2,0,Blue);
инструмент #NAS100_Z6
ticket=OrderSend(NULL,OP_SELL,Lots,Bid,3,NormalizeDouble(Ask+StopLoss*Point,Digits),NormalizeDouble(Ask-TakeProfit*Point,Digits),
"EMA position:",16384,0,Green);
for(i=stop_positions;i>=0; i--)
{
ticket2=OrderSend(Symbol(),OP_SELLSTOP, Lots2, PriceS,2,
NormalizeDouble(Ask-(open_step_2+SL)*Point,Digits),NormalizeDouble(Ask-(open_step_2-TP)*Point,Digits),"take_trend",MagicNumber2,0,Blue);//тут ошибка 130
ticket=OrderSend(NULL,OP_BUY,Lots,Ask,3,NormalizeDouble(Bid-StopLoss*Point,Digits),NormalizeDouble(Bid+TakeProfit*Point,Digits),
"EMA position:",16384,0,Green);
for(i=stop_positions;i>=0; i--)
{
ticket2=OrderSend(Symbol(),OP_BUYSTOP, Lots2, PriceB,2,
NormalizeDouble(Bid+(open_step_2-SL)*Point,Digits),NormalizeDouble(Bid+(open_step_2+TP)*Point,Digits),"take_trend",MagicNumber2,0,Blue);
Наверное, разумнее было бы ставить уровни стопов для отложек от цены открытия, а не от рыночной цены, попробуйте.
Не забывайте, что стоплосс для продажи должен быть выше цены открытия, а тейкпрофит - ниже. Для покупок - наоборот.
Где вычисляются PriceS,PriceB? Где и как заданы SL, TP, StopLoss, TakeProfit, open_step_2?
Наверное, разумнее было бы ставить уровни стопов для отложек от цены открытия, а не от рыночной цены, попробуйте.
Не забывайте, что стоплосс для продажи должен быть выше цены открытия, а тейкпрофит - ниже. Для покупок - наоборот.
Где вычисляются PriceS,PriceB? Где и как заданы SL, TP, StopLoss, TakeProfit, open_step_2?
extern double TakeProfit=1000;
extern double TP=1100;
extern double SL=1100;
open_step_2=open_step_2+Open_Step;
double Price = NormalizeDouble((Ask-Bid)/Point,Digits);
double Step = NormalizeDouble((Price + open_step_2) * Point, Digits);
double PriceB = NormalizeDouble(Ask + Step, Digits);
double PriceS = NormalizeDouble(Bid - Step, Digits);
Да тут то дело уже не в отложниках, ведь на обычном ордере также стопы неверно выставляются
Не вижу ошибки в рыночном ордере. Что именно там неверно, какая ошибка? Или просто не то значение?
На скриншоте выше, где цены указаны и уровни стопов, всё верно. Покупка по Аск 4791,00 но уровень стопа-то рассчитан по Бид. Если спред 75 пипс был, то всё верно.