Ayuda a la codificación - página 469

 

Hola Trader.

¿Puede alguien ayudarme y saber qué Indicadores son los que están en estos dos archivos .ex4?

¡Saludos cordiales, oink!

Archivos adjuntos:
 
oink!:
Hola Trader.

¿Puede alguien ayudarme y sabe qué Indicadores son los de estos dos archivos .ex4?

¡Saludos, oink!

Las señales de alerta es un simple zigzag hecho para mostrar las flechas :

Archivos adjuntos:
zz.gif  76 kb
 

Graciasmladen, conozco su nombre de alrededor de 10000 Indikators! ;-)

Luego busco en google el indicador zigzag+flechas.

El otro no está definido?

¡Un saludo, oink!

 
oink!:
Graciasmladen, sé que su nombre de alrededor de 10000 Indikators! ;-)

Entonces busco en Google el indicador zigzag+flechas.

El otro es indefinido?

¡Saludos cordiales, oink!

Francamente, no pude reconocer el otro. Lo siento

 

Hola,

No entiendo por qué este ea no funciona, compllation OK, nada en el diario ni ficha de expertos, pero no cualquier comercio .

Gracias de antemano.

Jo

extern int magicNum=200;

extern double TakeProfit = 50;

extern double Lots = 0.01;

extern double TrailingStop = 30;

//extern double MACDOpenLevel=3;

//extern double MACDCloseLevel=2;

extern double MATrendPeriod=5;

int inicio()

{

double MaCurrent,MaPrevious,MavPrevious;

double close=iClose(Symbol(),0,0);

double vclose=iClose(Symbol(),0,1);

double vvclose=iClose(Symbol(),0,2);

// double MacdCurrent, MacdPrevious, SignalCurrent;

// double SignalPrevious, MaCurrent, MaPrevious;

// doble RSIj,RSIv;

int cnt, ticket, total;

// comprobaciones de datos iniciales

// es importante asegurarse de que el experto trabaja con un gráfico normal

// gráfico normal y que el usuario no ha cometido ningún error al configurar las

// variables externas (Lots, StopLoss, TakeProfit,

// TrailingStop) en nuestro caso, comprobamos el TakeProfit

// en un gráfico de menos de 100 barras

if(Bars<100)

{

Print("barras inferiores a 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit menos de 10");

return(0); // comprobar TakeProfit

}

// para simplificar la codificación y acelerar el acceso

// los datos se ponen en variables internas

// MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);

// MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);

// SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);

// SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);

MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_SMA,PRICE_CLOSE,0);

MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_SMA,PRICE_CLOSE,1);

MavPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_SMA,PRICE_CLOSE,2);

double PlusHaut =Alto;

double PlusBas =Bajo

double TiersHaut =PlusBas +((PlusHaut-PlusBas)*0,66);

double TiersBas =PlusBas +((PlusHaut-PlusBas)*0,33);

// RSIj= iRSI(NULL,0,9,PRICE_CLOSE,0);

// RSIv= iRSI(NULL,0,9,PRECIO_CIERRE,1);

total=Total de pedidos();

if(total<1)

{ // no se identifican órdenes abiertas

if(AccountFreeMargin()<(1000*Lots))

{

Print("No tenemos dinero. Margen libre = ", AccountFreeMargin());

return(0);

}

// comprobar la posibilidad de una posición larga (BUY)

si

// (RSIv30)

( MaCurrent >MaPrevious)

// && (MaPreviousvclose || vclose>vvclose))

// (MacdCurrentSignalCurrent && MacdPrevious<SignalPrevious &&

// MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "MA",magicNum,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Orden de COMPRA abierta : ",OrderOpenPrice());

}

else Print("Error al abrir la orden de COMPRA : ",GetLastError());

return(0);

}

// comprobar la posibilidad de una posición corta (SELL)

// si (RSIv>70 && RSIj<70)

if ( MaCurrent <MaPrevious)

// && (MaPrevious>MavPrevious) && (close<vclose || vclose<vvclose))

// (MacdCurrent>0 && MacdCurrentSignalPrevious &&

// MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "MA",magicNum,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Orden de venta abierta : ",OrderOpenPrice());

}

else Print("Error al abrir la orden de VENTA : ",GetLastError());

return(0);

}

return(0);

}

// es importante entrar en el mercado correctamente,

// pero es más importante salir de él correctamente...

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && // comprueba la posición abierta

OrderSymbol()==Symbol()) // comprueba el símbolo

{

if(OrderType()==OP_BUY) // se abre una posición larga

{

// ¿se debe cerrar?

// if(MacdCurrent>0 && MacdCurrentSignalPrevious &&

// MacdCurrent>(MACDCloseLevel*Point))

// si (RSIv>70 && RSIj<70)

si ( MaCurrent <MaPrevious)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // cerrar posición

return(0); // salir

}

// comprobar el trailing stop

if(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Punto*TrailingStop)

{

if(OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}

else // ir a la posición corta

{

// ¿se debe cerrar?

// if(MacdCurrentSignalCurrent &&

// MacdPrevious(MACDCloseLevel*Point))

si

// (RSIv30)

( MaCurrent >MaPrevious)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // cerrar posición

return(0); // salir

}

// comprobar el trailing stop

if(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

}

}

return(0);

}

// el final.

 
Jovager:
Hola,

No entiendo por qué este ea no funciona, compllation OK, nada en el diario ni pestaña experto, pero no cualquier comercio .

Gracias de antemano.

Jo

extern int magicNum=200;

extern double TakeProfit = 50;

extern double Lots = 0.01;

extern double TrailingStop = 30;

//extern double MACDOpenLevel=3;

//extern double MACDCloseLevel=2;

extern double MATrendPeriod=5;

int inicio()

{

double MaCurrent,MaPrevious,MavPrevious;

double close=iClose(Symbol(),0,0);

double vclose=iClose(Symbol(),0,1);

double vvclose=iClose(Symbol(),0,2);

// double MacdCurrent, MacdPrevious, SignalCurrent;

// double SignalPrevious, MaCurrent, MaPrevious;

// doble RSIj,RSIv;

int cnt, ticket, total;

// comprobaciones de datos iniciales

// es importante asegurarse de que el experto trabaja con un gráfico normal

// gráfico normal y que el usuario no ha cometido ningún error al configurar las

// variables externas (Lots, StopLoss, TakeProfit,

// TrailingStop) en nuestro caso, comprobamos el TakeProfit

// en un gráfico de menos de 100 barras

if(Bars<100)

{

Print("barras inferiores a 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit menos de 10");

return(0); // comprobar TakeProfit

}

// para simplificar la codificación y acelerar el acceso

// los datos se ponen en variables internas

// MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);

// MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);

// SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);

// SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);

MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_SMA,PRICE_CLOSE,0);

MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_SMA,PRICE_CLOSE,1);

MavPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_SMA,PRICE_CLOSE,2);

double PlusHaut =Alto;

double PlusBas =Bajo

double TiersHaut =PlusBas +((PlusHaut-PlusBas)*0,66);

double TiersBas =PlusBas +((PlusHaut-PlusBas)*0,33);

// RSIj= iRSI(NULL,0,9,PRICE_CLOSE,0);

// RSIv= iRSI(NULL,0,9,PRECIO_CIERRE,1);

total=Total de pedidos();

if(total<1)

{ // no se identifican órdenes abiertas

if(AccountFreeMargin()<(1000*Lots))

{

Print("No tenemos dinero. Margen libre = ", AccountFreeMargin());

return(0);

}

// comprobar la posibilidad de una posición larga (BUY)

si

// (RSIv30)

( MaCurrent >MaPrevious)

// && (MaPreviousvclose || vclose>vvclose))

// (MacdCurrentSignalCurrent && MacdPrevious<SignalPrevious &&

// MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "MA",magicNum,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Orden de COMPRA abierta : ",OrderOpenPrice());

}

else Print("Error al abrir la orden de COMPRA : ",GetLastError());

return(0);

}

// comprobar la posibilidad de una posición corta (SELL)

// si (RSIv>70 && RSIj<70)

if ( MaCurrent <MaPrevious)

// && (MaPrevious>MavPrevious) && (close<vclose || vclose<vvclose))

// (MacdCurrent>0 && MacdCurrentSignalPrevious &&

// MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "MA",magicNum,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Orden de venta abierta : ",OrderOpenPrice());

}

else Print("Error al abrir la orden de VENTA : ",GetLastError());

return(0);

}

return(0);

}

// es importante entrar en el mercado correctamente,

// pero es más importante salir de él correctamente...

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && // comprueba la posición abierta

OrderSymbol()==Symbol()) // comprueba el símbolo

{

if(OrderType()==OP_BUY) // se abre una posición larga

{

// ¿se debe cerrar?

// if(MacdCurrent>0 && MacdCurrentSignalPrevious &&

// MacdCurrent>(MACDCloseLevel*Point))

// si (RSIv>70 && RSIj<70)

si ( MaCurrent <MaPrevious)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // cerrar posición

return(0); // salir

}

// comprobar el trailing stop

if(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Punto*TrailingStop)

{

if(OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}

else // ir a la posición corta

{

// ¿se debe cerrar?

// if(MacdCurrentSignalCurrent &&

// MacdPrevious(MACDCloseLevel*Point))

si

// (RSIv30)

( MaCurrent >MaPrevious)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // cerrar posición

return(0); // salir

}

// comprobar el trailing stop

if(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

}

}

return(0);

}

// el final.

Funciona en mis pruebas retrospectivas :

Archivos adjuntos:
jo.gif  90 kb
 

Hola mladen,

Quiero hacer una venta parcial de mi profitOrder con el mismo valor que yo Variable "LossValue".

He intentado calcular el tamaño del lote en los siguientes pasos:

-Leer el Beneficio real de la profitOrder

-Calcular el ProfitPerLotstep

-Calcular el LossValue/ProfitPerLotstep y redondear el resultado del lote

-Pero si vendo este tamaño de lote, el valor de la ganancia es demasiado pequeño (creo que debido al diferencial).

¿Cuál es la forma de cálculo correcta?

 

Aquí hay una pregunta adicional.

Si hago un cierre parcial, entonces el resto de la posición es automáticamente abierta por el Broker. Antes le di a la Posición un comentario para diferenciar esa Posición. ¿Cómo puedo reconocerlo ahora?

 
sunshineh:
Si hago un cierre parcial, el resto de la posición es automáticamente cerrada por el broker. Antes le daba un comentario a la Posición para diferenciarla. ¿Cómo puedo reconocerla ahora?

sunshineh

No se puede hacer nada

Solo el broker puede cambiar el campo de comentario de una orden. Tal vez un broker cambie el comentario de forma que diga algo así como "desde nnnn" donde nnnn es el número de entrada anterior, pero en la mayoría de los casos no lo hacen, por lo que no te queda ninguna solución que pueda identificar de forma única la orden anterior en casos como ese

 

¡Gracias mladen! ¿Tiene una solución a mi post antes con el cálculo de la lotsize según un valor definido como 100 euros?

Razón de la queja: