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

 

Alguém pode gentilmente me dizer como escrever a seguinte coisa.

Eu fiz um indicador de treinamento, que conta iVolume para cada tick: iVolume é positivo para aqueles que subiram, e iVolume é negativo para aqueles que desceram. Para fazer uma curva, todo iVolume (positivo e negativo) eu adiciono um total crescente de barra a barra. Uma curva é obtida. No entanto, eu encontrei dois problemas:

1) a linha fica muito quebrada;

2) é impossível testar o Expert Advisor, porque o gráfico iVolume obtido tem apenas uma vida real.

Pergunta:

1) como descrever o código que permite construir um gráfico baseado em dados médios que eu escrevo no buffer?

2) É possível escrever os dados deste indicador (que são recebidos no modo real) em um determinado arquivo, para que mais tarde, referindo-se a este arquivo, possamos construir o indicador sobre os dados históricos, aplicando a eles os volumes de tick já coletados? Se possível, como descrevê-lo programticamente? Ou existe outra solução que não requer a escrita das informações atuais do iVolume em um arquivo?

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

Talvez adicionar no final do código:

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

Eh, não! O compilador gera o erro dizendo que não há matriz.


 
Olá, você pode me dizer o que significam os pontos de exclamação na torradeira estratégica?
Arquivos anexados:
 

Qualquer pessoa....., você pode ajudar? O meu beco sem saída para mim está exposto aqui:https://www.mql5.com/ru/forum/160683/page378#comment_6053255

 
YarTrade: é possível escrever os dados deste indicador (que é obtido em modo real) em um arquivo, para que mais tarde, referindo-se a este arquivo, seja possível construir um indicador sobre dados históricos, aplicando a ele os volumes de carrapatos já coletados? Se possível, como descrevê-lo programticamente? Ou existe outra solução que não requer a escrita das informações atuais do iVolume no arquivo?

Indicador baseado em dados de arquivo - digite esta linha na busca e encontrei

 

Algum tipo de pesadelo, eu não entendo por que ele é assim:
seção 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


O que acontece com o valor após a atribuição?

 
LuckySith:   Seção de 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

O que acontece com o valor após a atribuição?

Imprimir o valor das variáveis após a atribuição e o valor da variável D. Use sua calculadora para fazer as contas.

 

Olá a todos. Pessoal, vocês poderiam nos ajudar um pouco? Alguém poderia definir uma linha no indicador onde você pode especificar o nome do arquivo de som, para que a linha seja exibida nas configurações do indicador.

Arquivos anexados:
Awesome-33.ex4  16 kb
 
STARIJ:

Imprimir os valores das variáveis após a atribuição e o valor da variável D. Vamos calculá-lo em uma calculadora...


Portanto, imprimo o valor da variável após a atribuição. Portanto, o código é basicamente o seguinte:


a=b;

Imprimir (a);

Imprimir (b);

Mas a é igual a zero e b é impresso corretamente

 
LuckySith:

É assim que eu produzo o valor que está sendo atribuído. Portanto, o código é essencialmente o seguinte:


a=b;

Imprimir (a);

Imprimir (b);

Mas a é igual a zero enquanto b é impresso corretamente


Eu não vejo zero, você cometeu um erro em algum lugar

   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)); 
Razão: