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

 
Taras Slobodyanik:

Fazer a inicialização das variáveis no OnInit (incluindo o redesenho de objetos)


Explique do que se trata.

Adicionei-o ao OnInit depois de criar uma etiqueta

    ObjectSetInteger(0, objname, OBJPROP_YDISTANCE, y);
    ChartRedraw();


Mas o resultado é o mesmo.

 
psyman:


Explique do que se trata.

Adicionei-o ao OnInit depois de criar a tag


mas o resultado é o mesmo.

precisam ver o código, o que está lá...

ps. o código acima funciona bem (não vejo nenhuma falha)
(https://www.mql5.com/ru/forum/160683/page739#comment_10290585)


oops. embora eu tenha substituído a variável Bid por Bid0

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
  • 2019.01.17
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
Boa tarde, como escrever o pedido para ser aberto quando o preço toca um muvingiano?
 
Ivan Rozhkov:
Boa tarde, como escrever o pedido para ser aberto quando o preço toca um muvingiano?
if ((prev_bid>ma && curr_bid<=ma) || (prev_bid<ma && curr_bid>=ma))
   //открывается ордер
 
Taras Slobodyanik:

Tenho que olhar o código para ver o que está lá...

ps. O código acima funciona bem (sem falhas)
(https://www.mql5.com/ru/forum/160683/page739#comment_10290585)


oops. embora eu tenha substituído a variável Bid por Bid0

Esqueci de acrescentar que este é o meu teste em 5. No MT4, o marcador vertical se move rapidamente quando se abre a tabela, sem necessidade de esperar por um tique ou mover o mouse. Algumas vezes houve falhas com deslocamento horizontal, conseguindo superar somente recompilando o indicador.

 
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?


Print exibe uma mensagem para mim se eu trocar uma janela de gráficos, tanto para frente como para trás (estou no MT4, mas não está escrito nos documentos MT4 que a troca de gráficos pode ser capturada como um eventoCHARTEVENT_CHART_CHANGE)

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
  if(id==CHARTEVENT_CHART_CHANGE) Print("graph");
}

Mas sim, ainda é um método de muleta. Precisamos descobrir porque a coordenada Y é diferente ao mudar para outra tabela. Mas olhando para o código, podemos concluir que oChartTimePriceToXY dá resultados diferentes por alguma razão.

 
psyman:

Esqueci de acrescentar que estou testando isto em 5. No MT4 o marcador vertical realmente se move rapidamente no lugar quando o gráfico é aberto, sem necessidade de esperar por um tique ou mover o mouse. Algumas vezes houve falhas com deslocamento horizontal, conseguindo superar somente recompilando o indicador.

Bem, em Cinco há muitas "características" - desde a fila no gráfico até a criação de barras a partir dos minutos, e o acionamento do deinit anterior após o atual)

Portanto, você precisa verificar as barras/gráficos/objetos - em que ponto ocorre um erro e corrigi-lo.

 
Taras Slobodyanik:


em geral - você precisa verificar as barras/gráficas/objetos - em que ponto ocorre um erro e corrigi-lo.


Como fazer isso, por onde começar?

 
psyman:


Como fazer isso, por onde começar?

fazer uma impressão em qualquer lugar, ou seja, imprimimos a oferta (você também pode imprimir a data atual) no oninit e, em seguida, no cálculo também...
Posso telepatizar que a história não se acumula imediatamente e as barras aparecem mais tarde

 
Taras Slobodyanik:

fazer uma impressão em todos os lugares, ou seja, em oninit imprimir a oferta (você também pode imprimir a data atual) e depois, ao calcular também...
Eu telepathize que esta história não tem tempo para construir imediatamente e as barras aparecem mais tarde

Para o próximo código, uma história em fotos:

//+------------------------------------------------------------------+
//|                                              !_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 Bid0 = SymbolInfoDouble(Symbol(), SYMBOL_BID);
int width = (int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);  //ширина графика



        Print("1 Bid0 = ", Bid0,  " x = ", x, " y = ", y," TimeCurrent()=", TimeCurrent() );

   ObjectCreate(0, objname, OBJ_LABEL,0, 0, 0);
   
   ObjectSetString(0, objname, OBJPROP_TEXT, DoubleToString(Bid0, _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(), Bid0, x, y);
        Print("2 Bid0 = ", Bid0,  " x = ", x, " y = ", y," TimeCurrent()=", TimeCurrent() );
         
        ObjectSetInteger(0, objname, OBJPROP_XDISTANCE, width-60);

   ObjectSetInteger(0, objname, OBJPROP_YDISTANCE, y);

   

   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[])
  {

return(rates_total);

  }

void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam) 
  { 

int x2,y2;
double Bid2 = SymbolInfoDouble(Symbol(), SYMBOL_BID);
double  cprice;
datetime ctime;
int      cwindow=0;



if(id==CHARTEVENT_CHART_CHANGE) 
   {
   



           ChartTimePriceToXY(0, 0, TimeCurrent(), Bid2, x2, y2); 
      
      Print("5 Bid2 = ", Bid2,  " x2 = ", x2, " y2 = ", y2," TimeCurrent2()=", TimeCurrent() );
      
        ObjectSetInteger(0, objname, OBJPROP_YDISTANCE, y2);
   
   ChartXYToTimePrice(0,x2,x2,cwindow, ctime, cprice);
   

   }



  }



void OnDeinit(const int reason) 
   { 

      ObjectDelete(0,objname);
   } 
 
 


Desconectou a rede, adicionando um indicador

Passo para o próximo gráfico


y2 mudou de valor, eu volto atrás


y2 devolveu seu valor, mas o marcador é contado pelo valor "ido"! Eu giro a roda do mouse.

O marcador está de volta em seu lugar!

Razão: