Une question pour les experts MQL - page 3

 
Merci, granit77
 
granit77:

Oui, un peu comme ça, si on considère que le nom de l'indicateur est hilo.mq4 :

extern int iR=3;
extern int SignalBar=1;
//.......
//---получение значения  HighBuffer 
double buy =  iCustom( NULL,0, "hilo",
                      iR,
                      0, // № буффера
                      SignalBar ); // № бара    
 
//---получение значения  LowBuffer
double sell =  iCustom( NULL,0, "hilo",
                      iR,
                      1, // № буффера
                      SignalBar ); // № бара

Petit problème. Le conseiller de l'indicateur fonctionne. Mais.... Seulement avec la mise en œuvre de transactions courtes !

c'est-à-dire au tampon numéro=1 et aux valeurs sur le zéro et la première barre

if  (   (sell_0>Bid)  &&   (sell_1<=Bid))

l'état à vendre fonctionne parfaitement.

Mais le conseiller expert ne veut pas acheter ! Je ne comprends pas ce qui ne va pas ! Je pense avoir défini la condition correctement. Numéro de la mémoire tampon = 0.

(  (buy0>=Ask)  &&      (buy1<Ask)  )

N'achète pas ! Ou bien il achète très rarement et à la "lumière" !

Bien que les lignes de l'indicateur sur le graphique en mode visuel semblent être construites correctement !


Quel peut être le problème ici ?

 
rid:
granit77:

Oui, un peu comme ça, si on considère que le nom de l'indicateur est hilo.mq4 :

extern int iR=3;
extern int SignalBar=1;
//.......
//---получение значения  HighBuffer 
double buy =  iCustom( NULL,0, "hilo",
                      iR,
                      0, // № буффера
                      SignalBar ); // № бара    
 
//---получение значения  LowBuffer
double sell =  iCustom( NULL,0, "hilo",
                      iR,
                      1, // № буффера
                      SignalBar ); // № бара

Petit problème. Le conseiller de l'indicateur fonctionne. Mais.... Seulement avec la mise en œuvre de transactions courtes !

c'est-à-dire au tampon numéro=1 et aux valeurs sur le zéro et la première barre

if  (   (sell_0>Bid)  &&   (sell_1<=Bid))

l'état à vendre fonctionne parfaitement.

Mais le conseiller expert ne veut pas acheter ! Je ne comprends pas ce qui ne va pas ! Je pense avoir défini la condition correctement. Numéro de la mémoire tampon = 0.

(  (buy0>=Ask)  &&      (buy1<Ask)  )

N'achète pas ! Ou bien il achète très rarement et à la "lumière" !

Bien que les lignes de l'indicateur sur le graphique en mode visuel semblent être construites correctement !


Quel peut être le problème ici ?

Cette question m'intéresse également)).

 

En travaillant avec l'indicateur personnalisé, j'ai remarqué cela :


// так РАБОТАЕТ !!!
int FATLsB=iCustom(NULL,0,"FATLs",0,0);
int FATLsS=iCustom(NULL,0,"FATLs",1,0);

// а вот так НЕТ ...
double FATLsB=iCustom(NULL,0,"FATLs",0,0);
double FATLsS=iCustom(NULL,0,"FATLs",1,0);


// если потом в коде есть сранвнение с 0 или 1, например
if (FATLsB==1) {CloseSell(); SetBuy(); }
 
kombat:

En travaillant avec l'indicateur personnalisé, j'ai remarqué cela :


// так РАБОТАЕТ !!!
int FATLsB=iCustom(NULL,0,"FATLs",0,0);
int FATLsS=iCustom(NULL,0,"FATLs",1,0);

// а вот так НЕТ ...
double FATLsB=iCustom(NULL,0,"FATLs",0,0);
double FATLsS=iCustom(NULL,0,"FATLs",1,0);


// если потом в коде есть сранвнение с 0 или 1, например
if (FATLsB==1) {CloseSell(); SetBuy(); }

Dans le premier cas, il y a une conversion vers le type int cible avant l'opération d'affectation. Par conséquent, la condition de comparaison fonctionne correctement.

Dans le second cas, nous devons arrondir les nombres à virgule flottante à une précision spécifiée avant la comparaison en utilisant la fonction

NormalizeDouble(double value, int digits)



 

Désolé...

Mon exemple ci-dessus est basé sur une erreur.

Ce qui était que l'affectation était sur le prix retraçable par l'indicateur FATLs.

Je ne l'ai pas remarqué sur l'EURUSD et j'ai confondu les "flèches qui apparaissent" avec les taureaux 0 et 1.


Cependant, cette variante a corrigé la situation :


bool FATLsB=iCustom(NULL,0,"FATLs",0,0)>0;
bool FATLsS=iCustom(NULL,0,"FATLs",1,0)>0;
//--- открытие БАЙ закрытие СЕЛЛ ------------------
   if (FATLsB==1 && TotalBuy()==0) {CloseSell(); SetBuy(); }
 

Bonjour à tous !

Veuillez me conseiller.

Supposons que j'ai une MA lente et une MA rapide croisées sur le graphique. Sur la première mesure.

Laissez-le ensuite passer quelques mesures de plus.

Comment puis-je déterminer sur quelle barre les derniers МА ont été franchis ?

-----------------------------

Je ne peux même pas réfléchir - comment dois-je aborder le problème ?

 
Rita:

Supposons que j'ai une MA lente et une MA rapide qui se croisent sur le graphique. Sur la première mesure.

Supposons que quelques mesures supplémentaires se soient écoulées après.

Comment puis-je déterminer sur quelle barre dans le passé le dernier franchissement de la MA donnée a eu lieu ?

Quelle est la différence fondamentale pour vous ? Le croisement sur la première barre peut être visualisé/surveillé de la même manière que sur n'importe quelle autre barre. Vous créez une boucle (par exemple, de la barre zéro aux barres) où vous examinez les valeurs des barres et les analysez. Je ne comprends pas l'intérêt de la question.....
 

J'ai besoin de savoir sur le bar actuel.

Combien de barres se sont écoulées depuis le dernier croisement des deux barres - MA_1 et MA_2.

Comment organiser une boucle comme celle-ci ?

si (MA_1>MA_2) {

 
Rita:

J'ai besoin de savoir sur le bar actuel.

Combien de barres se sont écoulées depuis le dernier croisement de deux MA_1 MA_2.

Comment faire ce cycle ?

aller de la barre actuelle au moment où la MA change de place. et compter.
Raison: