FUERTES: Para ayudar a los principiantes - página 3

 

Funciones útiles y de uso frecuente:

Comprobación del precio límite de la sesión:

//+------------------------------------------------------------------+
//| 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 );
}
 

Funciones útiles y de uso frecuente:

Se ha rediseñado la función GetPositionPrice():

//+------------------------------------------------------------------+
//| 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 );
} 
 

Una pequeña edición de la función (para mayor versatilidad)

en lugar de:

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

hazlo así:

if ( volume_in > 0 )
{
  int symb_digits = int( SymbolInfoInteger( aSymbol, SYMBOL_DIGITS ) );
  return( NormalizeDouble( price_in / volume_in, symb_digits ) );
}
 
Build 1241. cuenta real. si se establece una orden pendiente y se ejecuta parcialmente, su estado no cambia a ORDER_STATE_PLACED, sino que permanece ORDER_STATE_PARTIAL.
 

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

Cuándo es la nueva versión de MT5 y dónde encontrar lo que se espera de ella

comp, 2016.03.21 08:52

Si, por ejemplo, lo hago yo mismo: abrir una cuenta real y poner el acceso a la inversión en los foros para que todo el mundo pueda ver el feed real de FORTS en tiempo real y tener acceso a las pruebas normales, ¿podría haber algún problema? ¿O está claro?

 
Hola! ¿Existe alguna plantilla de sistema de trading simple o ejemplo de un EA para FORTS, teniendo en cuenta las características descritas en este hilo? Necesito que funcione correctamente con los pedidos en FORTS.
 

"Recomendación:

Al diseñar EAs para FORTS, no recomiendo utilizar el evento Tick, sino

Es mejor utilizarel evento BookEvent".

No se explica por qué es mejor, tal vez en algunos casos es mejor, en otros casos es mejor onTick. ¿Podría ser más específico?

 
Alexander:

"Recomendación:

Al diseñar EAs para FORTS, no recomiendo utilizar el evento Tick, sino

Es mejor utilizarel evento BookEvent".

No se explica por qué es mejor, tal vez en algunos casos es mejor, en otros casos es mejor onTick. ¿Podría ser más específico?

El autor está en la prohibición y no oirás una respuesta aquí durante algún tiempo.

Esto es lo que pienso al respecto:

El evento Tick sólo se produce cuando se modifican Bid, Ask, Last. También el evento Tick es acumulativo (como dijeron los desarrolladores), para varios cambios de precios puede venir un Tick.

El evento BookEvent llega en cualquier cambio de órdenes en el mercado de apuestas y en la ejecución de operaciones. El evento BookEvent se produce con mucha más frecuencia.

Es mejor utilizar OnTick() si no necesita analizar la liquidez en el mercado.

En los símbolos de alta liquidez el evento BookEvent llega muy a menudo y si hay cálculos pesados o varios indicadores pesados en el manejador, funcionará como un bucle.

Si su Asesor Experto tiene otros manejadores de eventos, como OnTimer, puede perder estos eventos.No sé sobre los eventosOnTradeTransaction yOnTrade, tal vez, pueden ser omitidos.

Aquí tienes información para ti:

La longitud de la cola de transacciones es de 1024 elementos. Si OnTradeTransaction() tarda demasiado en procesar otra transacción, las transacciones antiguas en la cola pueden ser sustituidas por otras más nuevas.

 
Sergey Chalyshev:

El autor está en un baneo y no tendrás noticias suyas por aquí durante un tiempo.

Ha pasado un tiempo desde que Michael salió de la casa de baños... Aquí, ha cambiado su nombre de soltera.
 
Alexey Kozitsyn:
Ha pasado mucho tiempo desde que Michael salió de la casa de baños... Aquí, ha cambiado su avatar.
¿Qué tiene que ver su ava con esto? No puede escribir en el foro, está baneado para siempre.
Razón de la queja: