Es difícil enviar los pedidos. - página 3

 
Bueno, parece que el comercio CT es.
 
¿No le gusta el tamaño de lote dinámico? Funciona con ct trade, cuando uso un tamaño de lote fijo.
 
MetaNt:
¿No le gusta el tamaño de lote dinámico? Funciona con ct trade, cuando uso un tamaño de lote fijo.

CTrade es una envoltura de OrderSend().

Usted escribió que no funciona con un volumen à 0.07 o incluso 1. ¿Cómo está definiendo esto? Lote=0.07 ?

 
angevoyageur:

CTrade es una envoltura de OrderSend().

Usted escribió que no funciona con un volumen à 0.07 o incluso 1. ¿Cómo está definiendo esto? Lote=0.07 ?

No estaba seguro si había escrito Mqlrequest y Mqlresult correctamente y por eso usé CTrade en su lugar, encontré que funcionaba si usaba volúmenes fijos, y ahora he encontrado que puedo multiplicar los volúmenes fijos por enteros, pero si intento alterar los volúmenes con fracciones obtengo errores como tamaño de lote inválido, el resultado del tamaño de lote modificado se imprime con el error[volumen inválido].
 
Son decimales de cierta complejidad, intentaré normalizar el doble.
 
MetaNt:
Son decimales de cierta complejidad, probaré a normalizar doble.
Normalizar doble se proporciona una solución para los decimales complejos, voy a probar en mi lote dinámico.
 
MetaNt:
La función NormalizeDouble tiene un arreglo para los decimales complejos, lo probaré en mi lote dinámico.

Arreglado.

Parece que era uno de mis factores de escala de algunas ecuaciones que se encontraban fuera del CT Buy/Sell. No era un problema que había encontrado en mql4 por lo que me tomó un tiempo para localizarlo, tendré que estar atento a eso si mql4 se actualiza de nuevo.

Para cualquier otra persona con este problema utilice el 2 para la parte del dígito de la función NormalizeDouble().

 

¿Dice usted 007?

Quizás debería preguntarle al Sr. Bond ;-)

 

Parece que estoy corriendo en el mismo problema aquí. He confirmado que el tamaño del lote cumple con los requisitos SYMBOL_VOLUME_MIN, SYMBOL_VOLUME_MAX y SYMBOL_VOLUME_STEP.

Por ejemplo me sale esto:

2014.04.07 14:49:35 2014.04.04 16:00:00 CTrade::OrderSend: instant sell 0.53 EURUSD at 1.36934 sl: 1.37434 tp: 1.35934 [invalid volume]

Mientras backtesting EA con este símbolo y estas especificaciones:


Aquí el código que estoy usando para enviar la orden:

int    losses=1;
int    DecimalPoints=2;
 double Risk=0.03;
double Inc=0.1;
my_symbol=Symbol();
leverage=AccountInfoInteger(ACCOUNT_LEVERAGE);
contract=SymbolInfoDouble(my_symbol,SYMBOL_TRADE_CONTRACT_SIZE);
min_lot=SymbolInfoDouble(my_symbol,SYMBOL_VOLUME_MIN);
max_lot=SymbolInfoDouble(my_symbol,SYMBOL_VOLUME_MAX);
trade_size=equity*(Risk/100)*leverage;
trade_size/=contract;
trade_size+=losses*Inc;
NormalizeDouble(trade_size,DecimalPoints);
  if(trade_size<min_lot)
    {
     trade_size=min_lot;
    }
  else if(trade_size>max_lot)
    {
     trade_size=max_lot;
    }
trade.Sell(trade_size,my_symbol,price,0,price-tp,"Expert Sell");

EDIT:

Por supuesto, puedo colocar manualmente operaciones con este tamaño de lote exacto.

 
Candles:

Parece que me encuentro con el mismo problema. He confirmado que el tamaño del lote cumple con los requisitos SYMBOL_VOLUME_MIN, SYMBOL_VOLUME_MAX y SYMBOL_VOLUME_STEP.

Por ejemplo me sale esto:

2014.04.07 14:49:35 2014.04.04 16:00:00 CTrade::OrderSend: instant sell 0.53 EURUSD at 1.36934 sl: 1.37434 tp: 1.35934 [invalid volume]

Mientras backtesting EA con este símbolo y estas especificaciones:


Aquí el código que estoy usando para enviar la orden:

EDITAR:

Por supuesto, puedo colocar manualmente operaciones con este tamaño de lote exacto.

Esta línea no tiene efecto:

NormalizeDouble(trade_size,DecimalPoints);

Tienes que afectar el resultado a una variable, ver la documentación de NormalizeDouble.

trade_size=NormalizeDouble(trade_size,DecimalPoints);