Ayuda a la codificación - página 483

 

Oh, hombre, realmente eres una estrella. Me encanta comerciar, pero sería imposible sin tu ayuda. Gracias de nuevo

 
xtractalpha:
Hola,

Podría alguien ayudarme con mi función LotsizeCalc().

Me gustaría multiplicar mi tamaño de lote con el 'MartingaleAmount' si mi última operación fue un perdedor. Si mi última operación fue ganadora, me gustaría utilizar el tamaño de lote "normal". Desgraciadamente, cuando hago el backtest del EA obtengo el error 4051 del diario.

Tiene algo que ver con el tamaño del lote, porque el EA funciona cuando intento ejecutarlo sin la función "LotsizeCalc()".

¿Alguien sabe por qué la función "Lotsize" no funciona?

Gracias de antemano,

Thierry

extern int MaximumTrades = 10; extern double StopLoss=25; extern double TakeProfit=50; extern double MartingaleAmount = 1.5; input double LotSize=0.1; int magic; double pips; int tradeNumber; string ScreenComment; double martinlot; double martinsize;

[/PHP]

double LotsizeCalc() { if(OrderSelect(lastTradeTicket(),MODE_HISTORY)) if(OrderProfit()<0 && tradeNumber 0){ if(OrderSelect(ticket,SELECT_BY_TICKET)){ sl = OrderOpenPrice()+(StopLoss*pips); if(StopLoss==0)sl=0; tp = OrderOpenPrice()-(TakeProfit*pips); if(OrderType()==OP_BUY){ sl = OrderOpenPrice()-(StopLoss*pips); if(StopLoss==0)sl=0; tp = OrderOpenPrice()+(TakeProfit*pips); } if(!OrderModify(ticket,price,sl,tp,0,Magenta)) { err = GetLastError(); Print("Encountered an error during modification!"+(string)err+" "+ErrorDescription(err) ); } } else{//in case it fails to select the order for some reason Print("Failed to Select Order ",ticket); err = GetLastError(); Print("Encountered an error while seleting order "+(string)ticket+" error number "+(string)err+" "+ErrorDescription(err) ); } } else{//in case it fails to place the order and send us back a ticket number. err = GetLastError(); Print("Encountered an error during order placement!"+(string)err+" "+ErrorDescription(err) ); if(err==ERR_TRADE_NOT_ALLOWED)MessageBox("You can not place a trade because \"Allow Live Trading\" is not checked in your options. Please check the \"Allow Live Trading\" Box!","Check Your Settings!"); } }

Thierry

Puede utilizar esta función para saber si la última orden cerrada se cerró con ganancias o con pérdidas :

[PHP]double lastOrderProfit(int magicNumber=0)

{

datetime lastTime = 0;

double lastProfit = 0;

for(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==false) break;

if (magicNumber!=0)

if (OrderMagicNumber() != magicNumber) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderCloseTime() <= lastTime) continue;

lastTime = OrderCloseTime();

lastProfit = OrderProfit()+OrderSwap()+OrderCommission();

}

return(lastProfit);

}

Simplemente comprueba si el resultado de la función lastOrderProfit(), y si es < 0, entonces aplica tu regla de martingala

 

¡Hola Mladen! Otra vez yo...

¿Cómo sería posible utilizar las líneas de este indicador en un EA utilizando iCustom ya que no parece haber ningún búfer establecido para estas líneas?

Gracias

Archivos adjuntos:
 
Jason2005:
¡Hola Mladen! Yo también...

¿Cómo sería posible utilizar las líneas de este indicador en un EA utilizando iCustom ya que no parece haber ningún búfer establecido para estas líneas?

Gracias

Son objetos

Puedes acceder a los objetos por su nombre (debes saber el nombre exacto del objeto, pero el indicador debe estar activo en el gráfico y esos objetos deben estar dibujados en el gráfico).

 
mladen:
Esos son objetos Puedes acceder a los objetos por su nombre (debes saber el nombre exacto del objeto, pero el indicador debe estar activo en el gráfico y esos objetos deben estar dibujados en el gráfico).

Muy bien. Entonces, ¿cómo podría llamar al indicador desde el EA? Con algo que no sea iCustom o lo he entendido mal... Gracias mladen

 
Jason2005:
Genial. Entonces, ¿cómo podría llamar al indicador desde el EA? Con algo que no sea iCustom o lo he entendido mal... Gracias mladen

Ese indicador simplemente dibuja niveles en 0,20,50,80 pips de cada segmento de 100 pips. La forma más sencilla es comprobar si esos niveles se cruzan desde tu EA.

Si intenta utilizar los nombres de los objetos (y sus precios, no podrá saber los nombres exactos de las líneas ya que dependen del máximo y el mínimo más alto - son objeto de cambio. Utilice el modo descrito anteriormente

 
mladen:
Ese indicador simplemente dibuja niveles en 0,20,50,80 pips de cada segmento de 100 pips. La forma más sencilla es comprobar si esos niveles se cruzan desde tu EA. Si intenta utilizar los nombres de los objetos (y sus precios, no podrá conocer los nombres exactos de las líneas ya que dependen del máximo y el mínimo más alto - son objeto de cambio. Utilice el modo descrito anteriormente

Tendrías un ejemplo de cómo hacer eso... Siento preguntar tanto, es que estoy empezando con la codificación y no he pillado el truco de cómo comprobar si esos niveles se cruzan en la condición de comprar o vender.

 
Jason2005:
Tendrías un ejemplo de cómo hacerlo... Perdona que te pregunte tanto, es que estoy empezando con la codificación y no he pillado el truco de cómo comprobar si se cruzan esos niveles en la condición de comprar o vender.

Jason2005

Tienes un código de cómo se hace en el indicador que adjuntas

 
mladen:
Jason2005 Tienes un código de cómo se hace en el indicador que adjuntas

¿Sería esto entonces?

MathMod(i, 5) == 0.0
 
mladen:
Thierry

Puedes utilizar esta función para saber si la última orden cerrada se cerró con ganancias o con pérdidas :

double lastOrderProfit(int magicNumber=0)

{

datetime lastTime = 0;

double lastProfit = 0;

for(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==false) break;

if (magicNumber!=0)

if (OrderMagicNumber() != magicNumber) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderCloseTime() <= lastTime) continue;

lastTime = OrderCloseTime();

lastProfit = OrderProfit()+OrderSwap()+OrderCommission();

}

return(lastProfit);

}

Simplemente comprueba si el resultado de la función lastOrderProfit(), y si es < 0, entonces aplica tu regla de martingala


Hola Mladen,

Gracias por tu respuesta.

La función lastorderprofit no es necesaria porque mi función lastTradeTicket() hace el mismo trabajo.

¿Podría echar un vistazo a mi EA?

No te pido que edites el código, pero te agradecería mucho que me dijeras qué he codificado mal.

Gracias de antemano,

Thierry

53_martingale.mq4

Archivos adjuntos: