Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 739

 
Ilya Prozumentov:

Sta all'autore capirlo. Meglio portare il codice da OnTick()

Ho contattato l'autore. Non ho aiutato. Lui stesso non sa quasi cosa fare:"Controlla le tue condizioni qui non ti aiuterò".

Posso(!) essere responsabile della mia parte di codice, ma non posso essere responsabile della tua".

Ecco il codice 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:

Prova a sostituire

con questa linea.

Credo che stia funzionando! Non ci sono messaggi da 20 minuti. Vediamo come reagisce alla notizia alle 13:00.

 
Artyom Trishkin:
Il numero è NaN - Not a Number - Non un numero. Prova a normalizzare i numeri nel calcolo del conteggio Z

Grazie, mi ha aiutato.

Strano cheMathCeil() non funzioni. NormalizeDouble() numero aiutato - == Z-score uguale = -92233720368547.77 . La figura è impressionante, ma l'equilibrio è quasi invariato




 
Alekseu Fedotov:

Prova a sostituire

con questa linea.

Oh, è fantastico! Tutto ha funzionato secondo le impostazioni, nessun guasto. Grazie!

Amo le soluzioni semplici e i codici semplici.

Grazie anche a tutti coloro che hanno prestato attenzione e hanno cercato di aiutare un completo dilettante.

 

Attacco il marcatore di prezzo al Bid, osservo che funziona bene, passo a un altro grafico e vedo che la coordinata verticale si sposta immediatamente di circa 15 pixel.

Torno indietro, il marcatore è "fuggito" e non è al suo posto fino al prossimo tick, poi torna "in patria". Da cosa può essere causato?




//+------------------------------------------------------------------+
//|                                              !_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:

Attacco il marcatore di prezzo al Bid, osservo che funziona bene, passo a un altro grafico e vedo che la coordinata verticale si sposta immediatamente di circa 15 pixel.

Torno indietro, il marcatore è "fuggito" e non è al suo posto fino al prossimo tick, poi torna "in patria". Da cosa può essere causato?

Perché il grafico viene ridisegnato solo al prossimo tick. Ma è pericoloso impostare il ridisegno forzato del grafico ora. Le due build precedenti di MT5 non erano freni infantili. Non so come sia in MT4, dovrei controllare.

 
Alexey Viktorov:

La situazione può essere risolta grazie alfatto che il grafico viene ridisegnato solo al prossimo tick. Ma il ridisegno forzato del grafico è pericoloso. Le due precedenti build di MT5 erano piuttosto complicate. Non so come sia in MT4, dovrei controllare.

Questa è la conseguenza, non è chiaro cosa stia causando lo spostamento.

La stessa cosa succede orizzontalmente e la cosa più sgradevole è che il marcatore si sovrappone al prezzo, ho tagliato la maggior parte del codice per capire la situazione.

Come uscire da questa situazione?

 
psyman:

Questa è una conseguenza, non è chiaro cosa stia causando lo spostamento.

La stessa cosa succede orizzontalmente e la cosa più sgradevole è che il marcatore si sovrappone al prezzo, ho tagliato la maggior parte del codice per capire la situazione.

Come uscire da questa situazione?

provare ad aggiornare le coordinate dei marker nello stesso modo e nell'evento CHARTEVENT_CHART_CHANGE

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

Prova ad aggiornare le coordinate del marcatore nello stesso modo dell'evento CHARTEVENT_CHART_CHANGE


Provato, devi muovere il mouse per riavere il marchio. È la stessa stampella, ma in una mano diversa :-)

E il passaggio tra i grafici perCHARTEVENT_CHART_CHANGE non è un evento.

Qualcuno può pensare a un modo per superare questa anomalia?

 
psyman:


Provato, devi muovere il mouse per riavere il segno. È la stessa stampella, ma in una mano diversa :-)

E il passaggio tra i grafici perCHARTEVENT_CHART_CHANGE non è un evento.

Qualcuno può pensare a un modo per superare questa anomalia?

Fare l'inizializzazione delle variabili in OnInit (incluso il ridisegno degli oggetti)