kasparsvas16

 
Уровень 9

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2141



РЕКОМЕНДУЮ



Нужна помощь.

Нужна помощь.
Можете подправить часть кода.
код старается изменить ордер на тиках, а надо чтобы на открытие нового бара.
Часть кода —

void CheckBE() { 

   
   if(OrderType() == OP_BUY) { //если ордер на покупку
      double NewSL = NormalizeDouble(OrderOpenPrice()+BE_Step*Point,Digits);
      if(OrderStopLoss() < NewSL) { //если СЛ еще не был перенесен
         if((Bid - OrderOpenPrice()) >= TakeProfit*SetBEDistance/100*Point && NewSL != OrderStopLoss()) {
            if(!OrderModify(OrderTicket(), OrderOpenPrice(), NewSL, OrderTakeProfit(), 0, clrNONE)) { 
               int Error = GetLastError();
            }
         }
      }
   }
   else if(OrderType() == OP_SELL) { //если ордер на продажу
      double NewSL = NormalizeDouble(OrderOpenPrice()-BE_Step*Point,Digits);
      if(OrderStopLoss() > NewSL) { //если СЛ еще не был перенесен
         if((OrderOpenPrice() - Ask) >= TakeProfit*SetBEDistance/100*Point && NewSL != OrderStopLoss()) {
            if(!OrderModify(OrderTicket(), OrderOpenPrice(), NewSL, OrderTakeProfit(), 0, clrNONE)) { 
               int Error = GetLastError();
            }
         }
      }
   }   
}
}


Или подскажите где изменить чтобы советник только на новых барах изменял ордера.
  • 0
  • Просмотров: 640
  • 21 ноября 2022, 03:36
  • kasparsvas16
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Самообучающийся советник (ищу поручителя)
20 ноября 2022
21 ноября 2022

Брокер для ваших роботов, 15 лет на рынке

Комментарии (4)

+
0
datetime t=0;

…

if(t!=Time[0])
{
CheckBE();
t=Time[0];
}

Редактирован: 21 ноября 2022, 18:09
avatar

  34  AM2 Сообщений: 16193 - Андрей

  • 21 ноября 2022, 18:08
+
0
Простите Андрей, а куда именно вставлять Ваш код?
avatar

  9  kasparsvas16 Автор Сообщений: 102

  • 21 ноября 2022, 18:24
+
0
присылайте ваш код целиком, я вставлю сам
avatar

  34  AM2 Сообщений: 16193 - Андрей

  • 21 ноября 2022, 18:49
+
0
Я не крутой кодер, но позволю себе предложить свой вариант решения.

//Добавить в глобальные переменные
datetime last_enter=0; // время открытия свечи последнего изменения SL
int TF=0; // На текущем таймфрейме
//-------------------------------------------------------------------------

void CheckBE()
{
if (last_enter>=iTime(NULL, TF, 0)) return; // на этом баре корректировали
if(OrderType() == OP_BUY) //если ордер на покупку
{
double NewSL = NormalizeDouble(OrderOpenPrice()+BE_Step*Point,Digits);
if(OrderStopLoss() < NewSL) //если СЛ еще не был перенесен
if((Bid — OrderOpenPrice()) >= TakeProfit*SetBEDistance/100*Point && NewSL != OrderStopLoss())
if(!OrderModify(OrderTicket(), OrderOpenPrice(), NewSL, OrderTakeProfit(), 0, clrNONE))
int Error = GetLastError();
}
if(OrderType() == OP_SELL) //если ордер на продажу
{
double NewSL = NormalizeDouble(OrderOpenPrice()-BE_Step*Point,Digits);
if(OrderStopLoss() > NewSL) //если СЛ еще не был перенесен
if((OrderOpenPrice() — Ask) >= TakeProfit*SetBEDistance/100*Point && NewSL != OrderStopLoss())
if(!OrderModify(OrderTicket(), OrderOpenPrice(), NewSL, OrderTakeProfit(), 0, clrNONE))
int Error = GetLastError();
}
last_enter=iTime(NULL, TF, 0);
}
//---------------------------------------------------------------------------

Удачи.
avatar

  7  kvashnin007 Сообщений: 598 - Андрей

  • 25 ноября 2022, 00:30

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий