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

 

¿Puede alguien decirme cómo escribir lo siguiente?

Hice un indicador de entrenamiento, que cuenta iVolume para cada tick: iVolume es positivo para los que se movieron hacia arriba, y iVolume es negativo para los que se movieron hacia abajo. Para hacer una curva, todo el iVolumen (positivo y negativo) lo sumo aumentando el total de barra a barra. Se obtiene una curva. Sin embargo, me encontré con dos problemas:

1) la línea resulta muy rota;

2) es imposible probar el Asesor Experto, porque el gráfico iVolume obtenido sólo tiene una vida real.

Pregunta:

1) ¿cómo describir el código que permite construir un gráfico basado en los datos promediados que escribo en el buffer?

2) ¿Es posible escribir los datos de este indicador (que se reciben en el modo real) en un archivo determinado, para que después, refiriéndose a este archivo, podamos construir el indicador sobre los datos históricos, aplicándoles los volúmenes de ticks ya recogidos? Si es posible, ¿cómo describirlo programáticamente? ¿O hay otra solución que no requiera escribir la información actual del iVolume en un archivo?

#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_label1  "Вверх"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Salmon
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

#property indicator_label2  "Вниз"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrDarkTurquoise
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2

datetime Время=0;   // Время прошлого бара
double Bid1;
double   Buf_1[];
long V1; // объем для текущего тика вверх
long V2; // накопленный объем для всех тиков вверх текущего бара
long V3; // объем текущего тика вниз
long V4; // накопленный объем для всех тиков вниз для текущего бара
long V5;  // отрицательные и положительные iVolume нарастающим итогом

void OnInit()
{
   IndicatorDigits(0);
   SetIndexBuffer(0,Buf_1);
   //SetIndexBuffer(1,Buf_2);
   Bid1=Bid;
   V5 = 0;
  
   
}
 
 
//+------------------------------------------------------------------+
//| 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[])
{
   datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
//      Buf_1[0]=0;         // и обнулить последний элемент буфера
   }
   
      
   if(Bid >= Bid1) 
{
   if(Bid > Bid1) 
{   
   V1 = iVolume(NULL, 0, 0); // если повышающий цену тик
   V2 = V1 + V2;
}
  else
{
   V1 = 0;                // если Bid1 = Bid2, т.е. изменение цены = 0, то iVolume этого тика присваиваем 0;
   V2 = V1 + V2;      
}               
}              
   else 
{
   V3 = iVolume(NULL, 0, 0); // если понижающий цену тик 
   V4 = V3 + V4;
}
  
   V5 = V2-V4;
   Bid1=Bid;
   Buf_1[0]= V5; // в буфер сгружаем 
  
   
  return(rates_total);
}
 

Tal vez añadir al final del código:

double macurrent=iMAOnArray(Buf_1[0],0,5,0,MODE_LWMA,0);

¡Eh, no! El compilador genera el error diciendo que no hay ningún array.


 
Hola, ¿podríais decirme qué significan los signos de exclamación en la tostadora de la estrategia?
Archivos adjuntos:
 

Anyone....., ¿puede ayudar? Mi callejón sin salida para mí se expone aquí:https://www.mql5.com/ru/forum/160683/page378#comment_6053255

 
YarTrade: ¿es posible escribir los datos de este indicador (que se obtienen en modo real) en un archivo, para que después, refiriéndose a este archivo, sea posible construir un indicador sobre datos históricos, aplicando a éste los volúmenes de ticks ya recogidos? Si es posible, ¿cómo describirlo programáticamente? ¿O hay otra solución que no requiera escribir la información actual de iVolume en el archivo?

Indicador basado en datos de un archivo - introdujo esta línea en la búsqueda y encontró

 

Una especie de pesadilla, no entiendo por qué da así:
Sección del código :


line[0]=MathFloor(Low[1]*MathPow(10,D-1));
Print("Var ",DoubleToStr(line[0],D));
Print("Code ",DoubleToStr(MathFloor(Low[1]*MathPow(10,D-1)),D));

Output :

EURUSD,M15: Var 0.00000
EURUSD,M15: Código 11754.00000


¿Qué ocurre con el valor después de la asignación?

 
LuckySith:   Sección del código :

line[0]=MathFloor(Low[1]*MathPow(10,D-1));
Print("Var ",DoubleToStr(line[0],D));
Print("Code ",DoubleToStr(MathFloor(Low[1]*MathPow(10,D-1)),D));

Print :

EURUSD,M15: Var 0.00000
EURUSD,M15: Código 11754.00000

¿Qué ocurre con el valor después de la asignación?

Imprime el valor de las variables después de la asignación y el valor de la variable D. Utiliza tu calculadora para hacer las cuentas.

 

Hola a todos. Amigos, ¿podrían ayudarnos un poco? ¿Podría alguien poner una línea en el indicador donde se pueda especificar el nombre del archivo de sonido, para que la línea se muestre en la configuración del indicador?

Archivos adjuntos:
Awesome-33.ex4  16 kb
 
STARIJ:

Imprime los valores de las variables después de la asignación y el valor de la variable D. Calculémoslo en una calculadora...


Así que imprimo el valor de la variable después de la asignación. Así que el código es básicamente el siguiente:


a=b;

Imprime (a);

Imprimir (b);

Pero a es igual a cero y b se imprime correctamente

 
LuckySith:

Así es como emito el valor que se asigna. Así que el código es esencialmente el siguiente:


a=b;

Imprime (a);

Imprimir (b);

Pero a es igual a cero mientras que b se imprime correctamente


No veo el cero, te has equivocado en alguna parte

   int D=5;
   double a=MathFloor(Low[1]*MathPow(10,D-1)); 
   Print("Var ",DoubleToStr(a,D)); 
   Print("Code ",DoubleToStr(MathFloor(Low[1]*MathPow(10,D-1)),D));