FORTS: Para ajudar iniciantes - página 3

 

Funções úteis e freqüentemente utilizadas:

Verificação de preço limite de sessão:

//+------------------------------------------------------------------+
//| Expert Check price range function                                |
//+------------------------------------------------------------------+
bool CheckPriceRange( const string a_symbol, const double price )
{
  double min_price = SymbolInfoDouble( a_symbol, SYMBOL_SESSION_PRICE_LIMIT_MIN );
  double max_price = SymbolInfoDouble( a_symbol, SYMBOL_SESSION_PRICE_LIMIT_MAX );
  if ( ( price >= min_price ) && ( price <= max_price ) )
  {
    return( true );
  }
  return( false );
}
 

Funções úteis e freqüentemente utilizadas:

Função GetPositionPrice() redesenhada:

//+------------------------------------------------------------------+
//| Expert Get position price function                               |
//+------------------------------------------------------------------+
double GetPositionPrice( const string aSymbol )
{
  double price_in = 0;
  double volume_in = 0;
  double price_out = 0;
  double volume_out = 0;
  double price = 0;
  double volume = 0;
//---  
  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 )
            {
              price = HistoryDealGetDouble( deal_ticket, DEAL_PRICE );
              volume = HistoryDealGetDouble( deal_ticket, DEAL_VOLUME );
                                
              price_in += price * volume;
              volume_in += volume;  
            }
            else
            if ( deal_entry == DEAL_ENTRY_OUT )
            {
              price = HistoryDealGetDouble( deal_ticket, DEAL_PRICE );
              volume = HistoryDealGetDouble( deal_ticket, DEAL_VOLUME );
                                
              price_out += price * volume;
              volume_out += volume;  
            }
          }
        }
//---  
        price = price_in - price_out;
        volume = volume_in - volume_out;
//---
        if ( volume > 0 )
        {       
          return( NormalizeDouble( price / volume, _Digits ) );
        }
      }
      else
      {
        Print( "GetPositionPrice: Невозможно получить историю позиции по символу ", aSymbol );
      }
    }
    else
    {
      Print( "GetPositionPrice: Невозможно определить идентификатор позиции по символу ", aSymbol );
    }
  return( 0 );
} 
 

Uma pequena edição para a função (para versatilidade)

em vez de:

if ( volume_in > 0 )
{
  return( NormalizeDouble( price_in / volume_in, _Digits ) );
}

fazer assim:

if ( volume_in > 0 )
{
  int symb_digits = int( SymbolInfoInteger( aSymbol, SYMBOL_DIGITS ) );
  return( NormalizeDouble( price_in / volume_in, symb_digits ) );
}
 
Construir 1241. conta real. se uma ordem pendente for definida e parcialmente executada, seu estado não muda para ORDER_STATE_PLACED, mas permanece ORDER_STATE_PARTIAL.
 

Fórum sobre comércio, sistemas comerciais automatizados e estratégias comerciais de teste

Quando é a nova versão do MT5 e onde descobrir o que se espera dela

comp, 2016.03.21 08:52

Se, por exemplo, eu mesmo o fizer: abrir uma conta real e colocar o acesso ao investimento nos fóruns para que todos possam ver a alimentação real dos FORTS em tempo real e ter acesso aos testes normais, poderia haver um problema? Ou está claro?

 
Olá! Existe algum modelo simples de sistema comercial ou exemplo de EA para FORTS, levando em conta as características descritas neste tópico? Preciso dele para trabalhar corretamente com pedidos em FORTS.
 

"Recomendação":

Ao projetar EAs para FORTS, não recomendo o uso do evento Tick, mas sim

É melhor usaro evento BookEvent".

Não se explica por que é melhor, talvez em alguns casos seja melhor, em outros é melhor no Tick. Você poderia ser mais específico?

 
Alexander:

"Recomendação":

Ao projetar EAs para FORTS, não recomendo o uso do evento Tick, mas sim

É melhor usaro evento BookEvent".

Não se explica por que é melhor, talvez em alguns casos seja melhor, em outros é melhor no Tick. Poderia ser mais específico.

O autor está na proibição e você não ouvirá uma resposta aqui por algum tempo.

Eis o que eu penso sobre isso:

O evento Tick só ocorre quando Bid, Ask, Last são alterados. Também o evento Tick é cumulativo (como disseram os desenvolvedores), para várias mudanças de preço pode vir um Tick.

O evento BookEvent chega a qualquer mudança de ordens no mercado de apostas e na execução de negócios. O evento BookEvent vem com muito mais freqüência.

É melhor usar o OnTick() se você não precisar analisar a liquidez no mercado.

Em símbolos altamente líquidos, o evento BookEvent vem muito freqüentemente e se houver cálculos pesados ou vários indicadores pesados no manipulador, ele funcionará como um loop.

Se seu Consultor Especialista tem outros manipuladores de eventos, como o OnTimer, você pode perder estes eventos.Não sei sobre eventosOnTradeTransaction eOnTrade, talvez possam ser ignorados.

Aqui estão algumas informações para você:

A extensão da fila de transação é de 1024 itens. Se a OnTradeTransaction() levar muito tempo para processar outra transação, as antigas transações na fila podem ser substituídas por novas transações.

 
Sergey Chalyshev:

O autor está em proibição e você não terá notícias dele aqui por um tempo.

Faz um tempo desde que Michael foi solto do balneário. Aqui, ele mudou seu nome de solteira.
 
Alexey Kozitsyn:
Já faz muito tempo que Michael foi solto do balneário. Aqui, ele mudou seu avatar.
O que seus ava tem a ver com isso? Ele não pode escrever no fórum, ele está proibido para sempre.