Aide au codage - page 100

 
dasssi:
mladen

d'abord j'espère que vous n'êtes plus en colère contre moi...

Ensuite, j'ai une erreur en essayant de charger l'EA.

dasssi

Essayez de renommer l'EA (à cause de la lettre française dans le nom, il se peut qu'il vous cause un problème - aucun autre problème ne peut être la cause de cela puisque c'est un EA très simple).

 

merci, cela fonctionne maintenant/

n'a pas l'air bien sur le testeur de stratégie

 
dasssi:
Merci, cela fonctionne maintenant / ne semble pas bon sur le testeur de stratégie.

C'est juste un exemple de la façon dont un indicateur devrait être appelé à partir d'un EA lorsqu'il s'agit de signaux. Loin d'être un EA complet (regardez les nouveaux EAs dans les sections elite et advanced et comparez le code - vous verrez ce que je veux dire). Donc, c'était juste une aide à After-rage pour résoudre son problème de codage.

 

Merci ! Il fonctionne bien pour entrer des positions. Je ne sais pas pourquoi mon EA ne fonctionne pas mais cela n'a pas d'importance. J'ai donc essayé d'ajouter un code pour fermer les ordres mais cela ne fonctionne pas non plus. C'est étrange car j'ai pris le même code de structure pour les positions d'entrée et j'ai juste doublé le volume du lot. Pouvez-vous jeter un coup d'oeil ?

Dossiers :
 
After-rage:
Merci ! Cela fonctionne bien pour les positions d'entrée. Je ne sais pas pourquoi mon EA ne fonctionne pas mais cela n'a pas d'importance. J'ai donc essayé d'ajouter un code pour fermer les ordres mais cela ne fonctionne pas non plus. C'est étrange car j'ai pris le même code de structure pour les positions d'entrée et j'ai juste doublé le volume du lot. Pouvez-vous jeter un coup d'oeil ?

After-rage

Une façon de le faire (fermer un ordre ouvert lorsque le signal change) est dans le code maintenant.

Dossiers :
 

Merci beaucoup ! Cela fonctionne très bien. Je vais travailler là-dessus et voir pourquoi je me suis trompé.

 

Est-ce que quelqu'un sait s'il est possible de changer les paramètres d'un indicateur sur le temps d'exécution via le code ? par exemple, je voudrais avoir un CCI dont la période est égale à l'ATR, donc quand l'ATR change, la période du CCI change aussi... comme réinitialiser l'indicateur à chaque nouvelle barre... Le problème est que je ne sais pas comment réinitialiser l'indicateur via le code... J'ai essayé d'appeler le init() lorsque la nouvelle barre est ouverte et la période change correctement mais l'indicateur ne se rafraîchit pas... la valeur de la dernière barre est correcte mais je veux que l'indicateur entier se repeigne avec les nouveaux paramètres... J'espère avoir été clair... Merci...

 
AtApi:
Est-ce que quelqu'un sait s'il est possible de changer les paramètres d'un indicateur sur le temps d'exécution via le code ? par exemple, je voudrais avoir un CCI dont la période est égale à l'ATR, donc quand l'ATR change, la période du CCI change aussi... comme pour réinitialiser l'indicateur à chaque nouvelle barre... Le problème est que je ne sais pas comment réinitialiser l'indicateur via le code... J'ai essayé d'appeler le init() lorsque la nouvelle barre est ouverte et la période change correctement mais l'indicateur ne se rafraîchit pas... la valeur de la dernière barre est correcte mais je veux que l'indicateur entier se repeigne avec les nouveaux paramètres... J'espère avoir été clair... Merci...

Si vous voulez repeindre l'ensemble des valeurs de l'indicateur, il suffit de régler le compte de la boucle principale au début sur Bars-1 et de calculer les valeurs avec les nouveaux paramètres.

 

Merci mladen pour votre réponse rapide...

veuillez regarder cet exemple :

extern int IndicatorPeriod = 10;

extern int AtrPeriod= 10;

extern bool DynamicPeriod = TRUE;

int init()

{

if (DynamicPeriod)

{

double atr = NormalizeDouble(100*iATR(0,0,AtrPeriod,0),0);

IndicatorPeriod = atr;

}

}

int start()

{

datetime lastBarOpenTime;

datetime thisBarOpenTime = Time[0];

if (DynamicPeriod)

{

if(thisBarOpenTime != lastBarOpenTime)

{

lastBarOpenTime = thisBarOpenTime;

init();

}

}

int i,counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

// is this what you are talking about?

int limit=MathMin(Bars-counted_bars,Bars-1);

for(i=limit; i>=0; i--) //MAIN LOOP

{

wherever calculation

}

}

 
AtApi:
Merci mladen pour votre réponse rapide...

veuillez consulter cet exemple :

extern int IndicatorPeriod = 10;

extern int AtrPeriod= 10;

extern bool DynamicPeriod = TRUE;

int init()

{

if (DynamicPeriod)

{

double atr = NormalizeDouble(100*iATR(0,0,AtrPeriod,0),0);

IndicatorPeriod = atr;

}

}

int start()

{

datetime lastBarOpenTime;

datetime thisBarOpenTime = Time[0];

if (DynamicPeriod)

{

if(thisBarOpenTime != lastBarOpenTime)

{

lastBarOpenTime = thisBarOpenTime;

init();

}

}

int i,counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

// is this what you are talking about?

int limit=MathMin(Bars-counted_bars,Bars-1);

for(i=limit; i>=0; i--) //MAIN LOOP

{

wherever calculation

}

}

AtApi

Si vous voulez enregistrer des valeurs dans la mémoire tampon (une valeur par heure exacte pour cette barre), alors oui, c'est la bonne méthode. Mais si vous voulez que toutes les barres soient "repeintes", alors réglez le linit pour qu'il soit toujours égal àBars-1.