Тикет закрытой позиции как в мт4, как найти? как вытащить тикет закрытой позиции, по тикету сделки? РЕШЕНО!
Всем привет,
кто рассуждал на тему приведения кода мт4 под мт5?
вот возникла такая сложность в определении:
в мт4:
Есть открытая позиция, у нее есть тикет 123, позиция закрывается ее тикет 123.
В мт5:
все кардинально по другому,
Позиция = сделка или несколько сделок с разными тикетами, но тикет позиции 1.
после закрытия появляется еще сделка уже с другим тикетом,
Вопрос: по сути, как вытащить тикет закрытой позиции, по тикету сделки?
А что Вы вообще хотите узнать? (МТ5)
Зачем Вам тикет закрытой позиции?
Если нужно определить кол-во сделок, их напрвление и цену исполнения, то нужно знать POSITION_IDENTIFIER
дело в другом
в мт4: 1 тикет на открытие и закрытие
в мт5 у каждой сделки свой тикет, и невозможно понять через историю, сделка какой позиции закрыта.
привести функции мт5 в подобие мт4.
думал может массивами заполнять открытые сделки, потом искать по объему закрытую сделку и вытягивать с массива тикет похожей сделки.
а если две сделки одинакового объема?
тикеты позиций находятся в истории,
Да? А где вообще у позиции тикет?
Вот пример, если позиция открыта (в примере только берутся данные по увеличению позиции.)
//+------------------------------------------------------------------+ //| Expert Get position price function | //+------------------------------------------------------------------+ double GetPositionPrice( const string aSymbol ) { double price_in = 0; double volume_in = 0; if ( PositionSelect( aSymbol ) ) { ulong pos_id = ulong( PositionGetInteger( POSITION_IDENTIFIER ) ); if ( pos_id > 0 ) { if ( HistorySelectByPosition( 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 ) { ENUM_DEAL_ENTRY deal_entry = ENUM_DEAL_ENTRY( HistoryDealGetInteger( deal_ticket, DEAL_ENTRY ) ); if ( deal_entry == DEAL_ENTRY_IN ) { double price = HistoryDealGetDouble( deal_ticket, DEAL_PRICE ); double volume = HistoryDealGetDouble( deal_ticket, DEAL_VOLUME ); price_in += price * volume; volume_in += volume; } } } if ( volume_in > 0 ) return( NormalizeDouble( price_in / volume_in, _Digits ) ); } else { Print( "GetPositionPrice: Невозможно получить историю позиции по символу ", aSymbol ); } } else { Print( "GetPositionPrice: Невозможно определить идентификатор позиции по символу ", aSymbol ); } } return( 0 ); }
Если позиция закрыта, то нужно смотреть в истории, но когда позиция открывается лучше
взять ее ID ( POSITION_IDENTIFIER ) Идентификатор позиции позволит быстро найти сделки в истории.
Вот пример, если позиция открыта (в примере только берутся данные по увеличению позиции.)
Если позиция закрыта, то нужно смотреть в истории, но когда позиция открывается лучше
взять ее ID ( POSITION_IDENTIFIER )
Есть POSITIO_IDENTFIER используется в функции PositionGetInteger()
Есть DEAL_POSITION_ID используется в функции HistoryDealGetInteger()
Есть ORDER_POSITION_ID используется в функции HistoryOrderGetInteger()
Есть история ордеров и история сделок, других историй нет.
А мне то вы зачем рассказываете?
Вы спросили - я ответил.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет,
кто рассуждал на тему приведения кода мт4 под мт5?
вот возникла такая сложность в определении:
в мт4:
Есть открытая позиция, у нее есть тикет 123, позиция закрывается ее тикет 123.
В мт5:
все кардинально по другому,
Позиция = сделка или несколько сделок с разными тикетами, но тикет позиции 1.
после закрытия появляется еще сделка уже с другим тикетом,
Вопрос: по сути, как вытащить тикет закрытой позиции, по тикету сделки?
DEAL_POSITION_ID пробовал но это не то.
Если позиция, например, состоит из нескольких сделок, к примеру 5 сделок = 5 тикетов,
мы открываем противоположную сделку, тем самым закрывая часть позиции,
Как сделать что-то похожее на мт4? голову ломаю, никак не могу придумать.
РЕШЕНО
для тех кто не знал, или скрывал :-)
в общем: свойства сделок и IN и OUT выдает один и тот же идентификатор позиции, тоесть тикет, так что все нормально, просто в истории он другой но если залезть в МКЛ5 то можно вытянуть тикет нормально.
(PositionGetInteger(POSITION_IDENTIFIER))
и
HistoryDealGetInteger(HistoryDealGetTicket(i),DEAL_POSITION_ID)
выдают один и тот же тикет позиции, и не важно сколько было открыто или закрыто сделок в этой позиции
история выглядит так: видно что тикеты разные
но если вытянуть тикеты позиции HistoryDealGetInteger(HistoryDealGetTicket(i),DEAL_POSITION_ID) то все отлично
или так например, первая графа тикет позиции вторая тикет сделки: