Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 433

 
Alekseu Fedotov:

Es tan sencillo como eso.

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));

Es así.


Alekseu Fedotov, por desgracia, no es así. Obtienes el número de barra con TF y luego usas el mismo TF, pero necesitas otro (este es el problema). Necesitamos obtener el número de barra con TF (por ejemplo 30) y luego obtener la MA con TF (1440), a partir de esta barra con TF 30. Es como si ahora (14.30) quisieras obtener la MA con TF 1440. Ahora bien, no es un problema, pero trasladarlo a hace un par de días, sí lo es.

 
STARIJ:
Sí. Deberíamos usar M1, y M5, .... - para comprobarlo. ¿Tal vez usar la interpolación? mt5 tiene un historial de ticks. Si me dices dónde está el beneficio, le echaré otro vistazo.

Tengo que hacer el análisis técnico a posteriori, como si ocurriera ahora, y ver el resultado. Esto es como si ayer hiciera el análisis técnico de la MA con el TF 1d a las 14.30 y hoy obtuviera los resultados del movimiento del precio por la MA de ayer. Si hoy utilizo el TF 1440 y miro desde el punto de vista de ayer, los datos del análisis técnico serán diferentes, y por lo tanto se debe esperar que los resultados sean diferentes.

 
Roman Sharanov:

Ayuda, necesito dibujar un rectángulo desde el máximo de la vela anterior hasta un punto 200p por encima de ella y el tiempo de una barra por delante.

He escrito el código, pero no entiendo por qué el punto izquierdo del rectángulo no se mueve? El derecho se desliza detrás del hai.

Comportamiento inesperado de la función... Antes, cuando intentaba crear un objeto con el nombre de uno ya existente, se devolvía un error y el objeto no cambiaba los parámetros existentes por otros nuevos. Pero ahora, aparentemente, se hicieron cambios y cada vez que se modifica high[0] o aparece una nueva barra, high[1] ya tiene un valor diferente y uno de los parámetros cambia al crear un nuevo rectángulo.

La solución es muy sencilla: comprobar la existencia del objeto antes de crearlo.

 
STARIJ:

Se mueve



No, no voy a dibujar nada con este código

 
Roman Sharanov: No, no dibuja nada con este código.

Mira todo mi archivo.

Archivos adjuntos:
PR.mq4  3 kb
 
STARIJ:

Mira mi archivo


Oh, ya veo, tienes MQL4 :)
Hice arrays por series de tiempo y funcionó, aún no entiendo por qué no me funcionó

 
Boss11: Tengo que hacer el análisis técnico a posteriori, como si ocurriera ahora, y ver el resultado. Es decir, como si ayer hiciera un análisis técnico de la MA con el TF 1d a las 14.30 y hoy obtuviera los resultados del movimiento del precio por la MA de ayer. Si hoy utilizo el TF 1440 y miro desde el punto de vista de ayer, los datos del análisis técnico serán diferentes, y por lo tanto se debe esperar que los resultados sean diferentes.

Con el TF 1440 todo está claro. pero con el M1 como has escrito hay un gran margen de error?

 
STARIJ:

Con el TF 1440 todo está claro. pero con el M1 como has escrito gran error?


No lo he probado con M1, pero creo que el margen de error será menor. M1->M5 será más preciso que M30-> 1d

 

Por favor, aclare la respuesta a una pregunta concreta. Estoy rehaciendo el Bollinger.

Cambiado un par de líneas, no dibuja barras. ¿Qué es, logaritmos?

Fórmula de volatilidad 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--;
     }
Archivos adjuntos:
 

Por favor, dígame cómo eliminar un objeto gráfico. Hay líneas verticales cuyos nombres se construyen a partir de los valores de las variables.

string name=="test1"; string Vertline="line_"+name; ObjectCreate(0,VertLine,OBJ_VLINE,0,time,cena); ¿Cómo puedo borrar sólo las líneas verticales con el nombre test1?

Razón de la queja: