Función ICustom - página 10

 

Hola, podrían ayudarme con la elaboración de este experto.

Basado en el indicador FreedomBar...

Si la plaza anterior cierra en rojo -> vender (precio de mercado) -> cerrar la operación en la siguiente plaza anterior cambiar a azul y revertir a comprar (precio de mercado)

Idem en las órdenes de compra

Las opciones de TF, tp, sl y trailing stop estarían bien.

Gracias de antemano

Archivos adjuntos:
 

Cualquier ayuda por favor. Estoy leyendo de un indicador en un EA usando icustom, durante el backtest la tendencia se ejecuta muy felizmente, entonces por alguna razón los parámetros icustom invertir por lo que mi tendencia va hacia arriba en lugar de hacia abajo a pesar de que el indicador está mostrando hacia abajo después de que el comercio se activa i corrige a sí mismo entonces sucede de nuevo algún tiempo después

 
increase:
Cualquier ayuda por favor. Estoy leyendo desde un indicador en un EA usando icustom, durante el backtest la tendencia se ejecuta muy felizmente, entonces por alguna razón los parámetros de icustom se invierten por lo que mi tendencia va hacia arriba en lugar de hacia abajo a pesar de que el indicador está mostrando hacia abajo después de que el comercio se activa i se corrige a sí mismo entonces sucede de nuevo algún tiempo después

mmm así que el indicador parece ser el problema es SuperTrend volty como pero he tenido el problema con otros indicadores no repintados como FX Sniper Ergodic y Fisher.

El problema parece ser que hay muchas veces que el indicador apunta en una dirección digamos a la baja, pero el punto de inicio del movimiento termina siendo más bajo que el final causando que el indicador muestre a la baja pero los datos leen al alza.

¿Algún comentario al respecto, alguien tiene un indicador que no repinte y que no haga esto, o alguna otra solución?

Por favor, vea la imagen adjunta

Archivos adjuntos:
pic.jpg  38 kb
 

Función iCustom

hola a todos... este es mi primer post

necesito un poco de ayuda con el ea im tratando de crear. este ea se utilizará para cerrar la posición basada en el color del indicador, pero voy a abrir la posición manualmente. ya que no tengo la versión decompile el indicador, creo icustom es el camino a seguir.

pero ¿como llamo a la función basada en el color?

por ejemplo, si utilizo Heikin Ashi_SW y quiero cerrar la posición de venta cuando el color es azul después de que la barra se cierra y viceversa.

gracias de antemano

 

Problemas con el ICustom

Tengo un simple indicador personalizado sin externos llamado #TestIndicator que llena 8 buffers con el número 1.0 pero cuando traigo los buffers en mi EA los resultados de los buffers son siempre 0 . Me pueden ayudar con esto.

#TestIndicator

#property indicator_chart_window

#property indicator_buffers 8

double buf4_up[];

double buf4_down[];

double buf3_up[];

double buf3_down[];

double buf2_up[];

double buf2_down[];

double buf1_up[];

double buf1_down[];

int UniqueNum = 0070;

string shortname = "";

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

shortname = "#TFX";

IndicatorBuffers(8);

IndicatorShortName(shortname);

//---- indicators

SetIndexBuffer(0,buf4_up);

SetIndexBuffer(1,buf4_down);

SetIndexBuffer(2,buf3_up);

SetIndexBuffer(3,buf3_down);

SetIndexBuffer(4,buf2_up);

SetIndexBuffer(5,buf2_down);

SetIndexBuffer(6,buf1_up);

SetIndexBuffer(7,buf1_down);

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

int limit;

int counted_bars = IndicatorCounted();

//---- the last calculated bar will be recalculated

if(counted_bars > 0)

counted_bars--;

limit = Bars - counted_bars - 1;

//---- the main cycle

for(int i = limit; i >= 0; i--)

{

//----

buf4_up=1.0;

buf4_down=1.0;

buf3_up=1.0;

buf3_down=1.0;

buf2_up=1.0;

buf2_down=1.0;

buf1_up=1.0;

buf1_down=1.0;

}

//----

//----

//----

return(0);

}

//+------------------

[/CODE]

EA Code

[CODE]

double test4_up[];

double test4_down[];

double test3_up[];

double test3_down[];

double test2_up[];

double test2_down[];

double test1_up[];

double test1_down[];

int UniqueNum = 009;

//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

int init()

{

//----

Print("Inside init");

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

Print("Inside deinit");

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

//----

Print("Inside start");

int counted_bars=IndicatorCounted();

int y5m=0, y1h=0, y30m=0, y15m=0, yy=0;

int i=0;

int limit=Bars-counted_bars;

for(i=0;i<limit;i++)

{

test4_up = iCustom(NULL, 0, "#TestIndicator",0,i);

test4_down = iCustom(NULL, 0, "#TestIndicator",1,i);

}

for(i=0;i<30;i++)

{

Print("Test 4 UP ", test4_up," Bar ",i );

Print("Test 4 DOWN ", test4_down," Bar ",i );

//Print("This is a test");

}

//----

return(0);

}

//+---------

Resultados en Tester

 
Xaun:
Tengo un simple indicador personalizado sin externos llamado #TestIndicator que llena 8 buffers con el número 1.0 pero cuando traigo los buffers en mi EA los resultados de los buffers son siempre 0 . Me pueden ayudar con esto.

Código EA

double test4_up[];

double test4_down[];

double test3_up[];

double test3_down[];

double test2_up[];

double test2_down[];

double test1_up[];

double test1_down[];

int UniqueNum = 009;

..

..

...

......

..

int i=0;

int limit=Bars-counted_bars;

ArrayResize(test4_up, limit);

ArrayResize(test4_down, limit);

for(i=0;i<limit;i++)

{

test4_up = iCustom(NULL, 0, "#TestIndicator",0,i);

test4_down = iCustom(NULL, 0, "#TestIndicator",1,i);

}

for(i=0;i<30;i++)

{

Print("Test 4 UP ", test4_up," Bar ",i );

Print("Test 4 DOWN ", test4_down," Bar ",i );

//Print("This is a test");

}

//----

return(0);

}

//+---------

]

Tal vez usted necesita definir el tamaño de la matriz en su EA.

 

Gracias

okfar:
Tal vez necesites definir el tamaño del array en tu EA.

Gracias Okfar. Ese era exactamente el problema

 

Dependiendo de cómo vayas a acceder a tus datos no tienes que rellenar el array en cada tick al igual que no tienes que recalcular los indicadores. ver

bool ArraySetAsSeries(double&array[], bool set)Establece la dirección de indexación del array. Si el parámetro set tiene el valor TRUE, el array se indexará en un orden inverso, es decir, el último elemento tiene un índice cero. El valor FALSE establece un orden de indexación estándar. La función devuelve el estado anterior.

 

...

Usted está tratando de utilizar las características que están destinados a ser utilizados exclusivamente de un indicador.

IndicatorCounted() no tiene ningún significado cuando se llama desde un EA. Siempre devuelve -1 cuando se llama dentro del código del EA. Intente usar una constante en su lugar (como en su segundo bucle) o Bares (si quiere todo el historial).

Además, los arrays utilizados dentro de EA deben ser dimensionados, inicializados y todo el trabajo que normalmente hace metatrader cuando se trata de indicadores y buffers dentro de los indicadores. EA no tiene un equivalente de SetIndexBuffer() que se utiliza en los indicadores. Estás teniendo arrays sin inicializar en tu Ea y sólo metatrader evitó que tu EA colapsara la plataforma (siempre devuelve 0 en esos casos, ya que el valor del elemento que intentas leer no existe, y de hecho, esos arrays no existen (sólo están declarados, no asignados, inicializados,...))

saludos

mladen

Xaun:
Tengo un simple indicador personalizado sin externos llamado #TestIndicator que llena 8 buffers con el número 1.0 pero cuando traigo los buffers en mi EA los resultados de los buffers son siempre 0 . Me pueden ayudar con esto.

#TestIndicator

#property indicator_chart_window

#property indicator_buffers 8

double buf4_up[];

double buf4_down[];

double buf3_up[];

double buf3_down[];

double buf2_up[];

double buf2_down[];

double buf1_up[];

double buf1_down[];

int UniqueNum = 0070;

string shortname = "";

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

shortname = "#TFX";

IndicatorBuffers(8);

IndicatorShortName(shortname);

//---- indicators

SetIndexBuffer(0,buf4_up);

SetIndexBuffer(1,buf4_down);

SetIndexBuffer(2,buf3_up);

SetIndexBuffer(3,buf3_down);

SetIndexBuffer(4,buf2_up);

SetIndexBuffer(5,buf2_down);

SetIndexBuffer(6,buf1_up);

SetIndexBuffer(7,buf1_down);

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

int limit;

int counted_bars = IndicatorCounted();

//---- the last calculated bar will be recalculated

if(counted_bars > 0)

counted_bars--;

limit = Bars - counted_bars - 1;

//---- the main cycle

for(int i = limit; i >= 0; i--)

{

//----

buf4_up=1.0;

buf4_down=1.0;

buf3_up=1.0;

buf3_down=1.0;

buf2_up=1.0;

buf2_down=1.0;

buf1_up=1.0;

buf1_down=1.0;

}

//----

//----

//----

return(0);

}

//+------------------

[/code]EA Code

[code]

double test4_up[];

double test4_down[];

double test3_up[];

double test3_down[];

double test2_up[];

double test2_down[];

double test1_up[];

double test1_down[];

int UniqueNum = 009;

//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

int init()

{

//----

Print("Inside init");

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

Print("Inside deinit");

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

//----

Print("Inside start");

int counted_bars=IndicatorCounted();

int y5m=0, y1h=0, y30m=0, y15m=0, yy=0;

int i=0;

int limit=Bars-counted_bars;

for(i=0;i<limit;i++)

{

test4_up = iCustom(NULL, 0, "#TestIndicator",0,i);

test4_down = iCustom(NULL, 0, "#TestIndicator",1,i);

}

for(i=0;i<30;i++)

{

Print("Test 4 UP ", test4_up," Bar ",i );

Print("Test 4 DOWN ", test4_down," Bar ",i );

//Print("This is a test");

}

//----

return(0);

}

//+---------

Resultados en Tester...

 

Pregunta de codificación

Tengo un indicador que me gusta mucho y lo he probado durante un par de semanas con bastante éxito. ¿Existe alguna forma de automatizar las órdenes de compra/venta basadas en el indicador? El resumen es que es una pequeña flecha apuntando hacia arriba o hacia abajo en el gráfico cuando los indicadores que me gustan se alinean. ¿Existe una manera de que cuando la flecha aparezca coloque una orden por mí?