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

 
Tapochun:
No creo que estés haciendo la pregunta aquí. Crea un hilo aparte, adjunta allí el código del indicador y espera que alguien te ayude. Sin el código... es poco probable que alguien te ayude.
El indicador no compra ni vende).
 
Al escribir los TdR, me encontré con una situación en la que no entiendo cómo describir el algoritmo correctamente. ¿Me pueden decir si es posible cerrar parcialmente una posición en el trabajo del EA?
 
Nikolay Lampickiy:
Al escribir los TdR, me encontré con una situación en la que no entiendo cómo describir el algoritmo correctamente. ¿Puede aconsejar sobre la posibilidad de cerrar parcialmente una posición en el trabajo de la EA?
Para ello, en la orden de cierre de una posición, especifique un lote menor que el lote de la posición (esto es si MT4, en MT5 puede abrir una posición contraria con un lote menor, y se solaparán al final). La posición con el lote restante permanecerá en el mercado.
 
Nikolay Lampickiy:
Al escribir los TdR, me encontré con una situación en la que no entiendo cómo describir el algoritmo correctamente. ¿Pueden decirme si es posible el cierre parcial de una posición en el trabajo de un EA?
¿Qué tiene de complicado? Si la posición no está dividida uniformemente (por ejemplo, 0,09), entonces cierre la mayor parte de ella (0,05) y mueva el stop al punto de equilibrio, luego otra mitad de la posición cerrada (0,02) y ponga el put en beneficio y viceversa hasta que toda la posición esté cerrada o en equilibrio. El paso puede ser fijo o calculado a partir de cualquier rango, depende del sistema de negociación.
 
Vladimir Zubov:
¿Qué tiene de complicado? Si la posición no está dividida por igual (por ejemplo, 0,09), entonces cierre la mayor parte (0,05) y mueva el stop hasta el punto de equilibrio, luego otra distancia de cierre y de nuevo la mitad de la que queda (0,02) y mueva el stop hasta el siguiente paso de cierre y siga subiendo hasta que toda la posición esté cerrada o en equilibrio. El paso puede ser fijo o calculado a partir de cualquier rango, depende del sistema de negociación.

¿Lo he entendido bien? El lenguaje de programación MQL4 permite formalizar el cierre de sólo la mitad del volumen de órdenes de mercado... como el lote 10 y cerrar 5 lotes cuando el precio alcanza un determinado nivel.

¿O es posible cerrar 1/3?

O bien, sería más fácil implementar esta idea en un EA colocando diferentes órdenes. Cuando el precio alcanza un nivel requerido, una orden se cierra y la otra permanece en lugar del cierre parcial del volumen de órdenes de mercado. ¿Qué te parece?

 
Vitalie Postolache:
Para ello, es necesario especificar un lote menor que el lote de la posición en la orden de cierre (esto es si MT4, en MT5 se puede abrir la posición contraria con un lote menor, y se superpondrán al final). La posición con el lote restante permanecerá en el mercado.
No me satisface la posición contraria... gracias por su respuesta.
 
Nikolay Lampickiy:

¿Lo he entendido bien? El lenguaje de programación MQL4 permite formalizar el cierre de sólo la mitad del volumen de órdenes de mercado... como el lote 10 y cerrar 5 lotes cuando el precio alcanza un determinado nivel.

¿O es posible cerrar 1/3?

O bien, sería más fácil implementar esta idea en un EA colocando diferentes órdenes. Cuando el precio alcanza un nivel requerido, una orden se cierra y la otra permanece en lugar del cierre parcial del volumen de órdenes de mercado. ¿Qué te parece?

Podemos hacer ambas cosas. OrderClose permite cerrar el volumen que se le indique. https://docs.mql4.com/ru/trading/orderclose

Por supuesto, puede abrir varias órdenes con diferentes niveles de beneficio. En caso de un fallo de conexión será aún más fiable, porque los niveles de TP se almacenan en el servidor y se ejecutarán si el precio los cruza.

OrderClose - Документация на MQL4
  • docs.mql4.com
OrderClose - Документация на MQL4
 
Vladimir Zubov:

Puedes hacer ambas cosas. OrderClose permite cerrar el volumen que se le indique. https://docs.mql4.com/ru/trading/orderclose

Por supuesto, también puede abrir varias órdenes con diferentes niveles de beneficio. En caso de un fallo de conexión, esto será aún más fiable, porque los niveles de TP se almacenan en el servidor y se ejecutarán si el precio los cruza.

Gracias por la respuesta)))
 

Hola a todos, me encuentro con un problema, me gustaría conocer la opinión de profesionales o usuarios más experimentados de MT5. He escrito un indicador y una clase CEventBase, que permite al indicador generar eventos. Al ejecutar Asesores Expertos que procesan estos eventos antes o después, cuando se ejecutan en tiempo real, obtengo errores: 4001, 4102, 4104. Cuando se empiezan a "amontonar", no dejan de hacerlo) Adjunto el código de la función Generar, que en realidad es el origen de todos estos problemas. Estaré encantado de escuchar su opinión...)

¡Buenos días a todos!


bool CEventBase::Generate(long _chart_id, int _id_ind, SEventData &_data,
                          const bool _is_custom=true)
  {
   bool is_generated = true;
   // если индекс id события в массиве не верен
   if (_id_ind < 0 || _id_ind >= aEvents.Total())
    {
     Print("Не верно задан индекс ID события");
     return (false);
    }
   // заполняем поля 
   CEvent *event = aEvents.At(_id_ind);
   this._id = (ushort)(CHARTEVENT_CUSTOM+event.id);
   this._data = _data;
   this._data.sparam = event.name; // сохраняем имя события
   
   if(_is_custom)
     {
      ResetLastError();
      is_generated = EventChartCustom(_chart_id, event.id, this._data.lparam,
                                      this._data.dparam, this._data.sparam);
      if(!is_generated && _LastError != 4104)
         {
          Print("is_generated = ", is_generated);
          PrintFormat("%s Error while generating a custom event: %d", __FUNCTION__,_LastError);
          Print( ChartSymbol(_chart_id)," ",PeriodToString(ChartPeriod(_chart_id)), "Ошибка! _chart_id =", _chart_id, " event.id = ", event.id, " data.dparam = " ,this._data.dparam, " data.sparam = ", this._data.sparam);
          
         }
     }
   return is_generated;
  }


 
dariamap:

Hola a todos, me encuentro con un problema, me gustaría conocer la opinión de profesionales o usuarios más experimentados de MT5. He escrito un indicador y una clase CEventBase, que permite al indicador generar eventos. Al ejecutar Asesores Expertos que procesan estos eventos antes o después, cuando se ejecuta en tiempo real, obtengo errores: 4001, 4102, 4104. Cuando se empiezan a "amontonar", no paran de suceder) Adjunto el código de la función Generar, que en realidad es la fuente de todos estos problemas. Estaré encantado de conocer su opinión al respecto...)

¡Buenos días a todos!

Obviamente, el método que has presentado es un método de tránsito. Lo más probable es que el error no esté en él. De los datos que has presentado no se desprende lo que ocurre. Puede haber varias variantes:

  • Identificador de carta incorrecto (que es lo que dice el error 4101).
  • Consultas demasiado frecuentes;
  • Otros parámetros incorrectos (ID de eventos, por ejemplo).

A juzgar por el nivel de código que has escrito, podemos decir que el error puede estar en cualquier lugar y en cualquier momento.