Вы торгуете "руками" или роботом? Если роботом то:
Создаём объект 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 при торговле на ФОРТС, на графике отображаются сделки во время клиринга, хотелось бы иметь возможность отключить ОТОБРАЖЕНИЯ сделок КЛИРИНГА , чтобы они не запутывали при анализе торговли.
Либо может кто напишет такой индикатор, отображающий сделки как стандартный , но не отображающий сделки клиринга?