Cierre parcial no funciona

 
#include <Trade/Trade.mqh>
CTrade trade;

void OnTick() {
   if(PositionsTotal()==0) {
      double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol, SYMBOL_ASK), _Digits);   
      trade.Buy(1,_Symbol,Ask);
   }
   
   for(int i=PositionsTotal()-1; i>=0; i--) {
      ulong Ticket = PositionGetTicket(i);
      if(PositionSelectByTicket(Ticket)) {
         trade.PositionClosePartial(Ticket,0.1,-1);
      }
   }
}

He probado de realizar un cierre parcial, y no ha funcionado. He comprobado el paso de volumen y está correcto, no entiendo el motivo por el que no funciona.

 
Y que valor seria el correcto? Lo he probado con distintos valores y con ninguno funciona, el -1 viene por predeterminado.
 
03491903 #Y que valor seria el correcto? Lo he probado con distintos valores y con ninguno funciona, el -1 viene por predeterminado.

La desviación no puede ser un valor negativo. ¿De dónde ha sacado que -1 sea el valor predeterminado? Un valor -1 es lo mismo que desactivar esa función, ya que jamás habrá una desviación en el precio de -1.

Si con un valor positivo, aunque sea de 0, sigue sin funcionar es que algo está mal en otro lado.

En base al código que pusiste es lo único que he encontrado mal.

 
03491903:

He probado de realizar un cierre parcial, y no ha funcionado. He comprobado el paso de volumen y está correcto, no entiendo el motivo por el que no funciona.

El código funciona perfectamente. Lo que creo que te debe estar pasando es que estás tratando de hacer el cierre parcial con un lote no permitido. Por ejemplo, si lo estás utilizando en Crash 1000 o Boom 1000, el lote mínimo para hacer una operación es 0.2 y le estás enviando 0.1. Solo como experimento, haz la prueba abriendo el Buy con lote 2 y el cierre parcial con lote 1. Verifica que en el simulador de estrategias tengas el apalancamiento correcto y balance suficiente para hacer el test. 

Saludos...

 
Miguel Angel Vico Alba #:

La desviación no puede ser un valor negativo. ¿De dónde ha sacado que -1 sea el valor predeterminado? Un valor -1 es lo mismo que desactivar esa función, ya que jamás habrá una desviación en el precio de -1.

Si con un valor positivo, aunque sea de 0, sigue sin funcionar es que algo está mal en otro lado.

En base al código que pusiste es lo único que he encontrado mal.

Perdona, me he confundido.

Antonio Simon Del Vecchio #:

El código funciona perfectamente. Lo que creo que te debe estar pasando es que estás tratando de hacer el cierre parcial con un lote no permitido. Por ejemplo, si lo estás utilizando en Crash 1000 o Boom 1000, el lote mínimo para hacer una operación es 0.2 y le estás enviando 0.1. Solo como experimento, haz la prueba abriendo el Buy con lote 2 y el cierre parcial con lote 1. Verifica que en el simulador de estrategias tengas el apalancamiento correcto y balance suficiente para hacer el test. 

Saludos...

Si lo he probado en el par "EURUSD" con un lotaje más grande, de 3 y con un cierre parcial de 2 y sigue sin funcionar. Puede ser que sea por la configuración del símbolo?
 
03491903 #:

Perdona, me he confundido.

Si lo he probado en el par "EURUSD" con un lotaje más grande, de 3 y con un cierre parcial de 2 y sigue sin funcionar. Puede ser que sea por la configuración del símbolo?

Yo lo probé y me funciona bien. Con los datos que describes, el EA debería abrir un Buy con lote 3 e inmediatamente hacer el cierre parcial de lote 2, dejando la posición con lote igual a 1. Justo al siguiente tick, va a tratar de hacer otro cierre parcial de lote 2 pero como solo tienes lote 1, debería cerrar la posición por completo y al siguiente tick abrir otra vez la posición con lote 3 y repetir ese proceso una y otra vez hasta dejar la cuenta en cero o que finalice la simulación. 

 
Antonio Simon Del Vecchio #:

Yo lo probé y me funciona bien. Con los datos que describes, el EA debería abrir un Buy con lote 3 e inmediatamente hacer el cierre parcial de lote 2, dejando la posición con lote igual a 1. Justo al siguiente tick, va a tratar de hacer otro cierre parcial de lote 2 pero como solo tienes lote 1, debería cerrar la posición por completo y al siguiente tick abrir otra vez la posición con lote 3 y repetir ese proceso una y otra vez hasta dejar la cuenta en cero o que finalice la simulación. 

En que mercado lo has probado? Yo he utilizado el EURUSD con un capital suficiente para el lotaje, (también he probado otros).

 
03491903 #:

En que mercado lo has probado? Yo he utilizado el EURUSD con un capital suficiente para el lotaje, (también he probado otros).

Comparte algunas capturas de pantalla de la configuración que estás utilizando, para ver si logro ver lo que estás haciendo mal. 

 
Antonio Simon Del Vecchio #:

Comparte algunas capturas de pantalla de la configuración que estás utilizando, para ver si logro ver lo que estás haciendo mal. 

De acuerdo

Archivos adjuntos:
Captura1.PNG  6 kb
Captura2.PNG  58 kb
 
En la Captura 1, no se puede ver toda la información de esa pestaña, como el apalancamiento, si los beneficios están en pip, el saldo que estás utilizando,... Puedes compartir la información completa? 
Razón de la queja: