Ayuda con la codificación... ¿Cómo puedo hacer que el indicador filtre en lugar de alertar? - página 5

 

Las órdenes se colocan demasiado cerca del precio de compra/venta actual. Las órdenes deben estar a cierta distancia del precio actual. Utiliza la función Marketinfo con el parámetro stop_level para extraer esa información y asegúrate de que tus órdenes están tan lejos de la oferta/demanda.

Espero que esto ayude.

 
Maji:
Las órdenes se están colocando demasiado cerca de la oferta / demanda actual. Las órdenes deben estar a cierta distancia del precio actual. Utiliza la función Marketinfo con el parámetro stop_level para extraer esa información y asegúrate de que tus órdenes están a esa distancia del ask/bid. Espero que esto te ayude.

ummm....

Lo siento, pero me perdí allí...

¿No puedo simplemente colocar una orden en el nivel "actual"? La mayor parte de lo que he hecho hasta ahora ha sido ejecutar órdenes al cierre del período. ¿Se puede hacer esto?

Voy a tener que aprender primero lo que es el parámetro stop_level y las funciones marketinfo.

gracias por la orientación

por lo que pueda valer aquí está la actualización que hice al indicador de bandas de tendencia, eso fue algo divertido

ok aquí está...

Identificadores deinformación de mercado, utilizados con la función MarketInfo().

Puede ser cualquiera de los siguientes valores:

MODE_STOPLEVEL 14 Nivel de parada en puntos.

así que asumo que es...

MarketInfo(14)

¿dónde lo pongo?

o es...

MarketInfo(NULL,MODE_STOPLEVEL);

o...

double bid =MarketInfo(NULL,MODE_BID);

double ask =MarketInfo(NULL,MODE_ASK);

double point =MarketInfo(NULL,MODE_POINT);

Creo que no entiendo muy bien cómo usar esto... ¿me puedes mostrar un ejemplo?

esto es lo que estoy trabajando en este caso..me pregunto por qué este EA no tenía problemas para colocar órdenes antes y ahora sí? Funcionaba antes de añadir el filtro???

//----------channel filter

double upLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 0, 0);

double LowLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 2, 0);

// ENTRY

if(total < 2 || isNewSumbol(Symbol())) //I have modified the if condition too: it was total<1 (orBanAway aka cucurucu)

{

double HedgeLots = (HedgePercent/100)*Lots; //calculates the Lots for the hedged position

if(isCrossed == 1 && Ask < upLevel)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

else

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

//###################################################################### the added code starts here

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

else

ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,0,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

//###################################################################### ends here

return(0);

}

if(isCrossed == 2 && Ask > LowLevel)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

else

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

//###################################################################### the added code starts here

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,HedgeLots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

else

ticket=OrderSend(Symbol(),OP_BUY,HedgeLots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

//###################################################################### ends here

return(0);

}

return(0);

}

return(0);

}

return(0);

}

}

//+------------------------------------------------------------------+
Archivos adjuntos:
 

Debe utilizar MarketInfo(NULL,MODE_STOPLEVEL) para determinar a qué distancia del precio actual deben situarse sus órdenes de stop. Recuerde que devolverá su valor en pips.

Sin embargo, puede convertirlo en puntos usando algo como esto

double MinDist = NormalizeDouble(MarketInfo(NULL,MODE_STOPLEVEL)*Point, Digits);

Ahora asegúrese de que sus órdenes de stop estén al menos a esa distancia del precio actual del mercado. Por cierto, al usar el NormalizeDouble y Digits, usted está convirtiendo el valor del pip a los lugares apropiados después del decimal (4 o 2). Eso es algo muy bueno en MT4.

Espero que esto ayude.

Maji

 
Maji:
Debe utilizar MarketInfo(NULL,MODE_STOPLEVEL) para determinar a qué distancia del precio actual deben situarse sus órdenes de stop. Recuerde que devolverá su valor en pips.

Sin embargo, se puede convertir en Puntos usando algo como esto

double MinDist = NormalizeDouble(MarketInfo(NULL,MODE_STOPLEVEL)*Point, Digits);

Ahora asegúrese de que sus órdenes de stop estén al menos a esa distancia del precio actual del mercado. Por cierto, al usar el NormalizeDouble y Digits, usted está convirtiendo el valor del pip a los lugares apropiados después del decimal (4 o 2). Eso es algo muy bueno en MT4.

Espero que esto ayude.

Maji

Lo que no entiendo es por qué agregar el indicador como un filtro desordenado la forma en que está colocando órdenes o paradas. No cambió nada de eso por lo que puedo decir, así que ¿por qué no permitir las operaciones por encima de la línea de cambiar la forma en que coloca sus órdenes de parada?

 

Si no te importa, envíame por correo electrónico el código actual. Intentaré echarle un vistazo durante el fin de semana. No puedo prometer que lo arreglaré, pero echaré un vistazo honesto y lo intentaré.

 

este es su problema que debe mirar primero

if(isCrossed == 1 && Ask < upLevel-longrange)[/PHP]

Ask and upLevel are in "price" (like 115.56 or 1.2678) while longrange is in pips (like 4,5,6) and u cannot mixed them. U have to normalize the pips to "price" and this is done by muliplying the pips with Points

the corrected code is like that

[PHP]if(isCrossed == 1 && Ask < upLevel-longrange*Point)
 

Bueno, por una vez es una solución fácil...

solo que...

...es que lo he cambiado desde que hice ese post. ...modifiqué el indicador con un parámetro para hacer las bandas más anchas o más estrechas y quité la parte del EA que hacía un límite de proximidad a la línea. Me imaginé que si sólo podía hacer que las bandas de comercio en sí estrechas o anchas que daría la misma función sin ser tan complejo, y para mí era más fácil de mantener un seguimiento mental de....so...

actualmente es así...

//----------channel filter

double upLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 0, 0);

double LowLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 2, 0);

// ENTRY

if(total < 2 || isNewSumbol(Symbol())) //I have modified the if condition too: it was total<1 (orBanAway aka cucurucu)

{

double HedgeLots = (HedgePercent/100)*Lots; //calculates the Lots for the hedged position

if(isCrossed == 1 && Ask < upLevel)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

else

tanto el ask como el uplevel están ambos en precio ¿no? este es el código que sigue generando el error. debe haber algo más..

 

hasta ahora no veo ningún problema (orientado al código)

Pero lógicamente, mira esto

if(isCrossed == 1 && Ask < upLevel)

No estás comprobando que estén cerca, sólo que el precio sea inferior a la línea

 

¡¡¡Sabía que lo tenía!!!

Pruebas exactamente lo que u quería conseguir, y mi previuos post Acabo de poner el EA mal.

Este EA puede comprobar hasta 4 TF para comprobar si todos ellos obtener el borde al mismo tiempo. Usted puede seleccionar sólo uno si u quiere.

Puedes usarlo como ejemplo de cómo sacar la lógica de un indicador, y cómo combinar múltiples TF juntos

saludos

Eli

Archivos adjuntos:
tbs.mq4  7 kb
 
elihayun:
¡¡¡Sabía que lo tenía!!!

Pruebas exactamente lo que u quería conseguir, y mi previuos post Acabo de poner el EA mal.

Este EA puede comprobar hasta 4 TF para comprobar si todos ellos obtener el borde al mismo tiempo. Usted puede seleccionar sólo uno si u quiere.

Puedes usarlo como ejemplo de cómo sacar la lógica de un indicador, y cómo combinar múltiples TF juntos

saludos

Eli

esto es intrigante Todavía tengo que expore realmente indicadores multi TF pero creo que hay mérito a ellos.

Razón de la queja: