Função ICustom - página 10

 

Olá, você poderia me ajudar na elaboração deste especialista?

Com base no indicador FreedomBar...

Se a praça anterior fechar vermelho -> vender (preço de mercado) -> fechar comércio na próxima praça anterior mudar para azul e inverter para comprar (preço de mercado)

Idem nas ordens de compra

As opções TF, tp, sl e trailing stop seriam boas.

Obrigado de antemão

Arquivos anexados:
 

Qualquer ajuda, por favor. Estou lendo de e indicador para um EA usando icustom, durante o backtest a tendência corre bastante feliz, então por alguma razão os parâmetros do icustom se invertem, então minha tendência está subindo em vez de descer, mesmo que o indicador esteja se mostrando para baixo depois que o comércio é ativado eu corrijo a si mesmo e então acontece novamente algum tempo depois

 
increase:
Qualquer ajuda, por favor. Estou lendo de e indicador para um EA usando icustom, durante o backtest a tendência corre bastante feliz, então por alguma razão os parâmetros do icustom se invertem, então minha tendência está subindo em vez de descer, mesmo que o indicador esteja se mostrando para baixo depois que o comércio é ativado eu corrijo a si mesmo e então acontece novamente algum tempo depois

mmm então o indicador parece ser o problema, é o SuperTrend volty like, mas eu tive o problema com outros indicadores não-pintados como o FX Sniper Ergodic e Fisher.

O desafio parece ser que há muitas vezes quando o indicador aponta em uma direção, digamos para baixo, mas o ponto inicial do movimento acaba sendo mais baixo do que o final, fazendo com que o indicador apareça para baixo, mas os dados lêem para cima.

Algum comentário sobre isto, alguém tem um indicador sem repintura que não faz isto, ou qualquer outra solução?

Por favor, veja a figura em anexo.

Arquivos anexados:
pic.jpg  38 kb
 

Função iCustom

olá a todos... este é meu primeiro post

preciso de alguma ajuda com a ea im tentando criar. esta ea será usada para fechar a posição com base na cor do indicador, mas vou abrir a posição manualmente. como não tenho a versão de descompilação do indicador, acho que o icustom é o caminho a seguir.

mas como eu chamo a função com base na cor?

por exemplo, se eu usei Heikin Ashi_SW e quero fechar a posição de venda quando a cor é azul depois que a barra é fechada e vice-versa.

do quex com antecedência

 

Problemas da ICustom

Tenho um simples Indicador Personalizado sem extensões chamado #TestIndicator que preenche 8 buffers com o número 1.0 mas quando trago de volta os buffers no meu EA os resultados do buffer são sempre 0 . Você pode me ajudar com isso?

#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 no Testador

 
Xaun:
Tenho um simples Indicador Personalizado sem extensões chamado #TestIndicator que preenche 8 buffers com o número 1.0, mas quando trago de volta os buffers em meu EA os resultados do buffer são sempre 0 . Você pode me ajudar com isto.

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);

}

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

]

Maybay, você precisa definir o tamanho da matriz em sua EA.

 

Obrigado

okfar:
Maybay, você precisa definir o tamanho da matriz em sua EA.

Obrigado Okfar. Esse foi exatamente o problema

 

Dependendo de como você vai acessar seus dados, você não precisa recarregar a matriz em cada tick, assim como você não precisa recalcular os indicadores. ver

bool ArraySetAsSeries(double&array[], bool set)Define a direção de indexação da matriz. Se o parâmetro do conjunto tiver o valor VERDADEIRO, a matriz será indexada em ordem inversa, ou seja, o último elemento tem um índice zero. O valor FALSO define uma ordem de indexação padrão. A função retorna o status anterior.

 

...

Você está tentando usar recursos que devem ser usados exclusivamente a partir de um indicador.

IndicatorCounted() não tem nenhum significado quando chamado de um EA. Ele sempre retorna -1 quando chamado dentro de um código EA. Tente usar uma constante em vez disso (como em seu segundo loop) ou Barras (se você quiser todo o histórico).

Além disso, as arrays usadas dentro da EA devem ser dimensionadas, inicializadas e todo o trabalho que normalmente o metatrader faz quando se trata de indicadores e buffers dentro de indicadores. A EA não tem um equivalente do SetIndexBuffer() que é usado em indicadores. Você está tendo matrizes não inicializadas em seu Ea e somente o metatrader impediu que seu EA travasse a plataforma (ele sempre retorna 0 nesses casos, já que o valor do elemento que você está tentando ler não existe, e na verdade, essas matrizes não existem (elas são apenas declaradas, não alocadas, inicializadas,...))

com respeito a

mladen

Xaun:
Tenho um simples Indicador Personalizado sem extensões chamado #TestIndicator que preenche 8 buffers com o número 1.0 mas quando trago de volta os buffers no meu EA os resultados dos buffers são sempre 0 . Você pode me ajudar com isto.

#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 no Testador...

 

Pergunta de codificação

Tenho um indicador que me agrada muito e o demoei por algumas semanas e tive bastante sucesso. Existe alguma forma de automatizar pedidos de compra/venda com base no indicador? Um pequeno resumo é uma pequena seta apontando para cima ou para baixo no gráfico quando os indicadores que eu gosto se alinham para cima. Existe alguma maneira de que quando a seta aparecer, ela faça um pedido para mim?

Razão: