Comment coder ? - page 308

 

Salut Mladen,

Je suis tombé sur un code fait par vous sur le stochastique. Cependant, lorsque je l'intègre dans mes systèmes, rien ne se passe. Puis-je vérifier avec vous ce qu'il fait ?

http://www.forexmt4.com/mt_yahoo/Color%20Stochastic%20v1[ 1].04.mq4

Salutations

Terrance

 

...

Essayez quelques-uns de ceux postés ici : https://www.mql5.com/en/forum/175297/page3

Ou ici : https://www.mql5.com/en/forum/177239/page2

J'ai testé et elles fonctionnent

tkuan77:
Salut Mladen,

Je suis tombé sur un code fait par vous sur stochastic. Cependant, lorsque je l'intègre dans mes systèmes, rien ne se passe. Puis-je vérifier avec vous ce qu'il fait ?

http://www.forexmt4.com/mt_yahoo/Color%20Stochastic%20v1[ 1].04.mq4

Salutations

Terrance
 

C'est étrange.

J'ai examiné le problème du cadenas un peu plus en détail. Apparemment, c'est lié aux paramètres de l'UAC (User Account Control). Je suis donc allé dans le panneau de configuration de Windows 7 et j'ai complètement désactivé l'UAC. Une fois que j'ai redémarré, j'ai remarqué que le cadenas avait disparu du fichier. Je l'ai ouvert et c'est le même que le fichier que j'ai posté sur ce forum. Il est complètement différent du code que j'ai écrit au cours des dernières semaines, même s'il s'agit du même fichier. J'ai cru que j'avais perdu tout mon travail de codage. J'ai réactivé l'UAC et redémarré, le cadenas était revenu et le code que j'avais écrit était redevenu normal.

Mais ensuite, j'ai essayé de compiler le code et il a détecté un tas d'erreurs. Mais les erreurs qu'il relève ne proviennent pas de ce code, mais du code complètement différent lorsque je désactive l'UAC - je le sais parce qu'il relève des variables qui ne sont utilisées que dans l'autre code.

Je pense que je vais devoir ouvrir un nouvel EA et taper manuellement tout ce code et le sauvegarder.

 

...

C'est un problème habituel avec windows 7 (avec sa protection)

Le moyen le plus simple d'éviter cela sous windows 7 est d'installer metatrader sur une partition différente de C et vous n'aurez aucun problème de ce genre

crsnape@btinternet.com:
C'est étrange.

J'ai examiné le problème du cadenas un peu plus en détail. Apparemment, il s'agit d'un problème lié aux paramètres de l'UAC (User Account Control). Je me suis donc rendu dans le panneau de configuration de Windows 7 et j'ai complètement désactivé l'UAC. Une fois que j'ai redémarré, j'ai remarqué que le cadenas avait disparu du fichier. Je l'ai ouvert et c'est le même que le fichier que j'ai posté sur ce forum. Il est complètement différent du code que j'ai écrit au cours des dernières semaines, même s'il s'agit du même fichier. J'ai cru que j'avais perdu tout mon travail de codage. J'ai réactivé l'UAC et redémarré, le cadenas était revenu et le code que j'avais écrit était redevenu normal.

Mais ensuite, j'ai essayé de compiler le code et il a détecté un tas d'erreurs. Mais les erreurs qu'il détecte ne proviennent pas de ce code, mais du code complètement différent lorsque je désactive l'UAC - je le sais parce qu'il détecte des variables qui ne sont utilisées que dans l'autre code.

Je pense que je vais devoir ouvrir un nouvel EA et taper manuellement tout ce code et le sauvegarder.
 

J'ai enfin réussi à créer un EA qui fonctionne correctement. Il fonctionne exactement comme il le devrait - j'ai fini par copier mon code dans notepad, désactiver UAC, puis le coller dans un nouveau fichier EA. Et j'ai trouvé pourquoi mes fonctions ne fonctionnaient pas - j'avais mis une variable int dans un double normalisé. Je ne savais pas que je ne pouvais pas faire ça, mais maintenant je le sais - ça ne m'a pris qu'une semaine pour le découvrir ! :/

Bref, j'ai écrit ceci :

if (VariableRisk == true) Risk = GetRiskShort (LastOpenTicket, RiskShort) ;

si (VariableRisk == false) Risk = StaticRisk ;

Et je me demandais si cela pouvait être raccourci comme ceci ?

if (VariableRisk == true)

{

Risk = GetRiskShort (LastOpenTicket, RiskShort) ;

sinon Risk = StaticRisk ;

}

Et j'ai aussi écrit ceci :

//--- Fonction de calcul de la position take profit lorsqu'elle est longue

double GetTPPriceLong (double SLPriceLong, int RiskRewardRatio, int StaticTP, bool AutoCalcTakeProfit)

{

double TPPriceLong = 0 ;

si (AutoCalcTakeProfit == true)

{

RefreshRates() ;

TPPriceLong = OrderOpenPrice() + ((OrderOpenPrice() - SLPriceLong) * RiskRewardRatio) ;

Print("Position de prise de profit calculée avec succès") ;

retourne (TPPriceLong) ;

}

if (AutoCalcTakeProfit == false)

{

RefreshRates() ;

TPPriceLong = OrderOpenPrice() + (StaticTP * 0.0001) ;

Print("Position statique de prise de profit calculée avec succès") ;

retourne (TPPriceLong) ;

}

}

Et je me demandais si on pouvait la raccourcir comme ceci ?

//--- Fonction de calcul de la position de prise de profit lorsqu'elle est longue

double GetTPPriceLong (double SLPriceLong, int RiskRewardRatio, int StaticTP, bool AutoCalcTakeProfit)

{

double TPPriceLong = 0 ;

RefreshRates() ;

si (AutoCalcTakeProfit == true)

{

TPPriceLong = OrderOpenPrice() + ((OrderOpenPrice() - SLPriceLong) * RiskRewardRatio) ;

Print("Position de prise de profit calculée avec succès") ;

else TPPriceLong = OrderOpenPrice() + (StaticTP * 0.0001) ;

Print("Position statique de prise de profit calculée avec succès") ;

retourner (TPPriceLong) ;

}

Et une dernière question, pour donner plus de flexibilité à mon EA, je veux définir mes horizons temporels comme des variables externes. Mon graphique de signal doit être D1, par exemple, et mon graphique de déclenchement doit être H4. Donc, sous variables externes, je pourrais faire ceci :

extern int SignalChart = PERIOD_D1 ;

extern int TriggerChart = PERIOD_H4 ;

Et ensuite le référencer en faisant ceci par exemple :

SlowMACurrent = iMA(Symbol(), SignalChart, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1) ;

 

A propos de cette partie :

Et ensuite le référencer en faisant ceci par exemple : SlowMACurrent = iMA(Symbol(), SignalChart, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1) ;

Oui, c'est une façon 100% correcte de l'utiliser (même au point que vous utilisez une barre fermée (shift dans cet exemple est fixé à 1) et que, en utilisant une barre fermée dans les tests, vous allez éviter le piège habituel de l'utilisation d'une barre ouverte dans un cadrage multitemporel).

crsnape@btinternet.com :
J'ai finalement réussi à créer un EA qui fonctionne correctement. Il fonctionne exactement comme il le devrait - j'ai fini par copier mon code dans notepad, désactiver l'UAC, puis le coller dans un nouveau fichier EA. Et j'ai trouvé pourquoi mes fonctions ne fonctionnaient pas - j'avais mis une variable int dans un double normalisé. Je ne savais pas que je ne pouvais pas faire ça, mais maintenant je le sais - ça ne m'a pris qu'une semaine pour le découvrir ! :/

Bref, j'ai écrit ceci :

if (VariableRisk == true) Risk = GetRiskShort (LastOpenTicket, RiskShort) ;

si (VariableRisk == false) Risk = StaticRisk ;

Et je me demandais si cela pouvait être raccourci comme ceci ?

if (VariableRisk == true)

{

Risk = GetRiskShort (LastOpenTicket, RiskShort) ;

sinon Risk = StaticRisk ;

}

Et j'ai aussi écrit ceci :

//--- Fonction de calcul de la position take profit lorsqu'elle est longue

double GetTPPriceLong (double SLPriceLong, int RiskRewardRatio, int StaticTP, bool AutoCalcTakeProfit)

{

double TPPriceLong = 0 ;

si (AutoCalcTakeProfit == true)

{

RefreshRates() ;

TPPriceLong = OrderOpenPrice() + ((OrderOpenPrice() - SLPriceLong) * RiskRewardRatio) ;

Print("Position de prise de profit calculée avec succès") ;

retourne (TPPriceLong) ;

}

if (AutoCalcTakeProfit == false)

{

RefreshRates() ;

TPPriceLong = OrderOpenPrice() + (StaticTP * 0.0001) ;

Print("Position statique de prise de profit calculée avec succès") ;

retourne (TPPriceLong) ;

}

}

Et je me demandais si on ne pouvait pas la raccourcir comme ceci ?

//--- Fonction de calcul de la position de prise de profit lorsqu'elle est longue

double GetTPPriceLong (double SLPriceLong, int RiskRewardRatio, int StaticTP, bool AutoCalcTakeProfit)

{

double TPPriceLong = 0 ;

RefreshRates() ;

si (AutoCalcTakeProfit == true)

{

TPPriceLong = OrderOpenPrice() + ((OrderOpenPrice() - SLPriceLong) * RiskRewardRatio) ;

Print("Position de prise de profit calculée avec succès") ;

else TPPriceLong = OrderOpenPrice() + (StaticTP * 0.0001) ;

Print("Position statique de prise de profit calculée avec succès") ;

retourner (TPPriceLong) ;

}

Et une dernière question, pour donner plus de flexibilité à mon EA, je veux définir mes horizons temporels comme des variables externes. Mon graphique de signal doit être D1, par exemple, et mon graphique de déclenchement doit être H4. Donc, sous variables externes, je pourrais faire ceci :

extern int SignalChart = PERIOD_D1 ;

extern int TriggerChart = PERIOD_H4 ;

Et ensuite le référencer en faisant ceci par exemple :

SlowMACurrent = iMA(Symbol(), SignalChart, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1) ;
 

Bonjour, je reçois le code d'erreur 4059 :

[TD]La fonction n'est pas autorisée en mode test.

ERR_FUNC_NOT_ALLOWED_IN_TESTING[/TD]

4059

J'ai fait une recherche mais je ne trouve pas plus d'informations sur ce que cela signifie ?

 

Pouvez-vous m'aider à ajouter les codes suivants à cet indicateur sar parabolique ?

Pip:
Merci Mladen,

Je vais relire votre message pour comprendre, honnêtement je me suis un peu perdu en le lisant mais c'est probablement mon ignorance qui joue. Je posterai des questions si j'en ai.

Merci mon ami.

Merci,

Pip

Cher ami,

Pouvez-vous m'aider à ajouter les codes suivants à cette alerte PARABOLIC SAR parabolic_alert_mod.mq4INDICATOR?

Je ne suis pas à la recherche d'un EA. Si possible, ajoutez au moins l'option SHIFT à l'indicateur.

extern double TakeProfit = 50 ;

extern double Lots = 0.1 ;

extern double TrailingStop = 30 ;

extern double SAR_Step = 0.02 ;

extern double SAR_Maximum = 0.2 ;

extern double Shift=1 ;

Dossiers :
 

...

joelnelson

TakeProfit, Lots et TrailingStop n'ont rien à voir avec la façon dont le sar parabolique est calculé (ces paramètres sont évidemment pris d'un EA utilisant le sar dans son travail). Donc, si vous ne cherchez pas un EA, il n'est pas possible d'ajouter ces paramètres de manière significative.

De plus, le décalage dans les paramètres se réfère à la barre qui est testée (le SAR parabolique n'est pas décalé comme la moyenne mobile peut l'être habituellement). Ces paramètres sont probablement destinés à un appel à un sar intégré et le sar intégré a la forme suivante

double iSAR([/TD] [TD]string symbol, int timeframe, double step, double maximum, int shift)

Shift 1 dans ce cas signifie tester la valeur de la première barre fermée du sar parabolique.

joelnelson:
Cher ami,

Pouvez-vous m'aider à ajouter les codes suivants à cette alerte PARABOLIC SAR parabolic_alert_mod.mq4INDICATOR?

Je ne suis pas à la recherche d'un EA. Si possible, ajoutez au moins l'option SHIFT à l'indicateur.

extern double TakeProfit = 50 ;

extern double Lots = 0.1 ;

extern double TrailingStop = 30 ;

extern double SAR_Step = 0.02 ;

extern double SAR_Maximum = 0.2 ;

double externe Shift=1 ;
 

...

Cette erreur peut être renvoyée par certaines fonctions.

Les fonctions qui peuvent provoquer cette erreur lors des tests sont les suivantes :

MarketInfo

MessageBox

SendFTP

SendMail

WindowIsVisible

WindowFind

WindowHandle

Ainsi, un appel à certaines des fonctions ci-dessus a provoqué cette erreur

crsnape@btinternet.com:
Bonjour, je reçois le code d'erreur 4059 :[TD]La fonction n'est pas autorisée en mode test.
ERR_FUNC_NOT_ALLOWED_IN_TESTING[/TD]4059
J'ai fait une recherche mais je n'ai pas trouvé plus d'informations sur ce que cela signifie ?