Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 52

 
trader781:

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" ?

 
Artyom Trishkin:

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

График AUDJPY, M5, 2017.01.02 22:49 UTC, MetaQuotes Software Corp., MetaTrader 4, Demo
График AUDJPY, M5, 2017.01.02 22:49 UTC, MetaQuotes Software Corp., MetaTrader 4, Demo
  • www.mql5.com
Символ: AUDJPY. Период графика: M5. Брокер: MetaQuotes Software Corp.. Торговая платформа: MetaTrader 4. Режим торговли: Demo. Дата: 2017.01.02 22:49 UTC.
 
trader781:

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().

 
Artyom Trishkin:

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.

 
trader781:

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.

 
Alexey Viktorov:

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.

En ce moment, je travaille sur le dernier et les autres sont en pause, mais le schéma est imprécis et j'aimerais faire mieux.
 

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

}

 
Олег:


Ici, je pense que vous pouvez le faire vous-même.
Dossiers :
6645.mq4  7 kb
 
trader781:
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é...

 
Alexey Viktorov:

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é...

Le fait est qu'il y aura TOUJOURS des ordres perdants avec un certain lot, qui devront également être exécutés au détriment des autres. Le déclencheur est l'heure de fermeture. Si nous en fermons ne serait-ce qu'un, toute la chaîne sera perdue. Par conséquent, la question est de savoir comment rechercher le prix moyen de tous ceux qui ont été sélectionnés.