Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 739

 
Ilya Prozumentov:

Cabe ao autor descobrir isso. Melhor trazer o código da OnTick()

Entrei em contato com o autor. Eu não ajudei. Ele próprio dificilmente sabe o que fazer:"Verifique suas condições aqui eu não o ajudarei".

Posso(!) ser responsável pela minha parte do código, mas não posso ser responsável pela sua".

Aqui está o código 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:

Tente substituir

com esta linha.

Eu acho que está funcionando! Já faz 20 minutos que não há mensagem. Vamos ver como ele reage às notícias às 13h.

 
Artyom Trishkin:
O número é NaN - Não é um Número - Não é um Número. Tente normalizar os números no cálculo da contagem Z

Obrigado, isso ajudou.

Estranho queo MathCeil() não funcione. NormalizeDouble() número ajudado - == Z-score igual a -9223372036368547.77 . A figura é impressionante, mas o equilíbrio é quase inalterado




 
Alekseu Fedotov:

Tente substituir

com esta linha.

Oh, isso é ótimo! Tudo funcionava de acordo com as configurações, sem falhas. Obrigado!

Eu adoro soluções simples e códigos simples.

Obrigado também a todos que prestaram atenção e tentaram ajudar um amador completo.

 

Fixo o marcador de preço à Licitação, observo que funciona bem, mudo para outro gráfico e vejo que a coordenada vertical se desloca imediatamente em cerca de 15 pixels.

Volto, o marcador "escapou" e não está no lugar até o próximo tique, depois volta "para a pátria". Por que isso pode ser causado?




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

Fixo o marcador de preço à Licitação, observo que funciona bem, mudo para outro gráfico e vejo que a coordenada vertical se desloca imediatamente em cerca de 15 pixels.

Volto, o marcador "escapou" e não está no lugar até o próximo tique, depois volta "para a pátria". Por que isso pode ser causado?

Porque o gráfico só é redesenhado no próximo tick. Mas é perigoso definir agora o redesenho forçado da tabela. As duas construções anteriores do MT5 não eram freios infantis. Eu não sei como é no MT4, eu deveria verificar.

 
Alexey Viktorov:

A situação pode ser resolvida devido aofato de que o gráfico é traçado novamente apenas no próximo tick. Mas o redesenho forçado do gráfico é perigoso. As duas construções anteriores do MT5 eram bastante complicadas. Eu não sei como é no MT4, eu deveria verificá-lo.

Portanto, esta é uma conseqüência, não está claro o que causa a mudança.

O mesmo acontece horizontalmente e o mais desagradável é que o marcador está sobrepondo o preço, eu recortei a maior parte do código para entender a situação.

Como sair desta situação?

 
psyman:

Esta é a conseqüência, não está claro o que está causando a mudança.

O mesmo acontece horizontalmente e o mais desagradável é que o marcador está sobrepondo o preço, eu recortei a maior parte do código para entender a situação.

Como sair desta situação?

tente atualizar as coordenadas do marcador da mesma forma e no evento CHARTEVENT_CHART_CHANGE

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

Tente atualizar as coordenadas do marcador da mesma forma que o evento CHARTEVENT_CHART_CHANGE


Tentei, você tem que mover o mouse para obter a marca de volta. É a mesma muleta, mas em uma mão diferente :-)

E alternar entre gráficos paraCHARTEVENT_CHART_CHANGE não é um evento.

Alguém pode pensar em uma maneira de superar esta anomalia?

 
psyman:


Tentei, você tem que mover o mouse para obter a marca de volta. É a mesma muleta, mas em uma mão diferente :-)

E alternar entre gráficos paraCHARTEVENT_CHART_CHANGE não é um evento.

Alguém pode pensar em uma maneira de superar esta anomalia?

Inicialização de variáveis no OnInit (incluindo o redesenho de objetos)