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

[Удален]  
Artyom Trishkin:

Я ставлю мышкой.

  • Щелчок выше цены+Ctrl - Sell Limit
  • Щелчок ниже цены+Ctrl -Buy Limit
  • Щелчок выше цены+Ctrl+Shift - Buy Stop
  • Щелчок ниже цены+Ctrl+Shift - Sell Stop
Можно ещё с шифтом ставить BuyStopLimit и SellStopLimit

Вы так ставите ордера в тестере МТ5, в визуальном режиме? А обработка событий как происходит? OnChartEvent() ведь не работает...?

 
Vladimir Karputov:

Тестер работает правильно. Ошибка в логике работы программы: два символа - это как две жизни разных людей (здесь "человек" - это аналог "символ"). А второй человек не обязан просыпаться в тоже время, что и первый ("просыпаться" - это аналог "появление нового бара").

То есть нужно ждать появления нового бара И на первом символе И на втором.


Добавлено: статья Обработчик события "новый бар"

спасибо за оперативный ответ. Буду думать, как все это реализовать в мультивалютном режиме.
 

Такой вопрос - важен ли порядок перечисления условий для поиска свечной комбинации?

Пример:

    if(((high[i-1]-low[i-1]) < (high[i]-low[i])) && (open[i-1] >= Lower1[i]) && ((close[i-1]-open[i-1]) >= 3*(close[i]-open[i])) &&
      (close[i-1 <= Base[i]]) && (high[i-1] <= 0.5*(high[i]-close[i])) && (close[i-1] <= open[i]) && ((close[i]-open[i])<= 0.33*(high[i]-close[i])) &&
      ((close[i]-open[i]) >= (open[i]-low[i])) && (close[i] <= Base[i])) // когда пин-бар ниже, либо равен линии Base
 

Здравствуйте. Счёт неттинг, хочу посчитать сколько лимитных ордеров, одного направления стали позициями.

Функция считает неправильно, почему?

int CurrentPos_sell_nettin()
  {
  string symb=_Symbol;
   int    total       =0;  // Всего сделок в списке выбранной истории
   int    count       =0;  // Счетчик сделок по символу позиции
//--- Если история позиции получена
   for(int i=0; i<PositionsTotal(); i++)
     {
      ulong pt=PositionGetTicket(i);
      long ID=PositionGetInteger(POSITION_IDENTIFIER);
      if(PositionGetString(POSITION_SYMBOL)==symb && HistorySelect(PositionGetInteger(POSITION_TIME),TimeCurrent()+60))
        {
         //--- Получим количество сделок в полученном списке
         total=HistoryDealsTotal();
         //--- Пройдем по всем сделкам в полученном списке
         for(int i=0; i<total; i++)
           {
            ulong dt = HistoryDealGetTicket(i);
            long did = HistoryDealGetInteger(dt, DEAL_POSITION_ID);
            ENUM_DEAL_ENTRY in_out=HistoryDealGetInteger(dt,DEAL_ENTRY);
            if(did==pt && in_out==DEAL_ENTRY_IN)
              {
               if(m_position.PositionType()==POSITION_TYPE_SELL)
                 {
                  count++;
                 }
              }
           }
        }
     }
//---
   return(count);
  }
 
lil_lil:

Здравствуйте. Счёт неттинг, хочу посчитать сколько лимитных ордеров, одного направления стали позициями.

Функция считает неправильно, почему?

Начните с HistorySelectByPosition. Тогда вы получите сделки участвующие только в этой позиции.

 
clickaider:

Такой вопрос - важен ли порядок перечисления условий для поиска свечной комбинации?

Пример:

Пример поглядите - там тридцать штук разных паттернов.

[Удален]  
Artyom Trishkin:

Артём, повторю вопрос, ответьте, пожалуйста:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

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

Alexey Kozitsyn, 2018.06.03 15:39

Вы так ставите ордера в тестере МТ5, в визуальном режиме? А обработка событий как происходит? OnChartEvent() ведь не работает...?


 
Alexey Viktorov:

Начните с HistorySelectByPosition. Тогда вы получите сделки участвующие только в этой позиции.

Спасибо.

Что теперь неправильно?

int CurrentPos_sell_nettin()
  {
   string symb=_Symbol;
   int    total       =0;  // Всего сделок в списке выбранной истории
   int    count       =0;  // Счетчик сделок по символу позиции
//--- Если история позиции получена

   for(int i=0; i<PositionsTotal(); i++)
     {
      ulong pt=PositionGetTicket(i);
      long ID=PositionGetInteger(POSITION_IDENTIFIER);
      if(PositionGetString(POSITION_SYMBOL)==symb && HistorySelect(PositionGetInteger(POSITION_TIME),TimeCurrent()+60))
        {
         if(PositionSelect(symb))
           {
            long pos_id=long(PositionGetInteger(POSITION_IDENTIFIER));

            if(pos_id>0)
              {
               if(HistorySelectByPosition(ulong(pos_id)))
                  total=HistoryDealsTotal();
               //--- Пройдем по всем сделкам в полученном списке
               for(int i=0; i<total; i++)
                 {
                  ulong dt = HistoryDealGetTicket(i);
                  long did = HistoryDealGetInteger(dt, DEAL_POSITION_ID);
                  ENUM_DEAL_ENTRY in_out=HistoryDealGetInteger(dt,DEAL_ENTRY);
                  if(did==pt && in_out==DEAL_ENTRY_IN)
                    {
                     if(m_position.PositionType()==POSITION_TYPE_SELL)
                       {
                        count++;
                       }
                    }
                 }
              }
           }
        }
     }
//---
   return(count);
  }
 
lil_lil:

Спасибо.

Что теперь неправильно?

Я предложил начать с HistorySelectByPosition, а вы засунули это куда-то глубоко в ифы...

На счёте netting может быть только одна позиция по одному символу. Получили ID позиции, получили список сделок участвующих в образовании этой позиции и считайте их по направлению сделки и типу ордера.

 
Alexey Kozitsyn:

Артём, повторю вопрос, ответьте, пожалуйста:


Не видел вопроса :)

Честно - не помню, но по-моему в МТ5 работает - нет разве?

Но ведь я же в тестере ставил отложки... И мышью работал. Вот только вполне может статься, что уже попутал, и работал мышью как раз на реальном графике, а в тестере тупо кнопками...

Гадать не буду - разобрал всю библиотеку свою до винтиков ещё полгода назад, и уже проверить быстро не смогу. Да отложил пока до осени примерно её пересоздание. Так что - быстрее просто проверить работу событийной модели OnChartEvent() в тестере. Но мне пока нет совсем на то времени - прошу прощения :)