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

 
lil_lil:

Спасибо.

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

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

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

 
Alexey Kozitsyn:

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


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

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

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

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

 
Artyom Trishkin:

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

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

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

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

Там весь код проверки:

switch( id )
{
default:
   Print( __FUNCTION__,": id = "+EnumToString( (ENUM_CHART_EVENT)id ) );
}

нет никакой реакции, к сожалению, в тестере. В функции OnChartEvent(). Вызов из эксперта.

 
Alexey Kozitsyn:

Там весь код проверки:

нет никакой реакции, к сожалению, в тестере. В функции OnChartEvent().

А CHART_EVENT_MOUSE_MOVE=true установлено?
 
Alexey Viktorov:

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

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

Засунул, потому что хочу сделать универсальную функцию подсчёта, для неттинга и хеджа, или такое невозможно?

 
Artyom Trishkin:
А CHART_EVENT_MOUSE_MOVE=true установлено?

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

 
lil_lil:

Засунул, потому что хочу сделать универсальную функцию подсчёта, для неттинга и хеджа, или такое невозможно?

Возможно. Но подходы разные, и их нужно правильно спланировать сначала, а не сыпать всё в один код в одну строку...

 
Alexey Kozitsyn:

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

В общем, мне правда сейчас не до экспериментов - свои-то дела пока стоят в ожидании.

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

 
Artyom Trishkin:

Возможно. Но подходы разные, и их нужно правильно спланировать сначала, а не сыпать всё в один код в одну строку...

Значит буду делать, пока, отдельно.

Что я пропустил?

int GetNum(const string aSymbol)
  {
   int    count=0;
   if(PositionSelect(aSymbol))
     {
      long pos_id=long(PositionGetInteger(POSITION_IDENTIFIER));

      if(pos_id>0)
        {
         if(HistorySelectByPosition(ulong(pos_id)))
           {
            int deals=HistoryDealsTotal();

            for(int i=0; i<deals; i++)
              {
               ulong deal_ticket=HistoryDealGetTicket(i);
               ulong order_ticket=ulong(HistoryDealGetInteger(deal_ticket,DEAL_ORDER));

               if(order_ticket>0)
                 {
                  long deal_entry=long(HistoryDealGetInteger(deal_ticket,DEAL_ENTRY));

                  if(deal_entry==DEAL_ENTRY_IN)
                    {
                     if(m_position.PositionType()==POSITION_TYPE_SELL)
                       {
                        count++;
                       }
                    }
                 }
              }
            if( count > 0 ) return(count);
           }
         else
           {
            Print("Не возможно получить историю позиции по символу ",aSymbol);
           }
        }
      else
        {
         Print("Не возможно определить идентификатор позиции по символу ",aSymbol);
        }
     }
   return( 0 );
  }
////////////
 
Сначала считает правильно, потом, когда активируются 5 лимитных SELL, пишет в коммент 6. откуда шестая берётся?
Причина обращения: