Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Зарегистрируйся на MQL5.community, чтобы оставлять комментарии!
Alexandr Gavrilin
26185
Alexandr Gavrilin 2014.08.10 20:55 

В МТ5 при торговле на ФОРТС, на графике отображаются сделки во время клиринга, хотелось бы иметь возможность отключить ОТОБРАЖЕНИЯ сделок КЛИРИНГА , чтобы они не запутывали при анализе торговли.

Либо может кто напишет такой индикатор, отображающий сделки как стандартный , но не отображающий сделки клиринга?

Mikhail Filimonov
5918
Mikhail Filimonov 2014.08.11 01:33  

Вы торгуете "руками" или роботом? Если роботом то:

Создаём объект 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();
  }
}
Alexandr Gavrilin
26185
Alexandr Gavrilin 2014.08.12 08:32  

торгую руками :-) в том то и дело.

и как программист mql4, вынужден признать что mql5 не мой профиль )

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

Mikhail Filimonov
5918
Mikhail Filimonov 2014.08.12 13:22  
DKeN:

торгую руками :-) в том то и дело.

и как программист mql4, вынужден признать что mql5 не мой профиль )

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

Для ФОРТС вообще мало что есть.

См. вложение, будет что-то, чем ничего! 

Файлы:
Deals.zip 10 kb
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий