Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 52
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Que faire si le stop/stop est de 200
mais
tp=NormalizeDouble((price+(TakeProfit*_Point)),Digits) ;
sur un dollar-yen rapportera 317.000 au taux de change de 117.000
résultat attendu 117.200
Si Point()==0.001 (sur USDJPY), alors 200*0.001 est égal à 0.2
Maintenant, si nous ajoutons 0,2 à 117,0, nous obtenons 117,2.
Où est l'"injustice" ?
Si Point()==0.001 (sur USDJPY), alors 200*0.001 est égal à 0.2
Maintenant, si nous ajoutons 0,2 à 117,0, nous obtenons 117,2.
Et où est l'"injustice" ?
il est prévu que 117+(200*_Point) donne 117.200
il est normalement testé sur l'EURUSD
Vitaly l'a décrit ci-dessus, merci.
Je crois que je l'ai trouvé.
Je pense que c'est assez bon comme algorithme intermédiaire et maintenant il est nécessaire de filtrer ces moments d'une manière ou d'une autre.
https://www.mql5.com/ru/charts/6351907/audjpy-m5-metaquotes-software-corp
117+(200*_Point) devrait donner une sortie de 117.200
...Eh bien, c'est ce qu'il donne... Je vous ai montré le calcul. Ou bien vous avez plusieurs devises et vous prenez les données d'un symbole "non natif" ?
Utilisez ensuite SymbolInfoDouble( ) et (int)SymbolInfoInteger() au lieu de Point() et Digits().
Eh bien, c'est ce qu'il donne... Je vous ai montré le calcul. Ou bien vous avez une monnaie multiple, et vous prenez les données d'un symbole "non-natif" ?
Au lieu de Point() et Digits() , utilisez SymbolInfoDouble() et (int)SymbolInfoInteger().
Merci, ça marche)))
Je suis actuellement à la recherche d'un moyen d'insérer un stop suiveur dans une chaîne d'ordres.
J'ai 10 ordres par pas de 200 de 115.000 à 117.000.
Chaque lot est plus grand d'une valeur x que le précédent.
l'objectif est de mettre un stop suiveur sur toute la chaîne d'ordres en utilisant le calcul suivant (prix moyen)+(y*_Point)
J'ai un stop suiveur. Ma question est de savoir comment le rattacher au prix moyen de toute la pile et comment il est calculé en fonction des lots.
Merci, ça marche))))
Actuellement, je cherche un moyen d'insérer le suivi dans une chaîne d'ordres.
J'ai 10 ordres par pas de 200 de 115.000 à 117.000.
Chaque lot est plus grand d'une valeur x que le précédent.
l'objectif est de mettre un stop suiveur sur toute la chaîne d'ordres en utilisant le calcul suivant (prix moyen)+(y*_Point)
J' ai un trailing stopper lui-même ; la question est de savoir comment l'attacher au prix moyen de toute la pile et comment il est calculé en fonction des lots.
Un conseil universel : apprenez à programmer à partir de zéro. Alors vous n'aurez pas de telles questions, la programmation n'est pas une tâche facile.
Et pour en venir à l'essentiel de la question : il faut donc passer en revue TOUS les ordres en boucle, en ne sélectionnant que les "nécessaires" et les modifier. Mais vous devez être très prudent avec cela, car la probabilité de remplacer l'ordre sélectionné pour travailler est très élevée.
Un conseil universel : apprenez à programmer à partir de zéro. Alors il n'y aura pas de telles questions, la programmation n'est pas facile.
Et pour en venir à l'essentiel de la question : il faut donc passer en revue TOUS les ordres dans la boucle, ne sélectionner que les "nécessaires" et les modifier. Mais il faut être très prudent avec cette question, car la probabilité de remplacer l'ordre choisi pour travailler est très élevée.
Bonjour à tous, j'ai écrit un EA basé sur les MAs. (J'ai moi-même commencé à écrire en MQL4 il n'y a pas si longtemps, j'ai donc décidé de commencer par quelque chose de simple. Alors je voulais savoir ce que j'avais fait de mal. L'essence de l'Expert Advisor est simple : donner une alerte lorsque deux ou trois MAs sont franchies (selon la MÉTHODE : Agressif = franchissement de deux MAs, conservateur = franchissement de 3 MAs) ... C'est tout. Je vais entrer sur le marché par mes propres moyens. Dans mon conseiller expert, j'ai prescrit deux fonctions : Agressif - il s'agit d'un signal au simple croisement de deux MA les plus rapides et Conservateur - lorsqu'au croisement de deux MA rapides, vous devez également considérer la plus lente (c'est-à-dire le signal dans le sens de la tendance). Le problème est que le conseiller expert ne donne qu'UNE seule alerte (lorsqu'il démarre ou change de période) et reste muet sur tous les signaux suivants ! Je vous serais reconnaissant si vous me disiez ce qui ne va pas. J'ai prescrit la fonction pour tous les événements selon les règles de MQL4. Bien sûr, je pourrais tout enregistrer sans fonctions dans l'événement On Tick, mais je veux enregistrer les fonctions séparément, afin que lesfonctions puissent être facilementappelées et je veux ajouter de nouvelles fonctions "filtres" avec le temps.
Code
================================================================================================
extern bool Metod=false ; // sélection de la méthode : Conservative ou Aggressive.
extern int Time_Frame=1;//trame temporelle
input bool Metod=false ; //Conservateur-TRUE | Agressif-FALSE
extern inttern FastMA_Parametr=5 ;
extern int intMA_Parametr=8 ;
extern int SlowMA_Parametr=18 ;
extern inttern TrendMA=163 ;
extern bool DemarkGo=false ;
extern inttern Demperiod=4 ;
int rez;// si la MA croise vers le bas, rez=-1. si vers le haut, rez=1.
//+------------------------------------------------------------------+
// Initialiser MA
double FastMA=iMA(Symbol(),Time_Frame,FastMA_Parametr,0,3,0,0);// FastMA
double MiddiMA=iMA(Symbol(),Time_Frame,MidMA_Parametr,0,3,0,0);// Moyenne MA
double SlowMA=iMA(Symbol(),Time_Frame,SlowMA_Parametr,0,1,0,0) ; Slow MA
//+------------------------------------------------------------------+
int OnInit()
{
rez=0 ;
return(INIT_SUCCEEDED) ;
}
//=======================================
//------------------------------------------------------------------------------
void OnDeinit(const int reason)
{
}
//=============================================
//+---------------------Fonction pour le signal Konservative if Metod=true---------------------------------------------+
int Konservative()
//Chercher un croisement à la hausse de 3 lignes
{
si (Metod==vrai)
{
if(FastMA>MiddiMA&&MiddiMA>SlowMA&&rez<=0)
{
Alert(Symbol(),Time_Frame,"----Up----. Conservateur") ;
rez=1 ;
Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez) ;
retour(rez) ;
}
//Vérifier le croisement à la baisse de 3 lignes
si(FastMA<MiddiMA&&MiddiMA<SlowMA&&rez>=0)
{
Alert(Symbol(),Time_Frame," ---- DOWN----. Conservateur") ;
rez=-1 ;
Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez) ;
retour(rez) ;
}
}
retour(rez) ;
}
//=================================================
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Fonction agressive si
int Agressif()
// Vérifier le croisement à la hausse de 2 lignes sans ralentissement.
{
si (Metod==false)
{
si(FastMA>MiddiMA&&rez<=0)
{
Alert(Symbol(),Time_Frame,"----Up----. agressif") ;
rez=1 ;
Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez) ;
}
//Check for downward crossover of 2 lines without a slow line
si(FastMA<MiddiMA&&rez>=0)
{
Alert(Symbol(),Time_Frame," ---- DOWN----. Agressif") ;
rez=-1 ;
Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez) ;
}
}
retour(rez) ;
}
Ce n'est pas élevé, mais à 100 %. Pour le moment, c'est la dernière commande et les autres sont en pause, mais le schéma n'est pas précis et j'aimerais qu'il soit meilleur.
Non, pas à 100%. Ou peut-être que vous parlez de quelque chose d'autre.
En général, l'algorithme est le suivant :
Vous mettez en place une boucle pour passer en revue toutes les commandes.
Vous sélectionnez l'ordre suivant pour travailler avec lui.
Vous vérifiez si cet ordre est nécessaire... Si non, l'itération suivante de la boucle...
Si elle est "nécessaire", vérifiez si elle peut être modifiée. Il suffit de comparer la distance qui le sépare de son niveau StopLoss.
Si la distance est suffisante, l'ordre est modifié.
Ainsi, si vous avez une fonction de modification avec une boucle sur tous les ordres, et qu'avant son appel, la boucle fonctionne également, alors l'ordre sélectionné sera modifié...
Non, pas à 100%. Ou peut-être que vous parlez de quelque chose d'autre.
En général, l'algorithme est le suivant :
Vous mettez en place une boucle pour passer en revue toutes les commandes.
Vous sélectionnez l'ordre suivant pour travailler avec lui.
Vous vérifiez si cet ordre est nécessaire... Si non, l'itération suivante de la boucle...
Si elle est "nécessaire", vérifiez si elle peut être modifiée. Il suffit de comparer la distance qui le sépare de son niveau StopLoss.
S'il est suffisamment éloigné, l'ordre est modifié.
Ainsi, si vous avez une fonction de modification avec une boucle sur tous les ordres, et qu'avant son appel, la boucle fonctionne également, alors l'ordre sélectionné sera modifié...