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

 
Alekseu Fedotov:

É tão simples quanto isso.

void OnStart()
  {
// Формируем время  
   Alert("14.30  позавчерашнего дня = ",StrToTime(TimeToStr(iTime(NULL,1440,2),TIME_DATE)+" "+"14:30"));

//14.30  позавчерашнего дня
   datetime time=StrToTime(TimeToStr(iTime(NULL,1440,2),TIME_DATE)+" "+"14:30");

//Бар 14.30  позавчерашнего дня
   int     shift=iBarShift(NULL,0,time);

//Машка 14.30  позавчерашнего дня  
   double ma=iMA(NULL,0,13,0,MODE_SMMA,PRICE_MEDIAN,shift);

   Alert("Машка 14.30  позавчерашнего дня = ",DoubleToString(ma,Digits));

É assim.


Alekseu Fedotov, Infelizmente, não é isso. Você obtém o número da barra com o TF e depois usa o mesmo TF, mas você precisa de outro (este é o problema). Precisamos obter o número da barra com TF (por exemplo 30) e depois obter o MA com TF (1440), a partir desta barra com TF 30. É como se você agora (14,30) quisesse obter MA com TF 1440. Agora - não é um problema, mas transferi-lo para alguns dias atrás, isso é um problema.

 
STARIJ:
Sim. Devemos usar M1, e M5, .... - para verificar. Talvez usar interpolação? mt5 tem um histórico de carrapatos. Se você me informar onde está o lucro, eu darei outra olhada.

Preciso fazer a análise técnica retrospectivamente como se estivesse acontecendo agora e olhar para o resultado. Isso é como se eu fiz análise técnica de MA com TF 1d às 14h30 de ontem e hoje recebi os resultados da movimentação de preços pelo MA de ontem. Se eu usar o TF 1440 hoje e olhar do ponto de vista de ontem, os dados da análise técnica serão diferentes e, portanto, os resultados devem ser diferentes.

 
Roman Sharanov:

Ajuda, preciso tirar um retângulo da altura da vela anterior até um ponto 200p acima dela e cronometrar uma barra à frente.

Eu escrevi o código, mas não entendo porque o ponto esquerdo do retângulo não se move? O direito desliza por trás do hai.

Comportamento inesperado da função... Anteriormente, quando tentei criar um objeto com o nome de um já existente, um erro foi devolvido e o objeto não mudou os parâmetros existentes para novos parâmetros. Mas agora, aparentemente, foram feitas mudanças e cada vez que a altura[0] é alterada ou uma nova barra aparece, a altura[1] já tem um valor diferente e um dos parâmetros muda ao criar um novo retângulo.

A saída é muito simples: verificar a existência do objeto antes de criá-lo.

 
STARIJ:

Ele se move



Não, eu não estou desenhando nada com este código.

 
Roman Sharanov: Não, ele não desenha nada com este código.

Veja o meu arquivo completo.

Arquivos anexados:
PR.mq4  3 kb
 
STARIJ:

Dê uma olhada em meu arquivo


Oh, estou vendo, você tem MQL4 :)
Fez matrizes por séries de tempo e funcionou, eu ainda não entendo porque não funcionou para mim

 
Boss11: Preciso fazer a análise técnica retrospectivamente como se estivesse acontecendo agora e olhar para o resultado. Isto é, como se eu tivesse feito uma análise técnica do MA com TF 1d às 14h30 de ontem e hoje eu obtive os resultados da movimentação de preços pelo MA de ontem. Se eu usar o TF 1440 hoje e olhar do ponto de vista de ontem, os dados da análise técnica serão diferentes e, portanto, os resultados devem ser diferentes.

Com TF 1440 tudo está claro. mas com M1 como você escreveu, há uma grande margem de erro?

 
STARIJ:

Com TF 1440 tudo está claro. mas com M1 como você escreveu um grande erro?


Ainda não tentei com M1, mas acho que a margem de erro será menor. M1->M5 será mais preciso que M30-> 1d

 

Por favor, informe sobre a resposta a uma pergunta específica. Estou refazendo o Bollinger.

Mudou um par de linhas, não desenha barras. O que é isso, logaritmos?

Fórmula de volatilidade a partir de https://research-journal.org/economical/analiz-razlichnyx-metodov-ocenki-istoricheskoj-volatilnosti-dlya-opcionnoj-torgovli/

int start()
  {
   int    i,k,counted_bars=IndicatorCounted();
   double deviation;
   double sum,oldval,newres,oldpos;
//----
   if(Bars<=BandsPeriod) return(0);
//---- initial zero
   if(counted_bars<1)
      for(i=1;i<=BandsPeriod;i++)
        {
         MovingBuffer[Bars-i]=EMPTY_VALUE;
         UpperBuffer[Bars-i]=EMPTY_VALUE;
         LowerBuffer[Bars-i]=EMPTY_VALUE;
        }
//----
   int limit=Bars-counted_bars;
   if(counted_bars>0) limit++;
   for(i=0; i<limit; i++)
      MovingBuffer[i]=iMA(NULL,0,BandsPeriod,BandsShift,MODE_EMA,PRICE_WEIGHTED,i);
//----
   i=Bars-BandsPeriod+1;
   if(counted_bars>BandsPeriod-1) i=Bars-counted_bars-1;
   while(i>=0)
     {
      sum=0.0;
      k=i+BandsPeriod-1;
      oldval=MovingBuffer[i];
      oldpos=i;
      while(k>=i)
        {
         //newres=Close[k]-oldval;
         //sum+=newres*newres;
          sum+=log(fabs(High[k]/Close[k]))*log(fabs(High[k]/Open[k]))+log(fabs(Low[k]/Close[k]))*log(fabs(Low[k]/Open[k]));
         k--;
        }
      deviation=BandsDeviations*MathSqrt(fabs(sum/BandsPeriod));
      UpperBuffer[i]=oldval+deviation;
      LowerBuffer[i]=oldval-deviation;
      i--;
     }
Arquivos anexados:
 

Por favor, diga-me como apagar um objeto gráfico. Existem linhas verticais cujos nomes são construídos a partir de valores variáveis.

string name==="test1"; string Vertline="line_"+name; ObjectCreate(0,VertLine,OBJ_VLINE,0,time,cena); Como posso apagar somente as linhas verticais com o nome test1?

Razão: