Fonction ICustom - page 10

 

Bonjour, pourriez-vous m'aider dans l'élaboration de cet expert.

Basé sur l'indicateur FreedomBar...

Si la case précédente ferme en rouge -> vendre (prix du marché) -> fermer la transaction dans la case précédente suivante passe en bleu et inverse à l'achat (prix du marché).

Idem pour les ordres d'achat

Les options TF, tp, sl et trailing stop seraient bienvenues.

Merci d'avance

Dossiers :
 

N'hésitez pas à m'aider. Je suis en train de lire un indicateur dans un EA utilisant icustom, pendant le backtest la tendance se déroule de manière assez heureuse, puis pour une raison quelconque les paramètres d'icustom s'inversent de sorte que ma tendance monte au lieu de descendre même si l'indicateur montre une baisse après l'activation de la transaction, je me corrige puis cela se reproduit quelque temps plus tard.

 
increase:
Toute aide est la bienvenue. Je lis à partir d'un indicateur dans un EA utilisant icustom, pendant le backtest la tendance se déroule de manière tout à fait heureuse, puis pour une raison quelconque les paramètres icustom s'inversent et ma tendance monte au lieu de descendre même si l'indicateur montre une baisse après que le trade soit activé, il se corrige puis se reproduit quelque temps plus tard

Il s'agit de SuperTrend Volty, mais j'ai eu ce problème avec d'autres indicateurs qui ne se repeignent pas, comme FX Sniper Ergodic et Fisher.

Le problème semble être qu'il y a de nombreuses fois où l'indicateur pointe dans une direction, disons vers le bas, mais le point de départ du mouvement finit par être plus bas que le point d'arrivée, ce qui fait que l'indicateur affiche une baisse mais les données indiquent une hausse.

Avez-vous des commentaires à ce sujet, quelqu'un a-t-il un indicateur qui ne se repeint pas et qui ne fait pas cela, ou une autre solution ?

Voir l'image ci-jointe

Dossiers :
pic.jpg  38 kb
 

Fonction iCustom

Bonjour à tous... C'est mon premier message.

j'ai besoin d'aide avec l'ea que j'essaie de créer. cette ea sera utilisée pour fermer la position basée sur la couleur de l'indicateur mais j'ouvrirai la position manuellement. puisque je n'ai pas la version décompilée de l'indicateur, je pense qu'icustom est la voie à suivre.

mais comment puis-je appeler la fonction basée sur la couleur ?

Par exemple, si j'utilise Heikin Ashi_SW et que je veux fermer une position de vente lorsque la couleur est bleue après la fermeture de la barre et vice versa.

Merci d'avance

 

Problèmes d'ICustom

J'ai un indicateur personnalisé simple sans externalités appelé #TestIndicator qui remplit 8 tampons avec le nombre 1.0 mais quand je ramène les tampons dans mon EA les résultats des tampons sont toujours 0 . Pouvez-vous m'aider avec ceci.

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

}

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

Résultats dans Tester

 
Xaun:
J'ai un indicateur personnalisé simple sans externalités appelé #TestIndicator qui remplit 8 tampons avec le nombre 1.0 mais quand je ramène les tampons dans mon EA les résultats des tampons sont toujours 0. Pouvez-vous m'aider à résoudre ce problème ?

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

}

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

]

Peut-être que vous devez définir la taille du tableau dans votre EA.

 

Merci

okfar:
Peut-être que vous devez définir la taille du tableau dans votre EA.

Merci Okfar. C'était exactement le problème

 

En fonction de la façon dont vous allez accéder à vos données, vous n'avez pas besoin de remplir le tableau à chaque tick, tout comme vous n'avez pas besoin de recalculer les indicateurs. cf.

bool ArraySetAsSeries(double&array[], bool set)Définit la direction d'indexation du tableau. Si le paramètre set a la valeur TRUE, le tableau sera indexé dans un ordre inversé, c'est-à-dire que le dernier élément aura un indice de zéro. La valeur FALSE définit un ordre d'indexation standard. La fonction retourne l'état précédent.

 

...

Vous essayez d'utiliser des fonctionnalités qui sont destinées à être utilisées exclusivement à partir d'un indicateur.

IndicatorCounted() n'a aucune signification lorsqu'il est appelé depuis un EA. Elle renvoie toujours -1 lorsqu'elle est appelée dans le code de l'EA. Essayez d'utiliser une constante à la place (comme dans votre deuxième boucle) ou Bars (si vous voulez l'historique complet).

De plus, les tableaux utilisés dans l'EA doivent être dimensionnés, initialisés et tout le travail que metatrader fait normalement lorsqu'il s'agit d'indicateurs et de tampons dans les indicateurs. EA n'a pas d'équivalent de SetIndexBuffer() qui est utilisé dans les indicateurs. Vous avez des tableaux non initialisés dans votre EA et seul metatrader a empêché votre EA de planter la plateforme (il renvoie toujours 0 dans ces cas, puisque la valeur de l'élément que vous essayez de lire n'existe pas, et en fait, ces tableaux n'existent pas (ils sont juste déclarés, pas alloués, initialisés,...)).

salutations

mladen

Xaun:
J'ai un indicateur personnalisé simple sans externalités appelé #TestIndicator qui remplit 8 tampons avec le nombre 1.0 mais quand je ramène les tampons dans mon EA les résultats des tampons sont toujours 0 . Pouvez-vous m'aider à résoudre ce problème ?

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

}

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

Résultats dans Tester...

 

Question de codage

J'ai un indicateur que j'aime beaucoup et j'en ai fait la démonstration pendant quelques semaines avec un certain succès. Existe-t-il un moyen d'automatiser les ordres d'achat et de vente basés sur cet indicateur ? En résumé, il s'agit d'une petite flèche pointant vers le haut ou vers le bas sur le graphique lorsque les indicateurs que j'aime s'alignent. Existe-t-il un moyen de placer un ordre pour moi lorsque la flèche apparaît ?

Raison: