Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 739

 
Ilya Prozumentov:

Es ist Sache des Autors, das herauszufinden. Bringen Sie besser den Code von OnTick()

Ich habe den Autor kontaktiert. Ich habe nicht geholfen. Er selbst weiß kaum, was er tun soll:"Prüfen Sie Ihre Bedingungen, ich werde Ihnen nicht helfen".

Ich mag(!) für meinen Teil des Codes verantwortlich sein, aber ich kann nicht für Ihren verantwortlich sein".

Hier ist der 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:

Versuchen Sie zu ersetzen

mit dieser Zeile.

Ich glaube, es klappt! Seit 20 Minuten gibt es keine Nachricht mehr. Mal sehen, wie er um 13 Uhr auf die Nachrichten reagiert.

 
Artyom Trishkin:
Die Zahl ist NaN - Not a Number - Keine Zahl. Versuchen Sie, die Zahlen in der Z-Zahl-Berechnung zu normalisieren

Danke, das hat geholfen.

Seltsam, dassMathCeil() nicht funktioniert. NormalizeDouble() number half - == Z-score ist gleich = -92233720368547.77 . Die Figur ist großartig, aber die Bilanz ist fast unverändert




 
Alekseu Fedotov:

Versuchen Sie zu ersetzen

mit dieser Zeile.

Oh, das ist großartig! Alles funktionierte entsprechend den Einstellungen, keine Ausfälle. Ich danke Ihnen!

Ich liebe einfache Lösungen und einfache Codes.

Danke auch an alle, die aufgepasst und versucht haben, einem absoluten Amateur zu helfen.

 

Ich hänge den Kursmarker an den Bid an, stelle fest, dass er gut funktioniert, wechsle zu einem anderen Diagramm und sehe, dass sich die vertikale Koordinate sofort um etwa 15 Pixel verschiebt.

Ich gehe zurück, der Marker ist "entkommen" und steht erst beim nächsten Tick wieder an seinem Platz, dann kehrt er "ins Mutterland" zurück. Was kann die Ursache dafür sein?




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

Ich hänge den Kursmarker an den Bid an, stelle fest, dass er gut funktioniert, wechsle zu einem anderen Diagramm und sehe, dass sich die vertikale Koordinate sofort um etwa 15 Pixel verschiebt.

Ich gehe zurück, der Marker ist "entkommen" und steht erst beim nächsten Tick wieder an seinem Platz, dann kehrt er "ins Mutterland" zurück. Was kann die Ursache dafür sein?

Denn das Diagramm wird erst beim nächsten Tick neu gezeichnet. Aber es ist gefährlich, jetzt eine erzwungene Neuzeichnung des Diagramms einzustellen. Die beiden Vorgängerversionen von MT5 waren keine kindischen Bremsen. Ich weiß nicht, wie es in MT4 ist, ich sollte es überprüfen.

 
Alexey Viktorov:

Die Situation kann dadurch gelöst werden, dass das Diagramm erst beim nächsten Tick neu gezeichnet wird. Aber die erzwungene Neuzeichnung des Diagramms ist gefährlich. Die beiden Vorgängerversionen von MT5 waren ziemlich kompliziert. Ich weiß nicht, wie es in MT4 ist, ich sollte es überprüfen.

Dies ist die Folge, wobei nicht klar ist, was die Ursache für die Verschiebung ist.

Das Gleiche passiert horizontal und das Unangenehmste ist, dass die Markierung den Preis überlappt. Ich habe den größten Teil des Codes herausgeschnitten, um die Situation zu verstehen.

Wie kommt man aus dieser Situation heraus?

 
psyman:

Dies ist die Folge, wobei nicht klar ist, was die Ursache für die Verschiebung ist.

Das Gleiche passiert horizontal und das Unangenehmste ist, dass die Markierung den Preis überlappt. Ich habe den größten Teil des Codes herausgeschnitten, um die Situation zu verstehen.

Wie kommt man aus dieser Situation heraus?

Versuchen Sie, die Koordinaten der Marker auf dieselbe Weise und im Ereignis CHARTEVENT_CHART_CHANGE zu aktualisieren.

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

Versuchen Sie, die Markierungskoordinaten auf die gleiche Weise zu aktualisieren wie das Ereignis CHARTEVENT_CHART_CHANGE


Ausprobiert, man muss die Maus bewegen, um die Markierung zurückzubekommen. Es ist die gleiche Krücke, nur in einer anderen Hand :-)

Und der Wechsel zwischen Diagrammen beiCHARTEVENT_CHART_CHANGE ist kein Ereignis.

Fällt jemandem eine Möglichkeit ein, diese Anomalie zu überwinden?

 
psyman:


Ausprobiert, man muss die Maus bewegen, um die Markierung zurückzubekommen. Es ist die gleiche Krücke, nur in einer anderen Hand :-)

Und der Wechsel zwischen Diagrammen beiCHARTEVENT_CHART_CHANGE ist kein Ereignis.

Fällt jemandem eine Möglichkeit ein, diese Anomalie zu überwinden?

Initialisierung von Variablen in OnInit durchführen (einschließlich Neuzeichnen von Objekten)

Grund der Beschwerde: