Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 740

 
Vladimir Karputov:


1. Хендл индикатора должен иметь тип int. Пример смотреть тут: CopyBuffer

Точно, этот момент я проглядел, ошибка при компиляции пропала, спасибо!

Но основная проблема на данный момент - рассинхрон, остается актуален. Без его решения нельзя будет например проводить математические операции между инструментами, которые я и планирую испытывать.

 
ottenand:

Точно, этот момент я проглядел, ошибка при компиляции пропала, спасибо!

Но основная проблема на данный момент - рассинхрон, остается актуален. Без его решения нельзя будет например проводить математические операции между инструментами, которые я и планирую испытывать.


Я бы на Вашем месте начал с правильного написания кода - дело в том, что сейчас Ваш стиль - это бесшабашный "четвёрочный" - то есть нет проверок, всё на авось.

Начните исправлять OnInit():

  1. после получения хендл нужно проверить на корректность
  2. если всё нормально возвращать НЕ "0", а "INIT_SUCCEEDED"
Всё это есть в примере iMA. Только потом можно будет двигаться дальше.

 
Vladimir Karputov:


Я бы на Вашем месте начал с правильного написания кода - дело в том, что сейчас Ваш стиль - это бесшабашный "четвёрочный" - то есть нет проверок, всё на авось.

Начните исправлять OnInit():

  1. после получения хендл нужно проверить на корректность
  2. если всё нормально возвращать НЕ "0", а "INIT_SUCCEEDED"
Всё это есть в примере iMA. Только потом можно будет двигаться дальше.

Кто ж тебе сказал, друг, что нельзя тяпляпать на пятёрке, и писать красиво на четвёрке?

Дело не в ПЛАТФОРМЕ, а в голове конкретного писаки...

Профессор Преображенский верно говорил про то, где разруха - не в клозетах, а в головах...


 
Vladimir Karputov:


Я бы на Вашем месте начал с правильного написания кода - дело в том, что сейчас Ваш стиль - это бесшабашный "четвёрочный" - то есть нет проверок, всё на авось.

Начните исправлять OnInit():

  1. после получения хендл нужно проверить на корректность
  2. если всё нормально возвращать НЕ "0", а "INIT_SUCCEEDED"
Всё это есть в примере iMA. Только потом можно будет двигаться дальше.

Ну, теперь буду знать, как мой стиль называется) Правда я начинаю сразу с пятой версии, с нуля)

Спасибо, пункты 1 и 2 исправил.  Вся загвоздка в блоке калькуляции. Буду думать как прописать расположение баров двух инструментов в соответствии с временем. Иначе рассихрон и всё то же предупреждение №4806.

Файлы:
 
ottenand:

Ну, теперь буду знать, как мой стиль называется) Правда я начинаю сразу с пятой версии, с нуля)

Спасибо, пункты 1 и 2 исправил.  Вся загвоздка в блоке калькуляции. Буду думать как прописать расположение баров двух инструментов в соответствии с временем. Иначе рассихрон и всё то же предупреждение №4806.

Воооот! Правильно! Так как, например на M1 по фьючерсу "A" есть бары в 13 минут, 14 минут и 15 минут. А по фьючерсу "Б" есть только в 13 минут и в 15 минут - то есть дыра. Где-то были статьи, искать по слову "дыра".
 
Vladimir Karputov:
Воооот! Правильно! Так как, например на M1 по фьючерсу "A" есть бары в 13 минут, 14 минут и 15 минут. А по фьючерсу "Б" есть только в 13 минут и в 15 минут - то есть дыра. Где-то были статьи, искать по слову "дыра".
Я об этом и говорю) Ошибка №4806 видимо по той причине и приходит. Ок, поищу)
 

Добрый день.

Подскажите, пожалуйста, как найти цену трэндовой линии для текущего бара? Пробовал через ObjectGetDouble, но не дает нужного результата. Пример кода:

   ObjectCreate(0,"O_Resistance",OBJ_TREND,0,UpTime_2[0],UpFractal_2,UpTime_1[0],UpFractal_1);
   ObjectMove(0,"O_Resistance",0,UpTime_2[0],UpFractal_2);
   ObjectMove(0,"O_Resistance",1,UpTime_1[0],UpFractal_1);
   ObjectSetInteger(0,"O_Resistance",OBJPROP_RAY_RIGHT,true);
   ObjectSetInteger(0,"O_Resistance",OBJPROP_COLOR,O_Resistance_Color);
   ObjectSetInteger(0,"O_Resistance",OBJPROP_STYLE,O_Resistance_Style);
   ObjectSetInteger(0,"O_Resistance",OBJPROP_WIDTH,O_Resistance_Width);


double O_ResistancePrice = ObjectGetDouble(0,"O_Resistance",OBJPROP_PRICE,0); // при любом баре дает координату изначальной точки луча, а нужна цена
                                                                              // соответствующая текущему бару или первому
 
MaksGroup:

Добрый день.

Подскажите, пожалуйста, как найти цену трэндовой линии для текущего бара? Пробовал через ObjectGetDouble, но не дает нужного результата. Пример кода:

ObjectGetValueByShift() (только МТ4), ObjectGetValueByTime() (МТ4, МТ5)
 
fxsaber:
Вы же просили без извращений. А если с ними то
Поэтому вот так
double GetPositionCommission( void )
{
  double Commission = ::PositionGetDouble(POSITION_COMMISSION);

  // На случай, если POSITION_COMMISSION не работает
  if (Commission == 0)
  {
    const ulong Ticket = MT4ORDERS::GetPositionDealIn();

    if (Ticket > 0)
    {
      const double LotsIn = ::HistoryDealGetDouble(Ticket, DEAL_VOLUME);

      if (LotsIn > 0)
        Commission = ::HistoryDealGetDouble(Ticket, DEAL_COMMISSION) * ::PositionGetDouble(POSITION_VOLUME) / LotsIn;
    }
  }

  return(Commission);
}
Либо

Понимаю, что пост старенький, но меня только сейчас задело осколком.

Вот этот кусочек не корректен, комиссия на форексе может быть равна нулю

// На случай, если POSITION_COMMISSION не работает
  if (Commission == 0)
 
Artyom Trishkin:
ObjectGetValueByShift() (только МТ4), ObjectGetValueByTime() (МТ4, МТ5)

Спасибо