Как на MQL 5 получить данные по времени и цене открытия и времени и цене закрытия сделки? - страница 4

 
Vladimir Karputov:

Доработайте мой код для работы не неттинге. Я ничего не могу протестировать на бирже. А раз так - значит те кто пользует неттинг счета не могут пользовать мои коды.

Дак можно же и на форексе протестировать, я же ваш код на форе тестирую, разницы то нет, просто демка нужна без хеджа открытая, ведь ДЦ сейчас предоставляют торговлю на форексе как с хеджем так и без него и как бы мне кажется нужно делать какой переключатель между такими типами торговли, это бы расширило функционал использования готовых кодов. Я не чего плохого не имею в виду ваших кодов, у вас есть потрясающие разработки, многими пользуюсь и на многих научился разрабатывать какие-либо свои мысли. 

Судя по справке, мы можем перебирать ордера и сделки, находить из списка то что нам нужно и уже снимать с нее всевозможные показатели, непосредственно обращаясь ко всему напрямую... А вот по позициям интересная ситуация, почему  нельзя перебрать непосредственно позиции, в которых находятся сделки, к примеру за день, найти нужную нам позицию и снять с нее данные для работы. 

Попробую ваш класс поковырять, может на дурака методом тыка чего получиться))

 
Konstantin Seredkin:

Я так понял нет возможности собрать все сделки и отследить закрытие позиции в промежутке выставленного временного диапазона ?

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

Вам вместо чтения форума лучше было-бы читать документацию. Выбрать ордера и сделки за промежуток времени. Выбрать ордера и сделки относящиеся к определённой позиции. Да и другие полезные функции...

Документация по MQL5: Торговые функции
Документация по MQL5: Торговые функции
  • www.mql5.com
Торговые функции могут использоваться в экспертах и скриптах. Торговые функции могут быть вызваны только в том случае, если в свойствах соответствующего эксперта или скрипта включена галочка "Разрешить советнику торговать".
 
Konstantin Seredkin:

Дак можно же и на форексе протестировать, я же ваш код на форе тестирую, разницы то нет, просто демка нужна без хеджа открытая, ведь ДЦ сейчас предоставляют торговлю на форексе как с хеджем так и без него и как бы мне кажется нужно делать какой переключатель между такими типами торговли, это бы расширило функционал использования готовых кодов. Я не чего плохого не имею в виду ваших кодов, у вас есть потрясающие разработки, многими пользуюсь и на многих научился разрабатывать какие-либо свои мысли. 

Судя по справке, мы можем перебирать ордера и сделки, находить из списка то что нам нужно и уже снимать с нее всевозможные показатели, непосредственно обращаясь ко всему напрямую... А вот по позициям интересная ситуация, почему  нельзя перебрать непосредственно позиции, в которых находятся сделки, к примеру за день, найти нужную нам позицию и снять с нее данные для работы. 

Попробую ваш класс поковырять, может на дурака методом тыка чего получиться))

Лучше сначала так: проектируем советник, который делает НА ИСТОРИЧЕСКОМ промежутке определенный действия: выставляет Buy stop 5.0 (и мы знаем, что он сработает), выше ещё Buy stop 4.0 (и снова знаем, что и он сработает) - в итоге имеем позицию Buy 9.0. Далее эксперимент раздваивается:

  • Эксперимент #1 - ставим Sell limit 9.0 (и мы знаем, что он сработает)
  • Эксперимент #2 - ставим Sell limit 12.0 (и мы знаем, что он сработает)

Смотрим, как отработает мой код HistoryPositionInfo version 2. Вносим правки.


Если интересно, я создам проект.

 
Alexey Viktorov:

Вам вместо чтения форума лучше было-бы читать документацию. Выбрать ордера и сделки за промежуток времени. Выбрать ордера и сделки относящиеся к определённой позиции. Да и другие полезные функции...

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

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

 
Konstantin Seredkin:

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

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

Позиции в истории не бывает. Позиция это результат ордеров и сделок. Время открытия позиции можно определить только в цикле по сделкам принадлежащим этой позиции. Дальше можно считать профит, определять время доливки или частичного закрытия позиции, но самой позиции в истории никогда не будет.

Какой-то похожий вопрос был у Vladislav Andruschenko, код был опубликован в его теме, но такие коды я не храню. Проще заново написать чем вспомнить где он хранится.

 
Похоже пора во фриланс перемещаться что бы получить готовый класс, сам я не могу понять как это все сделать, могу найти 1 сделку, последнюю, все их данные, но как собрать все в месте + определить что они принадлежат к одной позиции и то что собственно позиции больше нет, а главное определить это в промежутке времени, а главное что бы когда цена вышла из этого промежутка обнулить данные, что бы робот на следующий день не думал что в этом промежутке уже была позиция, как то все замудрено в mql5 все сделано.
 

Konstantin Seredkin:
Похоже пора во фриланс перемещаться что бы получить готовый класс, сам я не могу понять как это все сделать, могу найти 1 сделку, последнюю, все их данные, но как собрать все в месте + определить что они принадлежат к одной позиции и то что собственно позиции больше нет, а главное определить это в промежутке времени, а главное что бы когда цена вышла из этого промежутка обнулить данные, что бы робот на следующий день не думал что в этом промежутке уже была позиция, как то все замудрено в mql5 все сделано.

Вот из того что процитировано дальше, можно смело говорить о том, что вопрос решён на 99%

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

Как на MQL 5 получить данные по времени и цене открытия и времени и цене закрытия сделки?

Konstantin Seredkin, 2018.03.16 09:33

Вот так вроде заработала как надо

input string   StartTrade1         = "08:00";
input string   StopTrade1          = "16:00";

//-------------------

bool HisTrad()
  {
   datetime dtBegin=StringToTime(TimeToString(TimeCurrent(), TIME_DATE)+" "+StartTrade1);
   datetime dtEnd  =StringToTime(TimeToString(TimeCurrent(), TIME_DATE)+" "+StopTrade1);   
   bool lll = HistorySelect(dtBegin,dtEnd);
   for(int i=0;i<HistoryDealsTotal();i++)
    {
     //Print(HistoryDealGetInteger(HistoryDealGetTicket(i),DEAL_MAGIC),"  ",EXPERT_MAGIC);
     if(OrderGetString(ORDER_SYMBOL)==MySymbol && HistoryDealGetInteger(HistoryDealGetTicket(i),DEAL_ENTRY)==DEAL_ENTRY_OUT)
     return(true);
    }
   return(false);
  }

Осталось только победить одну проблемку. Совсем маленькую.

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

Как на MQL 5 получить данные по времени и цене открытия и времени и цене закрытия сделки?

Konstantin Seredkin, 2018.03.17 10:01

Ребята, засада, радость была не долгой.

Вставил все в робота, но фишка вот в чем, если торговать одним входом, то все хорошо, но если торговать несколькими, то все плохо.

Дело вот в чем, к примеру если такая ситуация, робот раскинул 3 ордера в шорт и 3 в лонг, цена сходила вниз, зацепила 2 ордера и затем пошла вверх, получается у нас позиция из 2-х ордеров, но как только мы закрываем один ордер об встречный лимитный ордер, то данная функция выдает true, а по условиям робота ,когда у нас true, то все лимитные ордера удаляются и мы ждем следующий торговый диапазон.

Вопрос, как сделать так что бы данная функция игнорировала наполнение и уменьшение объема позиции и мониторила лишь ее саму, не обращая внимание на эти приходящие уходящие ордера.

А для решения этой проблемы достаточно добавить проверку есть-ли открытая позиция по символу. Если нету, то возвращаем true иначе позиция закрыта не полностью, возвращаем false ...
 
Alexey Viktorov:

Вот из того что процитировано дальше, можно смело говорить о том, что вопрос решён на 99%

Осталось только победить одну проблемку. Совсем маленькую.

А для решения этой проблемы достаточно добавить проверку есть-ли открытая позиция по символу. Если нету, то возвращаем true иначе позиция закрыта не полностью, возвращаем false ...

Точно, как вариант, сейчас его проверю.

 

Блин Алексей, это какая то фантастика, все работает

Возможно кому то пригодиться этот метод.

как обычно, все оказалось намного проще чем думалось, дурацкая привычка идти длинным путем залезая в дебри, на самом деле все лежит на поверхности, видно силовые тренировки влияют на мозговую деятельность )))

input string   StartTrade1         = "08:00";
input string   StopTrade1          = "16:00";


//+------------------------------------------------------------------------------------++
//|   ВОЗВРАЩАЕТ ФЛАГ закрытой позиции во временном диапазоне                          ||
//+------------------------------------------------------------------------------------++
bool HistoryTrade()
  {

   datetime dtBegin=StringToTime(StartTrade1);
   datetime dtEnd  =StringToTime(StopTrade1);

   if(!HistorySelect(dtBegin,dtEnd))
      return(false);
      
   uint total=HistoryDealsTotal();
   ulong ticket=0;
//--- for all deals 
   for(uint i=0;i<total;i++)
     {
      //--- try to get deals ticket 
      if((ticket=HistoryDealGetTicket(i))>0)
        {
         if(HistoryDealGetString(ticket,DEAL_SYMBOL)==_Symbol) // check the symbol
            if(HistoryDealGetInteger(ticket,DEAL_MAGIC)==EXPERT_MAGIC) // check the magic
               if((ENUM_DEAL_ENTRY)HistoryDealGetInteger(ticket,DEAL_ENTRY)==DEAL_ENTRY_OUT && ExistPositions()==0) // check entry
                  return(true);
        }
     }
   return(false);
  }

//+------------------------------------------------------------------------------------++
//|                          ВОЗВРАЩАЕТ ФЛАГ СУЩЕСТВОВАНИЯ ПОЗИЦИИ                     ||
//+------------------------------------------------------------------------------------++
bool ExistPositions() 
  {
   datetime ot=0;
   if(PositionSelect(_Symbol))
     {
      long create_time_msc=PositionGetInteger(POSITION_TIME_MSC);
      if(ot<=create_time_msc) return(true);
     }
   return(false);
  }
 
Konstantin Seredkin:

Блин Алексей, это какая то фантастика, все работает

Возможно кому то пригодиться этот метод.

как обычно, все оказалось намного проще чем думалось, дурацкая привычка идти длинным путем залезая в дебри, на самом деле все лежит на поверхности, видно силовые тренировки влияют на мозговую деятельность )))

С интересом наблюдаю за веткой - мне пригодится данная функция, спасибо.

Может кто подскажет, как узнать среднюю цену открытия позиции на момент её закрытия?

Причина обращения: