Inicializar y reinicializar automáticamente el EA desde un archivo - página 7

 
Fry_Антон:

Ya veo.

Concretamente: mañana pensaré en cómo coger una posición al vuelo en FORTS. De hecho, lo que más necesito es conocer el precio real de apertura de una posición que se ha liquidado (reabierto al precio de compensación).

La posición en FORTS se gana con la suma de las operaciones de una (o más órdenes). En el momento de la compensación hay una operación técnica sin entrada, tenemos que averiguar cómo determinar el precio POSITION_PRICE_OPEN que había antes de la compensación.

Se puede almacenar. Sólo decide la vida útil. Por ejemplo, olvidar si el EA está fuera del mercado (sin posiciones).
 
Dmitry Fedoseev:

Obviamente, si:

Hay que seguir cincelando. Pero al menos no bloquees al experto. Tal vez menos descaradamente cincelar, a medida que el número de errores aumenta, aumentar la pausa entre los intentos. La solución más sencilla es un par de intentos y una pausa hasta que se abra la siguiente barra.

¿Qué pasa con las sanciones de la Bolsa por superar las 2.000 transacciones? Digamos que tengo 50 EAs y que han pasado 2.000 transacciones. ¿Qué debo hacer ahora, recibir sanciones monetarias de la Bolsa?
 
Fry_Антон:

Ya veo.

Concretamente: mañana pensaré en cómo coger una posición al vuelo en FORTS. De hecho, lo que más necesito es conocer el precio real de apertura de una posición que se ha liquidado (reabierto al precio de compensación).

La posición en FORTS se gana con la suma de las operaciones de una (o más órdenes). En el momento de la compensación hay una operación técnica sin entrada, tenemos que averiguar cómo determinar el precio POSITION_PRICE_OPEN que había antes de la compensación.

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

¡Genial! Lo atornillaré mañana.

Me ha ahorrado mucho tiempo. Gracias.

 
Fry_Антон:

¡genial! Lo adjuntaré mañana.

Me ha ahorrado mucho tiempo. Gracias.

Memo:

Esta función es SOLO para las operaciones entrantes.

(es decir, no hubo reducción de posiciones).

Si necesita ambos, añada la funciónDEAL_ENTRY_OUT

 
Михаил:

Memo:

Esta función es sólo para las operaciones entrantes.

(es decir, no hay disminución de la posición)

Si necesita ambos, añada a la funciónDEAL_ENTRY_OUT

que entendí de inmediato. Lo importante aquí es el principio en sí mismo: es una búsqueda por ID en la historia y es esencialmente la respuesta completa a la pregunta anterior.


Francamente, no entiendo la lógica de los desarrolladores, por qué decidieron diseñar un acuerdo técnico de compensación de una manera tan "torpe".

Tanto los objetos gráficos en los gráficos, como las propiedades de la posición en el historial, y además, las propiedades de una posición abierta (rentabilidad) - todo es engañoso no sólo para un simple código en un EA, sino para cualquier trader en general.

 
kond777:
¿Y qué pasa con las multas de la Bolsa por superar las 2.000 transacciones? Supongamos que tengo 50 EAs y que han pasado 2 000 transacciones. ¿Qué debo hacer ahora, recibir multas monetarias de la Bolsa?

No aprenderás la respuesta a tu pregunta.

Para no recibir multas, es necesario detener el trabajo del perito (tú y yo lo discutimos hace tiempo).

Si nuestro programador de milagros dice que es necesario parar, admite con ello que está

admitiendo ser ....., que no sabe nada de programación

expertos en negociación de acciones....

 
Михаил:

No aprenderás la respuesta a tu pregunta.

Para no recibir multas, es necesario detener el trabajo del perito (tú y yo lo discutimos hace tiempo).

Si nuestro programador de milagros dice que es necesario parar, admite con ello que está

admitiendo ser ....., que no sabe nada de programación

Asesores expertos para el comercio de acciones....

En mi opinión,Dmitry Fedoseev da la impresión de ser una persona con conocimientos, creo que probablemente podrá ofrecer una solución a este problema.
 
Михаил:

¡Sí, porque estás aconsejando a una persona lo que es bueno para MT4 y es completamente "inútil" en MT5!

Es obvio por tus mensajes que no tienes ni idea de cómo funciona MT5.

Y no es usted quien debe juzgar si el principio de la programación experta es vergonzoso o no.

No te veo como una autoridad en absoluto, sino como un chico descarado y chulesco.

¿Estás celoso? Y con razón, es mejor ser un cachorro joven que una vieja ave del paraíso.
 
Алексей Тарабанов:
¿Celos? Tienes razón, más vale ser un cachorro joven que una vieja ave del paraíso.
Hay más gas en el charco...