Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 879

 
lil_lil:

Gracias.

¿Qué pasa ahora?

Sugerí empezar con HistorySelectByPosition y lo has metido en algún lugar profundo de los ifs...

Sólo puede haber una posición por símbolo en una cuenta de compensación. Obtenga el ID de la posición, obtenga la lista de operaciones involucradas en la formación de esta posición y cuéntelas por dirección de la operación y tipo de orden.

 
Alexey Kozitsyn:

Artyom, te repito la pregunta, por favor contesta:


No he visto la pregunta :)

Honestamente - no recuerdo, pero creo que funciona en MT5 - ¿no?

Pero en el probador ponía las órdenes pendientes... Y trabajé con el ratón. Pero puede que me haya confundido y haya estado trabajando con el ratón en un gráfico real y usando botones en el probador...

No voy a adivinar: desmonté toda mi biblioteca a pequeños tornillos hace medio año, y ya no podré revisarla rápidamente. He pospuesto su reconstrucción hasta el otoño. Por lo tanto, es más rápido sólo para comprobar el trabajo del modelo de eventos OnChartEvent() en el probador. Pero todavía no tengo tiempo para eso - lo siento :)

 
Artyom Trishkin:

No he visto la pregunta :)

Honestamente - no recuerdo, pero creo que funciona en MT5 - ¿no?

Pero he puesto las órdenes pendientes en el probador... Y trabajé con el ratón. Pero puede ser que me haya confundido y haya estado trabajando con el ratón en un gráfico real y usando botones en el probador...

No voy a adivinar: desmonté toda mi biblioteca a pequeños tornillos hace medio año, y ya no podré revisarla rápidamente. He pospuesto su reconstrucción hasta el otoño. Por lo tanto, es más rápido sólo para comprobar el trabajo del modelo de eventos OnChartEvent() en el probador. Pero todavía no tengo tiempo para eso - lo siento :)

Ahí está todo el código de prueba:

switch( id )
{
default:
   Print( __FUNCTION__,": id = "+EnumToString( (ENUM_CHART_EVENT)id ) );
}

no hay respuesta, por desgracia, en el probador. En la función OnChartEvent(). Llamada desde el Asesor Experto.

 
Alexey Kozitsyn:

Todo el código de la prueba está ahí:

no hay respuesta, por desgracia, en el probador. En la función OnChartEvent().

¿Y CHART_EVENT_MOUSE_MOVE=true está configurado?
 
Alexey Viktorov:

Sugerí empezar con HistorySelectByPosition, pero lo metiste en algún lugar profundo de los ifs...

En una cuenta de compensación sólo puede haber una posición por símbolo. Obtenga el ID de la posición, obtenga la lista de operaciones que participan en la formación de esta posición y cuéntelos por dirección de la operación y tipo de orden.

Lo hice, porque quiero hacer una función de recuento universal, para la compensación y la cobertura, ¿o es imposible?

 
Artyom Trishkin:
¿Está configurado CHART_EVENT_MOUSE_MOVE=true?

No, pero es poco probable que esto solucione el problema, ya que se han pulsado ctrl, shift y otras teclas... no hubo ninguna reacción.

 
lil_lil:

Atascado porque quiero hacer una función de recuento universal, para la compensación y la cobertura, ¿o eso es imposible?

Es posible. Pero los enfoques son diferentes, y primero hay que planificarlos adecuadamente, en lugar de volcar todo en una línea de código...

 
Alexey Kozitsyn:

No, pero es poco probable que esto resuelva el problema, ya que se han pulsado ctrl, shift y otras teclas... No hubo ninguna reacción.

De todos modos, ahora mismo no tengo tiempo para experimentar, tengo mis propias cosas pendientes.

Tal vez realmente lo haya olvidado. Pero he establecido los límites de tiempo en el probador. Es bastante probable - sólo los mismos botones. También sé que los he puesto con el ratón. Pero tal vez en un gráfico en vivo también...

 
Artyom Trishkin:

Probablemente. Pero los enfoques son diferentes, y primero hay que planificarlos adecuadamente, en lugar de volcar todo en una línea de código...

Así que lo haré por separado, por ahora.

¿Qué me he perdido?

int GetNum(const string aSymbol)
  {
   int    count=0;
   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)
                 {
                  long deal_entry=long(HistoryDealGetInteger(deal_ticket,DEAL_ENTRY));

                  if(deal_entry==DEAL_ENTRY_IN)
                    {
                     if(m_position.PositionType()==POSITION_TYPE_SELL)
                       {
                        count++;
                       }
                    }
                 }
              }
            if( count > 0 ) return(count);
           }
         else
           {
            Print("Не возможно получить историю позиции по символу ",aSymbol);
           }
        }
      else
        {
         Print("Не возможно определить идентификатор позиции по символу ",aSymbol);
        }
     }
   return( 0 );
  }
////////////
 
Primero cuenta correctamente, luego, cuando se activan 5 ventas limitadas, escribe 6 en el comentario.
Razón de la queja: