Ayuda a la codificación - página 73

 

Hola,

Espero que alguien pueda ayudarme a conseguir que un indicador haga lo que me gusta que haga.

Tengo un indicador que muestra la longitud del cuerpo / o la longitud total de la vela, más el tiempo de la barra de la vela.

Lo único es que no es adecuado para los corredores de 5 dígitos; el tiempo y la longitud se proyectan uno sobre el otro, mientras que es perfecto en Digit 4.

Estaría muy bien que alguien pudiera y quisiera cambiar el código.

Gracias de antemano,

Saludos,

Ben

 

Falta algo simple

He estado trabajando en un filtro de TL para un EA de cruce de MA, cualquier EA de cruce de MA, pero lo estoy estudiando en el adjunto ya que es uno simple.

Básicamente la calculadora de TL da señales 1, 2 o 3 dependiendo de la dirección de la TL y el cruce de precios y una desagradable "división de cero" si la TL no está lo suficientemente inclinada.

Estoy aprendiendo a codificar y a leer todos los PDF del Gurú de los Codificadores y todo lo que mi cerebro puede tomar del foro MQL4, pero como soy un aprendiz lento y recién codificado nada hasta hace 3 semanas....

Buscando algunos consejos....

Problema: No puedo averiguar cómo llamar el valor "TLfilter" que es 3 cuando el precio no ha tocado el TL y su bien para hacer una compra.

He intentado ponerlo en los criterios de compra/venta como &&TTLfilter = 3, y cualquier otro método que pueda averiguar, pero todo lo que obtengo es que no hay operaciones en absoluto.

También trató de conseguir que en el bucle OrderSelect pero no hubo suerte.

Sólo en busca de punteros como en lo que estoy perdiendo.

Si alguien está interesado en echar un vistazo.

Dibuje un TL en el gráfico antes de adjuntar el EA y nómbrelo t6

Descomentar el //--- Print ("TLfilter = ",TLfilter); return(TLfilter); en la parte inferior de la sección TL para ver lo que está haciendo.

Los mods a este EA están marcados por la doble línea ======= 1 2 y 3

Editar: Nada de mi codificación en este, como quería asegurarse de que es lo más limpio posible x_trader_v2_tlmod.mq4

Archivos adjuntos:
 

multiindicador

¡Hola!

¿Alguien usa/tiene un multiindicador como este?

Multi Moving Average - MQL4 Code Base

Si ves ahí abajo, parece un indicador de "barra de libertad"... así que... Quiero cambiar estos indicadores de entrada, no quiero usar 4ema.... Quiero 1ema ( 2 cruce ), CCI, STOCH y SAR

He encontrado algunos multiindicadores, pero no tienen un historial como este

¿alguien puede ayudar y cambiar el código?

 

Hola Pearl1,

Por lo que veo se puede hacer solo tienes que introducir la llamada sustituyendo las otras 3 medias móviles por los indicadores que quieras utilizar junto con las condiciones a señalar.

 

Estaba intentando algo, pero no hay progreso

 

¿Por qué no publicas lo que has codificado hasta ahora y explicas lo que estás tratando de hacer? De esta manera alguien podría ayudarte

pearl1:
Estaba intentando algo, pero no hay progreso
 

int inicio()

{

//----

int Counted.Bars = IndicadorContado(), i;

if(Counted.Bars<0) return(-1);

if(Counted.Bars>0) Counted.Bars--;

int Límite = Bares - Counted.Bars;

color Text.Color.1, Text.Color.2, Text.Color.3, Text.Color.4;

//----

for(i=Límite; i>=0; i--)

{

MA0.Buffer.0 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_MEDIAN, i); aquí chupo.... él siempre compara con este MA0.Buffer.0....así que, si uso RSI, Stoch,... ¿debo crear este buffer para todos los elementos? ¿RSI0.Buffer.0 para RSI?

//----

MA1.Buffer.0 = iMA(NULL, 0, MA1.Period, 0, MA1.Mode, MA1.Price, i);

MA1.Buffer.1 = iMA(NULL, 0, MA1.Period, 0, MA1.Mode, MA1.Price, i+1);

MA2.Buffer.0 = iMA(NULL, 0, MA2.Period, 0, MA2.Mode, MA2.Price, i);

MA2.Buffer.1 = iMA(NULL, 0, MA2.Period, 0, MA2.Mode, MA2.Price, i+1);

MA3.Buffer.0 = iMA(NULL, 0, MA3.Period, 0, MA3.Mode, MA3.Price, i);

MA3.Buffer.1 = iMA(NULL, 0, MA3.Period, 0, MA3.Mode, MA3.Price, i+1);

MA4.Buffer.0 = iMA(NULL, 0, MA4.Period, 0, MA4.Mode, MA4.Price, i);

MA4.Buffer.1 = iMA(NULL, 0, MA4.Period, 0, MA4.Mode, MA4.Price, i+1);

MA1.UP.Buffer = EMPTY_VALUE;

MA1.DN.Buffer = EMPTY_VALUE;

if(MA1.Buffer.0 < MA1.Buffer.1) MA1.DN.Buffer = Gap * P1.Position + 1.0;

si no MA1.UP.Buffer = Gap * P1.Position + 1.0;

if(MA1.Buffer.0 < MA0.Buffer.0) Text.Color.1 = Text.Color.Up;

si no, Text.Color.1 = Text.Color.Down;

//----

MA2.UP.Buffer = EMPTY_VALUE;

MA2.DN.Buffer = EMPTY_VALUE;

if(MA2.Buffer.0 < MA2.Buffer.1) MA2.DN.Buffer = Gap * P2.Position + 1.0;

si no MA2.UP.Buffer = Gap * P2.Position + 1.0;

if(MA2.Buffer.0 < MA0.Buffer.0) Text.Color.2 = Text.Color.Up;

si no, Text.Color.2 = Text.Color.Down;

//----

MA3.UP.Buffer = EMPTY_VALUE;

MA3.DN.Buffer = EMPTY_VALUE;

if(MA3.Buffer.0 < MA3.Buffer.1) MA3.DN.Buffer = Gap * P3.Position + 1.0;

si no MA3.UP.Buffer = Gap * P3.Position + 1.0;

if(MA3.Buffer.0 < MA0.Buffer.0) Text.Color.3 = Text.Color.Up;

si no, Text.Color.3 = Text.Color.Down;

//----

MA4.UP.Buffer = EMPTY_VALUE;

MA4.DN.Buffer = EMPTY_VALUE;

if(MA4.Buffer.0 < MA4.Buffer.1) MA4.DN.Buffer = Gap * P4.Position + 1.0;

si no MA4.UP.Buffer = Gap * P4.Position + 1.0;

if(MA4.Buffer.0 < MA0.Buffer.0) Text.Color.4 = Text.Color.Up;

si no, Text.Color.4 = Text.Color.Down;

//----

//----

LabelSet(Text.Color.1, Text.Color.2, Text.Color.3, Text.Color.4);

//----

}

//----

return(0);

 

No es necesario crear un buffer para todos los elementos.

MA1.Buffer.0, MA1.Buffer.1, .... no son buffers sino simples variables. Puedes usarlas para cualquier cosa sin cambiar sus nombres. Si quieres usarlas, por ejemplo, para el rsi, puedes cambiar el código a algo como esto :

MA1.Buffer.0 = iRSI(NULL, 0, RSI1.Period, RSI1.Price, i); MA1.Buffer.1 = iRSI(NULL, 0, RSI1.Period, RSI1.Price, i+1);

sin necesidad de cambiar los nombres de las variables y funcionará (simplemente define RSI1.Period y RSI1.Price en este caso como parámetros externos)

pearl1:
int inicio()

{

//----

int Counted.Bars = IndicatorCounted(), i;

if(Counted.Bars<0) return(-1);

if(Counted.Bars>0) Counted.Bars--;

int Límite = Bares - Counted.Bars;

color Text.Color.1, Text.Color.2, Text.Color.3, Text.Color.4;

//----

for(i=Límite; i>=0; i--)

{

MA0.Buffer.0 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_MEDIAN, i); aquí chupo.... él siempre compara con este MA0.Buffer.0....así que, si uso RSI, Stoch,... ¿debo crear este buffer para todos los elementos? ¿RSI0.Buffer.0 para RSI?

//----

MA1.Buffer.0 = iMA(NULL, 0, MA1.Period, 0, MA1.Mode, MA1.Price, i);

MA1.Buffer.1 = iMA(NULL, 0, MA1.Period, 0, MA1.Mode, MA1.Price, i+1);

MA2.Buffer.0 = iMA(NULL, 0, MA2.Period, 0, MA2.Mode, MA2.Price, i);

MA2.Buffer.1 = iMA(NULL, 0, MA2.Period, 0, MA2.Mode, MA2.Price, i+1);

MA3.Buffer.0 = iMA(NULL, 0, MA3.Period, 0, MA3.Mode, MA3.Price, i);

MA3.Buffer.1 = iMA(NULL, 0, MA3.Period, 0, MA3.Mode, MA3.Price, i+1);

MA4.Buffer.0 = iMA(NULL, 0, MA4.Period, 0, MA4.Mode, MA4.Price, i);

MA4.Buffer.1 = iMA(NULL, 0, MA4.Period, 0, MA4.Mode, MA4.Price, i+1);

MA1.UP.Buffer = EMPTY_VALUE;

MA1.DN.Buffer = EMPTY_VALUE;

if(MA1.Buffer.0 < MA1.Buffer.1) MA1.DN.Buffer = Gap * P1.Position + 1.0;

si no MA1.UP.Buffer = Gap * P1.Position + 1.0;

if(MA1.Buffer.0 < MA0.Buffer.0) Text.Color.1 = Text.Color.Up;

si no, Text.Color.1 = Text.Color.Down;

//----

MA2.UP.Buffer = EMPTY_VALUE;

MA2.DN.Buffer = EMPTY_VALUE;

if(MA2.Buffer.0 < MA2.Buffer.1) MA2.DN.Buffer = Gap * P2.Position + 1.0;

si no MA2.UP.Buffer = Gap * P2.Position + 1.0;

if(MA2.Buffer.0 < MA0.Buffer.0) Text.Color.2 = Text.Color.Up;

si no, Text.Color.2 = Text.Color.Down;

//----

MA3.UP.Buffer = EMPTY_VALUE;

MA3.DN.Buffer = EMPTY_VALUE;

if(MA3.Buffer.0 < MA3.Buffer.1) MA3.DN.Buffer = Gap * P3.Position + 1.0;

si no MA3.UP.Buffer = Gap * P3.Position + 1.0;

if(MA3.Buffer.0 < MA0.Buffer.0) Text.Color.3 = Text.Color.Up;

si no, Text.Color.3 = Text.Color.Down;

//----

MA4.UP.Buffer = EMPTY_VALUE;

MA4.DN.Buffer = EMPTY_VALUE;

if(MA4.Buffer.0 < MA4.Buffer.1) MA4.DN.Buffer = Gap * P4.Position + 1.0;

si no MA4.UP.Buffer = Gap * P4.Position + 1.0;

if(MA4.Buffer.0 < MA0.Buffer.0) Text.Color.4 = Text.Color.Up;

si no, Text.Color.4 = Text.Color.Down;

//----

//----

LabelSet(Text.Color.1, Text.Color.2, Text.Color.3, Text.Color.4);

//----

}

//----

return(0);
 
pearl1:
int inicio()

{

//----

int Counted.Bars = IndicadorContado(), i;

if(Counted.Bars<0) return(-1);

if(Counted.Bars>0) Counted.Bars--;

int Límite = Bares - Counted.Bars;

color Text.Color.1, Text.Color.2, Text.Color.3, Text.Color.4;

//----

for(i=Límite; i>=0; i--)

{

MA0.Buffer.0 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_MEDIAN, i);

//----

MA1.Buffer.0 = iMA(NULL, 0, MA1.Period, 0, MA1.Mode, MA1.Price, i);

MA1.Buffer.1 = iMA(NULL, 0, MA1.Period, 0, MA1.Mode, MA1.Price, i+1);

MA2.Buffer.0 = iMA(NULL, 0, MA2.Period, 0, MA2.Mode, MA2.Price, i);

MA2.Buffer.1 = iMA(NULL, 0, MA2.Period, 0, MA2.Mode, MA2.Price, i+1);

MA3.Buffer.0 = iMA(NULL, 0, MA3.Period, 0, MA3.Mode, MA3.Price, i);

MA3.Buffer.1 = iMA(NULL, 0, MA3.Period, 0, MA3.Mode, MA3.Price, i+1);

MA4.Buffer.0 = iMA(NULL, 0, MA4.Period, 0, MA4.Mode, MA4.Price, i);

MA4.Buffer.1 = iMA(NULL, 0, MA4.Period, 0, MA4.Mode, MA4.Price, i+1);

MA1.UP.Buffer = EMPTY_VALUE;

MA1.DN.Buffer = EMPTY_VALUE;

if(MA1.Buffer.0 < MA1.Buffer.1) MA1.DN.Buffer = Gap * P1.Position + 1.0;

si no MA1.UP.Buffer = Gap * P1.Position + 1.0;

if(MA1.Buffer.0 < MA0.Buffer.0) Text.Color.1 = Text.Color.Up;

si no, Text.Color.1 = Text.Color.Down;

//----

MA2.UP.Buffer = EMPTY_VALUE;

MA2.DN.Buffer = EMPTY_VALUE;

if(MA2.Buffer.0 < MA2.Buffer.1) MA2.DN.Buffer = Gap * P2.Position + 1.0;

si no MA2.UP.Buffer = Gap * P2.Position + 1.0;

if(MA2.Buffer.0 < MA0.Buffer.0) Text.Color.2 = Text.Color.Up;

si no, Text.Color.2 = Text.Color.Down;

//----

MA3.UP.Buffer = EMPTY_VALUE;

MA3.DN.Buffer = EMPTY_VALUE;

if(MA3.Buffer.0 < MA3.Buffer.1) MA3.DN.Buffer = Gap * P3.Position + 1.0;

si no MA3.UP.Buffer = Gap * P3.Position + 1.0;

if(MA3.Buffer.0 < MA0.Buffer.0) Text.Color.3 = Text.Color.Up;

si no, Text.Color.3 = Text.Color.Down;

//----

MA4.UP.Buffer = EMPTY_VALUE;

MA4.DN.Buffer = EMPTY_VALUE;

if(MA4.Buffer.0 < MA4.Buffer.1) MA4.DN.Buffer = Gap * P4.Position + 1.0;

si no MA4.UP.Buffer = Gap * P4.Position + 1.0;

if(MA4.Buffer.0 < MA0.Buffer.0) Text.Color.4 = Text.Color.Up;

si no, Text.Color.4 = Text.Color.Down;

//----

//----

LabelSet(Text.Color.1, Text.Color.2, Text.Color.3, Text.Color.4);

//----

}

//----

return(0);

aha, gracias, pero este Buffers compara .... todo con MA0.Buffer.0 ?

 

Simplemente sustituye las llamadas a IMA() por las llamadas que quieras (como la de iRSI() del ejemplo que te di) y deberían funcionar, No hace falta sustituir los nombres de las variables

pearl1:
aha, gracias, pero este Buffers compara .... todo con MA0.Buffer.0 ?