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

 
Vladimir Zubov:

Этого я незнаю, обычно не закрываю браузер пока не доведу до стадии "готов к проверке". Попробуйте у себя во вкладке поискать раздел "мои продукты", черновик обычно там, если его нет, возможно надо начать с начала. Если имя продукта, который вы хотели опубликовать не занято, то вероятнее всего черновик не сохранился. 

Спасибо! Нашёл!
 
Приветствую всех, уважаемые коллеги!
Когда-то давно задавал вопрос про возможность сохранения в файл массива объектов класса, на что получил от сообщества утвердительный ответ. Наконец-то дошли руки всё это проверить. И да - действительно ЧТО-ТО сохраняет. И потом даже ЧТО-ТО читает. Во всяком случае и FileWriteArray и FileReadArray возвращают правильные значения по количеству записанных и считанных элементов. Однако при попытке обратиться к первому же элементу из считанного массива через метод класса, тестер выдаёт ошибку invalid pointer access и следом OnTick critical error, и завершает работу. Замечу при этом, что если работать не с записанным и впоследствии считанным массивом, а просто с тем, что создаётся в памяти, то всё работает. В чём может быть проблема? Как правильно восстановить сохранённый массив объектов?
 
BlackTomcat:
Приветствую всех, уважаемые коллеги!
Когда-то давно задавал вопрос про возможность сохранения в файл массива объектов класса, на что получил от сообщества утвердительный ответ. Наконец-то дошли руки всё это проверить. И да - действительно ЧТО-ТО сохраняет. И потом даже ЧТО-ТО читает. Во всяком случае и FileWriteArray и FileReadArray возвращают правильные значения по количеству записанных и считанных элементов. Однако при попытке обратиться к первому же элементу из считанного массива через метод класса, тестер выдаёт ошибку invalid pointer access и следом OnTick critical error, и завершает работу. Замечу при этом, что если работать не с записанным и впоследствии считанным массивом, а просто с тем, что создаётся в памяти, то всё работает. В чём может быть проблема? Как правильно восстановить сохранённый массив объектов?
Код в студию!
 
Здравствуйте! В МТ4 разбираюсь неплохо. а в МТ5 начинающий. Какой командой закрыть ордер подскажите! в списке типов операций здесь- https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions     -не нашел. только CLOSE_BY а мне просто закрыть.
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexander Kharlamov:
Здравствуйте! В МТ4 разбираюсь неплохо. а в МТ5 начинающий. Какой командой закрыть ордер подскажите! в списке типов операций здесь- https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions     -не нашел. только CLOSE_BY а мне просто закрыть.

в мт5 не все так просто

закрыть это значит открыть противоположную сделку с таким же лотом

тоесть операция TRADE_ACTION_DEAL 

 
Vladislav Andruschenko:

в мт5 не все так просто

закрыть это значит открыть противоположную сделку с таким же лотом

тоесть операция TRADE_ACTION_DEAL 

Спасибо за ответ но пока не совсем понял.. Открыть противоположную а потом надо сделать TRADE_ACTION_CLOSE_BY  их между собой?
 
Alexander Kharlamov:
Спасибо за ответ но пока не совсем понял.. Открыть противоположную а потом надо сделать TRADE_ACTION_CLOSE_BY  их между собой?

В МТ5 есть понятие ПОЗИЦИЯ. Вы можете закрыть позицию. Если нужно полностью закрыть позицию, то используйте стандартную библиотеку. Для неттингового счёта пример закрытия позиции:

//+------------------------------------------------------------------+
//|                                                 PositionClos.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//--- подключение стандартной библиотеки
#include <Trade\Trade.mqh>
//--- объект класса CTrade
CTrade trade;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- закрытие позицию по текущему символу
   trade.PositionClose(Symbol());
  }
//+------------------------------------------------------------------+
Файлы:
 
Karputov Vladimir:

В МТ5 есть понятие ПОЗИЦИЯ. Вы можете закрыть позицию. Если нужно полностью закрыть позицию, то используйте стандартную библиотеку. Для неттингового счёта пример закрытия позиции:

Кажется я начинаю понимать! ) Позиция будет меняться с каждым исполнением ордера по данному инструменту, правильно. Вопрос теперь такой есть "Идентификатор позиции - это уникальное число, которое присваивается каждой вновь открытой позиции и не изменяется в течение всей ее жизни. Соответствует тикету ордера, которым была открыта позиция."

А если последующие ордера меняют позицию, то номер её остается равным первому ордеру, который её создал?
 
Alexander Kharlamov:

1. Кажется я начинаю понимать! ) Позиция будет меняться с каждым исполнением ордера по данному инструменту, правильно?
2. Вопрос теперь такой есть "Идентификатор позиции - это уникальное число, которое присваивается каждой вновь открытой позиции и не изменяется в течение всей ее жизни. Соответствует тикету ордера, которым была открыта позиция."

А если последующие ордера меняют позицию, то номер её остается равным первому ордеру, который её создал?

1. Да, правильно. Исполнение ордера порождает сделку. Сделка может:

  • создать позицию
  • изменить объём позиции
  • закрыть позицию
2. Что может быть лучше практики? :) Откройте позицию (вручную) на любом графике. Запустите скрипт

//+------------------------------------------------------------------+
//|                                           PositionGetInteger.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   for(int i=0;i<PositionsTotal();i++)
     {
      //--- проверим наличие позиции и выведем время её изменения 
      string pos_symbol=PositionGetSymbol((uint)i);
      if(pos_symbol!=NULL)
        {
         //--- получим идентификатор позиции для дальнейшей работы с ней 
         ulong position_ID=PositionGetInteger(POSITION_IDENTIFIER);
         Print(pos_symbol," postion #",position_ID);
         //--- получим время образования позиции в миллисекундах с 01.01.1970 
         long create_time_msc=PositionGetInteger(POSITION_TIME_MSC);
         PrintFormat("Position #%d  POSITION_TIME_MSC = %i64 milliseconds => %s",position_ID,
                     create_time_msc,TimeToString(create_time_msc/1000));
         //--- получим время последнего изменения позиции в секундах с 01.01.1970 
         long update_time_sec=PositionGetInteger(POSITION_TIME_UPDATE);
         PrintFormat("Position #%d  POSITION_TIME_UPDATE = %i64 seconds => %s",
                     position_ID,update_time_sec,TimeToString(update_time_sec));
         //--- получим время последнего изменения позиции в миллисекундах с 01.01.1970 
         long update_time_msc=PositionGetInteger(POSITION_TIME_UPDATE_MSC);
         PrintFormat("Position #%d  POSITION_TIME_UPDATE_MSC = %i64 milliseconds => %s",
                     position_ID,update_time_msc,TimeToString(update_time_msc/1000));
        }
     }
//--- 
  }
//+------------------------------------------------------------------+

 

- обратите внимание на строку (смотреть во вкладку "Эксперты" терминала):

2016.08.29 14:51:24.435 PositionGetInteger (EURUSD,M1)  EURUSD postion #95873997

Нарастите объём, снова запустите скрипт - сравните снова строку

2016.08.29 14:51:32.872 PositionGetInteger (EURUSD,M1)  EURUSD postion #95873997

Как видите свойство позиции (POSITION_IDENTIFIER) не меняется, если позицию не переворачивать. 

Файлы:
 
POSIITION_IDENTIFIER изменяется при перевороте позиции.
Причина обращения: