Funzione ICustom - pagina 10

 

Ciao, potresti aiutarmi con l'elaborazione di questo esperto.

Sulla base dell'indicatore FreedomBar...

Se il quadrato precedente chiude in rosso -> vendi (prezzo di mercato) -> chiudi il trade nel prossimo quadrato precedente cambia in blu e inverti in acquisto (prezzo di mercato)

Idem per gli ordini di acquisto

Le opzioni TF, tp, sl e trailing stop sarebbero gradite.

Grazie in anticipo

File:
 

Qualsiasi aiuto per favore. Sto leggendo da un indicatore in un EA usando icustom, durante il backtest il trend gira abbastanza felicemente, poi per qualche ragione i parametri icustom si invertono così il mio trend sta andando su invece che giù anche se l'indicatore sta mostrando giù dopo che il trade è attivato si corregge poi succede di nuovo qualche tempo dopo

 
increase:
Qualsiasi aiuto per favore. Sto leggendo da un indicatore in un EA usando icustom, durante il backtest il trend gira abbastanza felicemente, poi per qualche ragione i parametri icustom si invertono così il mio trend sta andando su invece che giù anche se l'indicatore sta mostrando giù dopo che il trade è attivato si corregge poi succede di nuovo qualche tempo dopo

mmm così l'indicatore sembra essere il problema è SuperTrend volty come ma ho avuto il problema con altri indicatori non repainting come FX Sniper Ergodic e Fisher.

La sfida sembra essere che ci sono molte volte quando l'indicatore punta in una direzione, diciamo verso il basso, ma il punto di partenza della mossa finisce per essere inferiore al punto di arrivo causando l'indicatore per mostrare giù, ma i dati leggono su.

C'è qualche commento su questo, qualcuno ha un indicatore che non dipinge che non fa questo, o qualche altra soluzione?

Si prega di vedere la foto allegata

File:
pic.jpg  38 kb
 

funzione iCustom

Ciao a tutti... questo è il mio primo post

Ho bisogno di aiuto con l'ea im cercando di creare. questo ea sarà utilizzato per chiudere la posizione in base al colore dell'indicatore, ma io aprirò la posizione manualmente. dal momento che non ho la versione decompilare l'indicatore, penso che icustom è la strada da percorrere.

ma come faccio a chiamare la funzione basata sul colore?

es. se ho usato Heikin Ashi_SW e voglio chiudere la posizione di vendita quando il colore è blu dopo che la barra è chiusa e viceversa.

grazie in anticipo

 

Problemi di ICustom

Ho un semplice indicatore personalizzato senza esterni chiamato #TestIndicator che riempie 8 buffer con il numero 1.0 ma quando riporto i buffer nel mio EA i risultati del buffer sono sempre 0. Potete aiutarmi con questo

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

}

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

Risultati in Tester

 
Xaun:
Ho un semplice indicatore personalizzato senza esterni chiamato #TestIndicator che riempie 8 buffer con il numero 1.0 ma quando riporto i buffer nel mio EA i risultati del buffer sono sempre 0. Puoi aiutarmi con questo.

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

}

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

]

Forse hai bisogno di definire la dimensione dell'array nel tuo EA.

 

Grazie

okfar:
Forse hai bisogno di definire la dimensione dell'array nel tuo EA.

Grazie Okfar. Questo era esattamente il problema

 

A seconda di come si accede ai dati, non è necessario riempire nuovamente l'array ad ogni tick, proprio come non è necessario ricalcolare gli indicatori. vedi

bool ArraySetAsSeries(double&array[], bool set)Imposta la direzione di indicizzazione dell'array. Se il parametro set ha il valore TRUE, l'array sarà indicizzato in un ordine inverso, cioè l'ultimo elemento ha un indice zero. Il valore FALSE imposta un ordine di indicizzazione standard. La funzione restituisce lo stato precedente.

 

...

Stai cercando di utilizzare funzioni che sono destinate ad essere utilizzate esclusivamente da un indicatore.

IndicatorCounted() non ha alcun significato quando viene chiamato da un EA. Restituisce sempre -1 quando viene chiamato all'interno del codice EA. Prova invece a usare una costante (come nel tuo secondo ciclo) o Bars (se vuoi l'intera storia).

Inoltre, gli array utilizzati all'interno dell'EA dovrebbero essere dimensionati, inizializzati e tutto il lavoro che normalmente metatrader fa quando si tratta di indicatori e buffer all'interno degli indicatori. EA non ha un equivalente di SetIndexBuffer() che è usato negli indicatori. Hai degli array non inizializzati nel tuo Ea e solo metatrader ha impedito al tuo EA di mandare in crash la piattaforma (restituisce sempre 0 in quei casi, poiché il valore dell'elemento che stai cercando di leggere non esiste, e infatti, quegli array non esistono (sono solo dichiarati, non allocati, inizializzati,...))

saluti

mladen

Xaun:
Ho un semplice indicatore personalizzato senza esterni chiamato #TestIndicator che riempie 8 buffer con il numero 1.0 ma quando riporto i buffer nel mio EA i risultati del buffer sono sempre 0. Potete aiutarmi con questo.

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

}

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

Risultati in Tester...

 

Domanda di codifica

Ho un indicatore che mi piace molto e l'ho provato per un paio di settimane con un discreto successo. C'è un modo in cui posso automatizzare gli ordini di acquisto/vendita basati sull'indicatore? In breve, si tratta di una piccola freccia che punta in alto o in basso sul grafico quando gli indicatori che mi piacciono si allineano. C'è un modo in cui quando la freccia si alza, si inserisce un ordine per me?