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

 
Como sei que não háOBJ_RECTANGLE em barras N?
 
neverness:

Alguma coisa realmente mudou no MT5?

Não existe tal coisa nem no mt4 nem no mt5.

No mt5 há até um bug com a exibição do separador no período atual, em horários acima de H2

 
Ghabo:
Como sei que não háOBJ_RECTANGLE em barras N?
Tente desta forma, talvez?
  int n = Bars(Symbol(), PERIOD_CURRENT, ObjectGetInteger(0,"Rectangle",OBJPROP_TIME,1), TimeCurrent());
  Print(n);
 
Vitaly Muzichenko:

Não existe tal coisa nem no mt4 nem no mt5.

No mt5 há até um erro ao mostrar o separador no período atual, em tempos acima de H2

Finalmente, vi a única "resposta construtiva" à minha pergunta em toda esta "discussão".

Quanto aos erros, eles estão presentes em todas as semanas de separação no quadro atual (último), tanto no MT4 como no MT5.

Em todos os lugares na última semana, o separador MT4/MT5 desenha o separador 7 dias em vez de 5.

Mas não é essa a questão. Os erros sempre foram e sempre serão. Tudo isso pode ser corrigido se houver um código de programa para delimitadores de desenho.

Não são os erros que me surpreendem, é algo completamente diferente.

Ninguém pensou em escrever um programa para desenhar delimitadores na área prevista durante todo o tempo de existência do MT4/MT5?

Afinal de contas, o programa é o mais simples.

Tudo o que você precisa saber é a posição do último divisor e "solução" de tempo ao longo do eixo X (ou seja, qual intervalo de tempo leva 1 pixel).

E até agora ninguém jamais ????

Agora isso realmente me surpreende.

Mais uma vez terei que fazer tudo sozinho.

 
Igor Makanu:

Não é difícil, mas você parece não entender como funcionam os indicadores na MT e quais são suas vantagens

Você provavelmente está certo.

Há uma anedota matemática:

Um matemático é perguntado: "Como se ferve água em uma chaleira?

O matemático responde: Pegue uma chaleira vazia, despeje água nela, coloque a chaleira no fogão, ligue o fogão e espere que a água ferva.

- OK. Mas e se a chaleira já estiver cheia? - pergunta o matemático.

- Despeje a água da chaleira e resolva o problema da maneira acima. - responde o matemático.

Então, aí está.

Esta piada é sobre você.

 
neverness:

Esta piada é sobre você.

hmm, não sei se devo sorrir ou .... Se você conhece um terminal comercial que satisfaça todos os seus caprichos, qual é o objetivo? estou 100% satisfeito com o MT4/5, posso fazer tudo com ele, manter o indicador que desenha os períodos D1 no gráfico, se você se interessa pela programação, modificá-lo de acordo com suas necessidades... Acho que você não será capaz de fazer isso ....

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot line1
#property indicator_label1  "Period"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
#property indicator_label2  "Period"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrRed
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- input parameters
input int      Days=3;
//--- indicator buffers
double         Pmax[],Pmin[];
bool run=true;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Pmax);
   SetIndexBuffer(1,Pmin);
   run=true;
   switch(_Period)
     {
      case PERIOD_M1:   SetIndexShift(0,1440*Days);SetIndexShift(1,1440*Days);   break;
      case PERIOD_M5:   SetIndexShift(0,288*Days); SetIndexShift(1,288*Days);    break;
      case PERIOD_M15:  SetIndexShift(0,96*Days);  SetIndexShift(1,96*Days);     break;
      case PERIOD_M30:  SetIndexShift(0,48*Days);  SetIndexShift(1,48*Days);     break;
      case PERIOD_H1:   SetIndexShift(0,24*Days);  SetIndexShift(1,24*Days);     break;
      case PERIOD_H4:   SetIndexShift(0,6*Days);   SetIndexShift(1,6*Days);      break;
      default: run=false; SetIndexShift(0,0); SetIndexShift(1,0);ArrayInitialize(Pmax,EMPTY_VALUE);ArrayInitialize(Pmin,EMPTY_VALUE); break;
     }
//---
   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[])
  {
//---
   if(prev_calculated==0)
     {
      run=true;
      ArrayInitialize(Pmax,EMPTY_VALUE);
      ArrayInitialize(Pmin,EMPTY_VALUE);
     }
   if(run)
     {
      int i=0,lastperiod=TimeDay(time[0]);
      double maxvalue;
      if(!ChartGetDouble(ChartID(),CHART_PRICE_MAX,0,maxvalue)) maxvalue=1000.0;
      maxvalue*=10.0;
      while(i<rates_total)
        {
         if(TimeDay(time[i])!=lastperiod)
           {
            lastperiod=TimeDay(time[i]);
            Pmax[i-1]=maxvalue;
            Pmin[i-1]=0.0;
           }
         else
           {
            Pmax[i]=EMPTY_VALUE;
            Pmin[i]=EMPTY_VALUE;
           }
         i++;
        }
      run=false;
     }
//---
   return(rates_total);
  }
//+------------------------------------------------------------------+
Gráfico EURUSD.e, H1, 2018.11.09 13:11 UTC, RoboForex (CY) Ltd, MetaTrader 4, Demonstração


já experimentei e não sei por que, não sei por que, é a primeira vez que o vejo assim, parece que inicializo os amortecedores quando troco os prazos

 
neverness:

Finalmente, vi a única "resposta construtiva" à minha pergunta em toda esta "discussão".

Quanto aos erros, eles estão presentes em todas as semanas de separação no quadro atual (último), tanto no MT4 como no MT5.

Em todos os lugares na última semana, o separador MT4/MT5 desenha o separador 7 dias em vez de 5.

Mas não é essa a questão. Os erros sempre foram e sempre serão. Tudo isso pode ser corrigido se houver um código de programa para delimitadores de desenho.

Não são os erros que me surpreendem, é algo completamente diferente.

Ninguém pensou em escrever um programa para desenhar delimitadores na área prevista durante todo o tempo de existência do MT4/MT5?

Afinal de contas, o programa é o mais simples.

Tudo o que você precisa saber é a posição do último divisor e "solução" de tempo ao longo do eixo X (ou seja, qual intervalo de tempo leva 1 pixel).

E até agora ninguém jamais ????

Agora isso realmente me surpreende.

Mais uma vez, você terá que fazer tudo sozinho.

Eu lhe disse - já o fiz mais de uma vez. (e no mercado, e em mais de um indicador)

e você disse que já escreveu o código, você vai escrevê-lo novamente?)

 
Igor Makanu:

hmm, eu não sei se devo sorrir ou .... Se você conhece um terminal comercial que satisfaça todos os seus caprichos, qual é o objetivo? Estou 100% satisfeito com o MT4/5, posso fazer tudo com ele, manter o indicador que desenha os períodos D1 no gráfico, interessar-me pela programação, modificá-lo de acordo com suas necessidades... Acho que você não será capaz de fazer isso ....


Eu não saberia por que, é a primeira vez que eu vejo um bicho assim.

Obrigado, é claro.

Como eu suspeitava, em dias incompletos, seus separadores de período não correspondem aos padrões.

Mas isso realmente não importa, porque não acho que você deva tentar redesenhar os separadores padrão, mas sim atracar os separadores de área de previsão para os separadores de história.

Então a posição dos delimitadores do dia de história incompleta não afetará os delimitadores de previsão.

Outra diferença importante entre seu indicador e os delimitadores padrão é que os delimitadores padrão são atualizados em cada evento no próprio gráfico, mas seu indicador é atualizado em cada evento OnCalculate(). Pensei que isto seria perceptível - mas na verdade, dificilmente é perceptível.

É claro que este indicador deve ser redesenhado, mas obrigado de qualquer forma. Foi interessante de se ver.

 
Ghabo:

Isto acaba sendo o índice da barra do objeto com o nome especificado. Existe mais de um objeto e seu nome é "QUADRO "+Time[i+1] Como sei que não existe tal objeto em dez barras?

Está claro com o buffer, se o valor estiver vazio nada é mostrado na tabela, mas e o objeto?

if (ObjectFind(0,"QUADRO"+Time[10])<0)
        {
        //объекта нет на 10 баре
        }
 
Vitaly Muzichenko:
Posso tentar desta forma?
  int n = Bars(Symbol(), PERIOD_CURRENT, ObjectGetInteger(0,"Rectangle",OBJPROP_TIME,1), TimeCurrent());

Obrigado. Isto acaba sendo o índice de barras (120983) do objeto com o nome especificado. Existe mais de um objeto e seu nome é "QUADRO "+Time[i+1] Como sei que não existe tal objeto em dez barras?

Eu entendo com o buffer, se o valor estiver vazio nada é mostrado na tabela, mas e o objeto?