Вы торгуете "руками" или роботом? Если роботом то:
Создаём объект label:
int OnInit() { if( !ObjectCreate( 0, "info_label_1", OBJ_LABEL, 0, 0, 0 ) ) { MessageBox( "Инфострока 1 не создана!", "Ошибка", MB_OK | MB_ICONHAND ); return( INIT_FAILED ); } else { ObjectSetInteger( 0, "info_label_1", OBJPROP_CORNER, CORNER_LEFT_UPPER ); ObjectSetInteger( 0, "info_label_1", OBJPROP_ANCHOR, ANCHOR_LEFT_UPPER ); ObjectSetInteger( 0, "info_label_1", OBJPROP_XDISTANCE, 5 ); ObjectSetInteger( 0, "info_label_1", OBJPROP_YDISTANCE, 10 ); ObjectSetInteger( 0, "info_label_1", OBJPROP_FONTSIZE, 10 ); ObjectSetInteger( 0, "info_label_1", OBJPROP_COLOR, clWhite ); ObjectSetInteger( 0, "info_label_1",OBJPROP_BACK, false ); ObjectSetString( 0, "info_label_1", OBJPROP_TEXT, "" ); } }
Не забываем его удалить:
void OnDeinit( const int reason ) { ObjectDelete( 0, "info_label_1" ); }
Пишем функцию, которая будет брать чистую цену позиции, без учёта клирингов:
double GetHistoryPrice( const string aSymbol ) { double price_in = 0; double volume_in = 0; double price_out = 0; double volume_out = 0; double res_price; double res_volume; 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 ) { 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_in + price * volume; volume_in = volume_in + volume; } if ( deal_entry == DEAL_ENTRY_OUT ) { double price = HistoryDealGetDouble( deal_ticket, DEAL_PRICE ); double volume = HistoryDealGetDouble( deal_ticket, DEAL_VOLUME ); price_out = price_out + price * volume; volume_out = volume_out + volume; } } } res_price = price_in - price_out; res_volume = volume_in - volume_out; if ( res_volume > 0 ) return( NormalizeDouble( res_price / res_volume, _Digits ) ); } else { Print( "Не возможно получить историю позиции по символу ", aSymbol ); } } else { Print( "Не возможно определить идентификатор позиции по символу ", aSymbol ); } } return( 0 ); }
из OnTick вызываем её:
void OnTick() { MqlTick cur_tick; if ( SymbolInfoTick( _Symbol, cur_tick ) ) { double hist_price = GetHistoryPrice( _Symbol ); ObjectSetString( 0, "info_label_1", OBJPROP_TEXT, "Тек. профит = " + string( cur_tick.last - hist_price ) ); ChartRedraw(); } }
торгую руками :-) в том то и дело.
и как программист mql4, вынужден признать что mql5 не мой профиль )
за код конечно спасибо, но ищу уже готовый индикатор который возьмет информацию по сделкам из истории и выведет их без сделок клиринга.
торгую руками :-) в том то и дело.
и как программист mql4, вынужден признать что mql5 не мой профиль )
за код конечно спасибо, но ищу уже готовый индикатор который возьмет информацию по сделкам из истории и выведет их без сделок клиринга.
Для ФОРТС вообще мало что есть.
См. вложение, будет что-то, чем ничего!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
В МТ5 при торговле на ФОРТС, на графике отображаются сделки во время клиринга, хотелось бы иметь возможность отключить ОТОБРАЖЕНИЯ сделок КЛИРИНГА , чтобы они не запутывали при анализе торговли.
Либо может кто напишет такой индикатор, отображающий сделки как стандартный , но не отображающий сделки клиринга?