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

 

почему здесь написано, что ... позиция должна быть выбрана только методом Select  или SelectByIndex,

если метод SelectByTicket тоже работает?

 

Помогите разобраться с функцией ArrayPrint - хочу получать 100 последних элементов массива , и 100 первых и 100 последних.

               ArrayPrint(arr_P_val_X,8,NULL,Calc_XY-100,100,ARRAYPRINT_INDEX);//Ожидаю получить 100 последних элементов, выдает первые
               ArrayPrint(arr_P_val_X,ARRAYPRINT_LIMIT);//Хочу получить 100 и 100 последний - выдает весь массив - что не так?

Calc_XY - число элементов в массиве.

 

как взять тикет только что открытой сделки?
если пользуешься классом CTrade и функцией Buy().

в мт4 функция OrderSend() сразу давала тикет.



а есть функция, которая по индексу позиции дает тикет позиции?

или нужно сначала выбрать позицию (селект) ?

 
multiplicator:

как взять тикет только что открытой сделки?
если пользуешься классом CTrade и функцией Buy().

в мт4 функция OrderSend() сразу давала тикет.



а есть функция, которая по индексу позиции дает тикет позиции?

или нужно сначала выбрать позицию (селект) ?

В OnTradeTransaction при типе транзакции trans.type == TRADE_TRANSACTION_DEAL_ADD находишь тикет в структуре trans.position

struct MqlTradeTransaction 
  { 
   ulong                         deal;             // Тикет сделки 
   ulong                         order;            // Тикет ордера 
   string                        symbol;           // Имя торгового инструмента 
   ENUM_TRADE_TRANSACTION_TYPE   type;             // Тип торговой транзакции 
   ENUM_ORDER_TYPE               order_type;       // Тип ордера 
   ENUM_ORDER_STATE              order_state;      // Состояние ордера 
   ENUM_DEAL_TYPE                deal_type;        // Тип сделки 
   ENUM_ORDER_TYPE_TIME          time_type;        // Тип ордера по времени действия 
   datetime                      time_expiration;  // Срок истечения ордера 
   double                        price;            // Цена  
   double                        price_trigger;    // Цена срабатывания стоп-лимитного ордера 
   double                        price_sl;         // Уровень Stop Loss 
   double                        price_tp;         // Уровень Take Profit 
   double                        volume;           // Объем в лотах 
   ulong                         position;         // Тикет позиции 
   ulong                         position_by;      // Тикет встречной позиции 
  };
 
Всем привет уважаемые участники форума, модераторы, админы и т.д. 
Объясните мне пожалуйста, как подсчитать общую прибыль по открытым позициям в MQL5. В MQL4 с этим нет проблем. Пишу здесь не от лени, 
а потому что уже не знаю как это реализовать. Используя PositionGetDouble(POSITION_PROFIT), идет подсчет прибыли только для первой открытой позиции, 
для остальных она не рассчитывается. 

В MQL4 же OrderProfit() показывает прибыль по всем ордерам. Может упустил чего... 


Извиняюсь, забыл указать, тип счета hedge
 
Ramiz Mavludov:
Извиняюсь, забыл указать, тип счета hedge

Вам срочно и обязательно надо посетить курсы ликвидации безграмотности. В mql5 так-же как и в mql4 прежде чем работать с позицией (в mql4 ордером) позицию надо выбрать. В отличии от mql4 в mql5 я помню ТРИ функции выбора позиции. В документации они хорошо описаны. В путь... не сочтите за грубость.

 
Ramiz Mavludov:
Извиняюсь, забыл указать, тип счета hedge

Код Previous Candle Breakdown 3, функция CalculatePositions, полная прибыль

//+------------------------------------------------------------------+
//| Calculate positions Buy and Sell                                 |
//+------------------------------------------------------------------+
void CalculatePositions(int &count_buys,int &count_sells,double &profit)
  {
   count_buys=0;
   count_sells=0;
   profit=0.0;

   for(int i=PositionsTotal()-1;i>=0;i--)
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
           {
            profit+=m_position.Commission()+m_position.Swap()+m_position.Profit();
            if(m_position.PositionType()==POSITION_TYPE_BUY)
               count_buys++;

            if(m_position.PositionType()==POSITION_TYPE_SELL)
               count_sells++;
           }
//---
   return;
  }

после обхода всех позиций по данному символу и данному Magic'y в переменной profit будет общая прибыль.

 
Vladimir Karputov:

Код Previous Candle Breakdown 3, функция CalculatePositions, полная прибыль

после обхода всех позиций по данному символу и данному Magic'y в переменной profit будет общая прибыль.

Спасибо Владимир. 

 

Справка: https://www.mql5.com/ru/docs/runtime/running
В справке сказано:
"если в очереди mql5-программы уже находится событие ChartEvent или такое событие обрабатывается, то новое событие такого типа не ставится в очередь".

Результаты этого примера показывают, что все события, создаваемые  ф-ей EventChartCustom(), в очередь ставятся (и в дальнейшем обрабатываются в OnChartEvent() ).

void OnInit() 
   {
   Print("\n\nOnInit  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); 
   for (int i=1; i<=10; i++)
      {
      int event = 1000 + i;                 
      long GTC = GetTickCount();   
      Print("OnInit  >>>   i = ", i, "   GTC = ", GTC);
      EventChartCustom(0, event, GTC, (double)i,"");    
      Sleep(10);                   
      }
   Print("");
   return;                                         
   }
//----------------------------------------
void OnChartEvent(const int     event,  
                  const long&   lparam, 
                  const double& dparam, 
                  const string& sparam  
                  )
   {
   Print("OnChartEvent:  >>>>>>>   event = ", event, "  lparam = ", lparam, "  dparam = ", dparam );  
   }

Поясните, пожалуйста, ставятся или не ставятся?

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Каждый скрипт и каждый эксперт работает в собственном отдельном потоке. Все индикаторы, рассчитываемые на одном символе, даже если они запущены на разных графиках, работают в одном потоке. Таким образом, все индикаторы на одном символе делят между собой ресурсы одного потока. В одном потоке с индикаторами также последовательно выполняются...
 

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

Указываю:

#resource "\\Indicators\\Bollinger new.ex5"

Пытаюсь вызвать из ресурсов:

 BolBandsNewHandle=iCustom (NULL,TF_graph,"::Indicators\\Bollinger new.ex5", ...

 При таком способе у меня на компе все работает, но при переносе на другой выдается ошибка:

test on EURUSD,H1 (netting)
 expert file MQL5\Indicators\Bollinger new.ex5 open error [2]
 program file Indicators\Bollinger new.ex5 read error
 loading of Bollinger new EURUSD,H1 failed [532]
 2016.04.01 00:00:00   cannot load custom indicator 'Bollinger new' [4802]
strategy tester report 45 total trad

Или в индикаторе надо указать что он есть ресурс эксперта?

Как-то я это делал, но подзабыл просто )

.......................

Что с форумом случилось? Ответ на вопрос знают все кто добавлял продукт в маркет. И все молчат. )