Ошибки, баги, вопросы - страница 3721

 
Aleksandr Slavskii #:

А что это меняет? Минимальный он или ещё какой, нам то какая разница? 

Есть спред, нет спреда, не важно.

Был гэп, было закрытие позиции по стоп лоссу.

Если мы запишем закрытие позиции по цене открытия свечи или по цене стоп лосса , в каком случае буде меньше погрешность с реальным закрытием (закрытием на более точных режимах тестирования) ?

Абсолютно поддерживаю.

Уменьшить погрешность между режимами в этих случаях конечно важно, но даже без нее,

зачем разную логику реализовали?

 
Aleksandr Slavskii #:

Был гэп, было закрытие позиции по стоп лоссу.

Открыта SELL-позиция. Был гэп по Bid-цене. Какое это имеет отношение к Ask-цене, по которой нужно закрывать позицию?

 
fxsaber #:

Открыта SELL-позиция. Был гэп по Bid-цене. Какое это имеет отношение к Ask-цене, по которой нужно закрывать позицию?

 spread мы знаем? Знаем.

Bid + spread == Ask 

Ask < SL  ?  закрываем позицию по SL 

Что лучше записать в отчёт, цену  Ask или цену SL ?

 
Aleksandr Slavskii #:

 spread мы знаем?

Нет.

 
fxsaber #:

Нет.

Ну это мы на второй круг пошли, так не годится.

Лучше совсем остановиться чем повторяться.

Зачем мне разные режимы сравнивать? Меня интересует OHLC.

есть бид, есть аск и всё это на открытии свечи в тестере.

что ещё надо?

 
Aleksandr Slavskii #:

Ну это мы на второй круг пошли, так не годится.

Для DEAL_BUY и DEAL_SELL должны быть одинаковые правила акцепта. Если можете написать такое правило в коде - сделайте. Проще код обсуждать, а не трактовки слов.

Вот для тикового режима.
void CheckSL()
{
  const double SL = PositionGetDouble(POSITION_SL);
  MqlTick Tick;
  
  if (SL && SymbolInfoTick(PositionGetString(POSITION_SYMBOL), Tick))
  {
    if (PositionGetInteger(POSITION_TYPE)) // SELL
    {
      if (SL >= Tick.ask)
        PositionClose(); 
    }
    else if (SL <= Tick.bid)
      PositionClose(); 
  }
}


Для OHLC-режима данные цен только такие.

void CheckSL()
{
  const MqlRates Bar1; // Закрывшийся бар.
  const MqlRates Bar0; // Открывшийся бар (open = high = low = close).

// ....
}
 
Aleksandr Slavskii #:

есть бид, есть аск и всё это на открытии свечи в тестере.

Мнимый аск. Тестер не может допускать перекосы для позиций разных направлений. Правила едины. На открытии в OHCL-режиме известна только Bid-цена. Эмуляция Ask не идет в расчет.
 
fxsaber #:
Мнимый аск. Тестер не может допускать перекосы для позиций разных направлений. Правила едины. На открытии в OHCL-режиме известна только Bid-цена. Эмуляция Ask не идет в расчет.

Я не понимаю. Мнимый аск прекрасно работает если мы делаем виртуальный стоп лосс.

А если мы ставим нормальный стоп лосс то закрытие происходит криво. Ну это же не правильно!!!

#include <Trade\Trade_mod.mqh>
CTrade_mod mTrade;
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!PositionSelect(_Symbol))
      if(TimeCurrent() >= D'2026.02.27 22:00:00')
        {
         mTrade.Sell(1, NULL, 0, 5300);
         mTrade.Sell(1);
        }

   CheckSL(5300);// виртуальный стоп лосс поставили на цену 5300
  }
//+------------------------------------------------------------------+
void CheckSL(double SL)
  {
   MqlTick Tick;

   for(int i = PositionsTotal() - 1; i >= 0; i--)
      if(PositionGetTicket(i))
         if(SL && PositionGetDouble(POSITION_SL) == 0 && SymbolInfoTick(_Symbol, Tick))
           {
            if(PositionGetInteger(POSITION_TYPE) == 1)
              {
               if(SL <= Tick.ask)
                  mTrade.PositionClose(PositionGetInteger(POSITION_TICKET));
              }
            else
               if(SL >= Tick.bid)
                  mTrade.PositionClose(PositionGetInteger(POSITION_TICKET));
           }
  }
//+------------------------------------------------------------------+

Открываем две позиции. У одной ставим стоп у второй не ставим.

Следующая свеча откроется с гэпом. Стоп лос специально установлен по цене внутри гэпа. И как же должны закрыться позиции если у нас нет в тестере асков?

Думаю они должны закрыться по одной цене. Смотрим.

О как! Если наколхозить виртуальный стоп лосс, то всё работает как должно работать, а если использовать нормальный стоп лосс то результат совсем не тот, что ожидаешь.

Естественно тест проводился в режиме моделирования OHLC на М1
 
Alexandr Nikolaev #:

При попытке увеличить количество буферов через директиву #property indicator_buffers (например, с 5 до 8), компилятор выдает предупреждение:

"property already exists with different value and will be skipped"

Потому что должен быть один источник правды - либо #property, либо .mqproj.

У вас в .mqproj файле значение свойства индикатора отличается от того, что указано в #property. Компилятор отдает приоритет .mqproj файлу и предупреждает вас, что ваше #property будет проигнорировано.

  • Если указали свойство в .mqproj файле, то не указывайте #property (и изменяйте свойство в .mqproj файле при необходимости).
  • Если хотите #property, то не указывайте соответствующее свойство в .mqproj.
 
Alexandr Nikolaev #:

При попытке увеличить количество буферов через директиву #property indicator_buffers (например, с 5 до 8), компилятор выдает предупреждение:

"property already exists with different value and will be skipped"

  • buffers и plots будут указаны в mqproj файле если вы при создании проекта добавляете plots через wizard:



  • Если не добавлять plots через wizard, то компилятор возьмет buffers и plots из #property (в mqproj файле эти свойства не будут указаны):