[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 132

 
Roll:

MERCI BEAUCOUP !

Votre version de l'indicateur fonctionne !

J'ai essayé de les résoudre avec le tutoriel MQL4 et les exemples révisés d'indicateurs, mais rien n'a fonctionné.

Si vous avez le désir, le temps et l'envie de m'aider à comprendre pourquoi :

1. Lorsque vous installez l'indicateur ligne reçoit une valeur de 0 (zéro) et seulement avec l'arrivée du premier tick prend la valeur de la variable top, ou devrait ouvrir la fenêtre des paramètres et la fermer immédiatement ;

2. Le paramètre top est calculé au 4ème signe, bien qu'il y ait la ligne suivante dans init()

IndicateurDigits(Digits+1) ;

et la ligne

top=WindowPriceMax(win_idx) ;

Je l'ai remplacé par

top=NormalizeDouble((WindowPriceMax(win_idx)),Digits+1) ;

Ça ne sert à rien ! Et les valeurs numériques de l'échelle de la fenêtre de l'indicateur sont de 5 chiffres.

3. Avec la suppression de l'indicateur, Commentaire n'est pas supprimé du graphique.



Code

--------

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
double ExtMapBuffer1[],
ExtMapBuffer2[];
//--------------------------------
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
IndicatorShortName("MACD_max-min_v2");

IndicatorDigits(Digits+1);

return(0);
}
//--------------------------------
int deinit()
{

return(0);
}
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted(),limit,win_idx;
double top;

if(counted_bars>0)counted_bars--;
limit=Bars-counted_bars;
win_idx=WindowFind("MACD_max-min_v2");

for(int i=0;i<limit;i++)
{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);
}

// top=WindowPriceMax(win_idx);
top=NormalizeDouble((WindowPriceMax(win_idx)),Digits+1);
Comment( "\n"," top = ",top);
ObjectDelete("max");

if(ObjectFind("max")!=win_idx)
{
ObjectCreate("max",OBJ_HLINE,win_idx,Time[0],top);
ObjectSet("max",OBJPROP_COLOR,Yellow);
ObjectSet("max",OBJPROP_WIDTH,0);
}

return(0);
}
//+------------------------------------------------------------------+


Dossiers :
 
MK07:

Correction technique - utilisez le bouton SRC sur le panneau supérieur pour insérer du code, comme le font vos conseillers. Il sera beaucoup plus facile à lire.

P.S.
pour effacer la ligne de commentaire, insérez Commentaire(") dans deinit() ;
 
granit77:
Correction technique - utilisez le bouton SRC sur le panneau supérieur pour insérer du code, comme le font vos conseillers. Il sera beaucoup plus facile à lire.

P.S.
Pour effacer la ligne de commentaire, insérez Commentaire(") dans deinit() ;
Merci pour ces informations, c'est la première fois que je viens sur les forums, et un MERCI tout particulier pour le bout de code.
 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
double ExtMapBuffer1[],ExtMapBuffer2[];
int init(){SetIndexStyle(0,DRAW_LINE);SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);SetIndexBuffer(1,ExtMapBuffer2);
IndicatorShortName("MACD_max-min");return(0);}
int deinit(){Comment("");return(0);}
//+------------------------------------------------------------------+
int start(){int counted_bars=IndicatorCounted(),limit,win_idx;double top;
if(counted_bars>0)counted_bars--;limit=Bars-counted_bars;win_idx=WindowFind("MACD_max-min");
for(int i=0;i<limit;i++){ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
  ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);}
  top=WindowPriceMax(win_idx);ObjectDelete("max");
  if(ObjectFind("max")!=win_idx){ObjectCreate("max",OBJ_HLINE,win_idx,Time[0],top);
  ObjectSet("max",OBJPROP_COLOR,Yellow);ObjectSet("max",OBJPROP_WIDTH,0);}
  Comment( "\n"," top = ",DoubleToStr(top,5));return(0);}
//+------------------------------------------------------------------+
 
https://docs.mql4.com/ru/common/Comment
void Comment(. ...)
Cette fonction imprime un commentaire défini par l'utilisateur dans le coin supérieur gauche du graphique. Les paramètres peuvent être de n'importe quel type. Le nombre de paramètres ne peut pas dépasser 64.
Les tableaux ne peuvent pas être passés à Comment(). Les tableaux doivent être imprimés élément par élément.
Les données de type double sont imprimées avec 4 chiffres décimaux après le point.. Pour obtenir des chiffres plus précis, utilisez DoubleToStr().
Les types bool, datetime et color seront imprimés sous forme de nombres.
Pour produire des données de type date-heure sous forme de chaîne, utilisez la fonction TimeToStr().

Pour diviser la sortie en plusieurs lignes, vous pouvez utiliser le caractère de saut de ligne "\n" ou "\r\n".
Voir également Alert() et Print().
 
Pouvez-vous me dire comment écrire :
Le prix a traversé la ligne horizontale vers le haut....
Et comment décrire cette ligne ?
 
Roll:
Merci pour la science.
 

Bonjour,

Voici le problème que je rencontre.

Travail sur PERIOD_H1.

Pour fermer à la fin de l'heure, je fais ceci :

   for(j = OrdersTotal()-1; j >= 0; j--){ 
       if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES))
          if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber){
            OpenTime= OrderOpenTime();          
          if(OrderType() == OP_BUY){
            if(TimeCurrent()>Time[0]+3580){ 
             OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),0,Red);}
             }
           else 
          if(OrderType() == OP_SELL){
            if(TimeCurrent()>Time[0]+3580){
             OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),0,Blue);}
             }
           }
         }
Pour ouvrir une position au début de l'heure, je fais ce qui suit
   if(TimeCurrent()<Time[0]+3500 && HaveBuy==false && HaveSell==false)
     if(Ask <= EnBuy && IsFreeLevel==true){
          ticket = OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),0,0,forecast-5*MyPoint,"",MagicNumber,0,Blue);
         }
     if(Bid >= EnSel && IsFreeLevel==true){
          ticket = OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),0,0,forecast+5*MyPoint,"",MagicNumber,0,Red);
         }

Mais pour le test, cela se passe comme suit

Je n'arrive pas à comprendre où je me trompe.

Cela ne se passe pas toujours comme ça, mais il y a des moments comme ça.

Merci à ceux qui répondront :).

 
alsu:
Je ne dis pas ça, je dis quelle différence cela fait-il de savoir où l'EA est attaché ? S'il est écrit correctement, l'endroit où il est placé ne fait aucune différence - il suffit de le placer sur un graphique du change mongol, mais s'il est configuré pour fonctionner sur EURUSD 1 minute, il le fera. Et il n'est pas difficile de le programmer, il suffit de changer quelques lignes.

Merci beaucoup pour cette clarification !

Je suis seulement préoccupé par le fait que le testeur simule des barres d'une minute pour des modifications à l'ouverture de chaque barre d'une minute.

Je vais essayer de changer Open[0] en iOpen(NULL,1,0) et ajouter une fonction pour vérifier l'ouverture de la barre d'une minute.

Quelques minutes se sont écoulées, pendant lesquelles j'ai retouché le code et l'ai essayé avec le testeur à M5 en m'assurant que dans ce cas le testeur n'ouvre pas de barres de 1 minute, pourtant prescrites, et ne le modifie que toutes les 5 minutes, ce que je craignais. En mode tous ticks, il est un peu meilleur, car il modifie plus souvent. Mais sur M1 seulement, à l'ouverture de la barre, cela fonctionne de la même façon, à la fois avec Open[0] et avec iOpen(NULL,1,0), ce dont je suis toujours reconnaissant !

Maintenant, je vais toujours utiliser l'iOpen vert, car je vois que je peux me passer de l'Open rouge. Le bénéfice vert est plus agréable que la perte rouge. ( :))

 
mario065:

Bonjour,

Voici le problème que je rencontre.

Travail sur PERIOD_H1.

Pour fermer à la fin de l'heure, je fais ceci :

Pour ouvrir une position au début de l'heure, je fais ceci
Mais pour le test, cela se passe comme suit

Je n'arrive pas à comprendre où je me trompe.

Cela ne se passe pas toujours comme ça, mais il y a des moments comme ça.

Merci, qui répond :)


Un ami m'a donné un conseil :
Au lieu de TimeCurrent()

TimeSeconds(TimeCurrent())

Et ça a marché.

Raison: