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

 
Artyom Trishkin:
А теперь опишите словами то, что описали графически. Используйте high, low, open, close.
Как только опишете словами - считайте, что ТЗ для себя уже написали :)
Останется заменить словесные конструкции кодом.
Хорошо, сейчас сделаю)
 

Размер свечи = high[i] - low[i]

Верхняя тень = high[i] - open[i]

Тело свечи = open[i] - close[i]

Нижняя тень = close[i] - low[i]

Соотношение тела свечи к ее размеру - (high[i] - low[i]) / (open[i] - close[i])

Размер короткой тени должен не превышать некий порог - (close[i] - low[i]) <= close[i]

Ориентация свечи - high[i] > open[i] > close[i] > low[i]

 
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);
  }
Причина обращения: