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

 
Ilya Prozumentov:

C'est à l'auteur de le découvrir. Mieux vaut reprendre le code de OnTick()

J'ai contacté l'auteur. Je n'ai pas aidé. Lui-même ne sait guère quoi faire :"Vérifiez vos conditions ici, je ne vous aiderai pas".

Je peux ( !) être responsable de ma partie du code, mais je ne peux pas être responsable de la vôtre".

Voici le code OnTick() :

void OnTick()
  {RefreshRates();
//---
   string TextDisplay="";

/*  Check News   */
   bool trade=true; string nstxt=""; int NewsPWR=0; datetime nextSigTime=0;
   if(MidleNews || HighNews) 
     {RefreshRates();
      if(SourceNews==0)
        {// Investing
        RefreshRates();
         if(CheckInvestingNews(NewsPWR,nextSigTime)){ trade=false; } // news time
        }
     }
   if(trade)
     {// No News, Trade enabled
      nstxt="No News, Waiting";
      if(ObjectFind(0,"NS_Label")!=-1){ ObjectDelete(0,"NS_Label"); }

        }else{// waiting news , check news power
      color clrT=LowColor;
      if(NewsPWR>3)
        {
         nstxt= "Waiting Non-farm Payrolls News";
         clrT = HighColor;
           }else{
         if(NewsPWR>2)
           {
            nstxt= "Waiting High News";
            clrT = HighColor;
              }else{
            if(NewsPWR>1)
              {
               nstxt= "Waiting Midle News";
               clrT = MidleColor;
                 }else{
               nstxt= "Waiting Low News";
               clrT = LowColor;
              }
           }
        }
      // Make Text Label
      if(nextSigTime>0){ nstxt=nstxt+" "+TimeToString(nextSigTime,TIME_MINUTES); }
      if(ObjectFind(0,"NS_Label")==-1)
        {
         LabelCreate(StringConcatenate(nstxt),clrT);
        }
      if(ObjectGetInteger(0,"NS_Label",OBJPROP_COLOR)!=clrT)
        {
         ObjectDelete(0,"NS_Label");
         LabelCreate(StringConcatenate(nstxt),clrT);
        }
     }
   nstxt="\n"+nstxt;
/*  End Check News  */ 


   if(trade && oppoz)  
     {// No news and Trade Allowed
     Fun_New_Bar();
            
      if(New_Bar)      
     { 
      Alert("Открыть позицию"); ManageTrade(); // Your trade functions
     }
     oppoz=false;
     }

   TextDisplay=TextDisplay+nstxt;
   Comment(TextDisplay);

   return;
  }
 
Alekseu Fedotov:

Essayez de remplacer

avec cette ligne.

Je pense que ça marche ! Il n'y a pas eu de message depuis 20 minutes maintenant. Nous verrons comment il réagit à la nouvelle à 13 heures.

 
Artyom Trishkin:
Le nombre est NaN - Not a Number - Pas un nombre. Essayez de normaliser les chiffres dans le calcul du score Z.

Merci, ça m'a aidé.

Il est étrange queMathCeil() ne fonctionne pas. NormalizeDouble() nombre aidé - == Z-score égal = -92233720368547.77 . La figure est impressionnante, mais l'équilibre est presque inchangé.




 
Alekseu Fedotov:

Essayez de remplacer

avec cette ligne.

Oh, c'est génial ! Tout a fonctionné conformément aux paramètres, sans aucune défaillance. Merci !

J'aime les solutions simples et les codes simples.

Merci également à tous ceux qui ont prêté attention et essayé d'aider un parfait amateur.

 

J'attache le marqueur de prix au Bid, j'observe que cela fonctionne bien, je passe à un autre graphique et je constate que la coordonnée verticale se déplace immédiatement d'environ 15 pixels.

Je reviens en arrière, le marqueur s'est "échappé" et n'est pas en place jusqu'au prochain tick, puis il retourne "à la mère patrie". A quoi cela peut-il être dû ?




//+------------------------------------------------------------------+
//|                                              !_clr_indicator.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window


string objname="Bid";
input color Bid_color = clrCrimson;

int OnInit()
  {

int x,y;
double Bid = SymbolInfoDouble(Symbol(), SYMBOL_BID);
int width = (int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);  //ширина графика

   ObjectCreate(0, objname, OBJ_LABEL,0, 0, 0);
   
   ObjectSetString(0, objname, OBJPROP_TEXT, DoubleToString(Bid, _Digits-1));
   ObjectSetInteger(0, objname, OBJPROP_FONTSIZE, 12);
   ObjectSetInteger(0, objname, OBJPROP_COLOR, Bid_color);
   ObjectSetString(0, objname, OBJPROP_FONT, "Verdana");

   ChartTimePriceToXY(0, 0, TimeCurrent(), Bid, x, y); 
   ObjectSetInteger(0, objname, OBJPROP_XDISTANCE, width-60);

   Print("y=", y, "  ", ObjectGetInteger(0,objname,OBJPROP_TIME,0));

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {


int x2,y2;
double Bid2 = SymbolInfoDouble(Symbol(), SYMBOL_BID);


           ChartTimePriceToXY(0, 0, TimeCurrent(), Bid2, x2, y2); 
      
        ObjectSetInteger(0, objname, OBJPROP_YDISTANCE, y2);

   Print("x2=", x2, "  y2=", y2, "  ", "  Bid=",Bid2);

   return(rates_total);
  }


void OnDeinit(const int reason) 
   { 

      ObjectDelete(0,objname);
   } 
 
 
 
psyman:

J'attache le marqueur de prix au Bid, j'observe que cela fonctionne bien, je passe à un autre graphique et je constate que la coordonnée verticale se déplace immédiatement d'environ 15 pixels.

Je reviens en arrière, le marqueur s'est "échappé" et n'est pas en place jusqu'au prochain tick, puis il retourne "à la mère patrie". A quoi cela peut-il être dû ?

Parce que le graphique n'est redessiné qu'au prochain tick. Mais il est dangereux de mettre en place un redécoupage forcé du graphique maintenant. Les deux précédentes versions de MT5 n'étaient pas des freins infantiles. Je ne sais pas comment c'est dans MT4, je devrais vérifier.

 
Alexey Viktorov:

La situation peut être résolue par lefait que le graphique n'est redessiné que lors du prochain tick. Mais le redécoupage forcé de la carte est dangereux. Les deux versions précédentes de MT5 étaient plutôt compliquées. Je ne sais pas comment cela se passe dans MT4, je devrais le vérifier.

C'est la conséquence, on ne sait pas exactement ce qui provoque ce changement.

La même chose se produit horizontalement et le plus désagréable est que le marqueur chevauche le prix, j'ai coupé la majeure partie du code pour comprendre la situation.

Comment se sortir de cette situation ?

 
psyman:

Il s'agit d'une conséquence, la cause de ce changement n'est pas claire.

La même chose se produit horizontalement et le plus désagréable est que le marqueur chevauche le prix, j'ai coupé la plupart du code pour comprendre la situation.

Comment se sortir de cette situation ?

essayez de mettre à jour les coordonnées des marqueurs de la même manière et dans l'événement CHARTEVENT_CHART_CHANGE

if(id==CHARTEVENT_MOUSE_MOVE || id==CHARTEVENT_CHART_CHANGE)
 
Ilya Prozumentov:

Essayez de mettre à jour les coordonnées du marqueur de la même manière que l'événement CHARTEVENT_CHART_CHANGE.


J'ai essayé, il faut bouger la souris pour récupérer la marque. C'est la même béquille, mais dans une autre main :-)

Et le passage d'un graphique à l'autre pourCHARTEVENT_CHART_CHANGE n'est pas un événement.

Quelqu'un peut-il penser à un moyen de surmonter cette anomalie ?

 
psyman:


J'ai essayé, il faut bouger la souris pour récupérer la marque. C'est la même béquille, mais dans une autre main :-)

Et le passage d'un graphique à l'autre pourCHARTEVENT_CHART_CHANGE n'est pas un événement.

Quelqu'un peut-il penser à un moyen de surmonter cette anomalie ?

Initialisation des variables dans OnInit (y compris le redécoupage des objets).

Raison: