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_buffers2#property indicator_label1"Вверх"#property indicator_type1DRAW_LINE#property indicator_color1 Salmon
#property indicator_style1STYLE_SOLID#property indicator_width12#property indicator_label2"Вниз"#property indicator_type2DRAW_LINE#property indicator_color2clrDarkTurquoise#property indicator_style2STYLE_SOLID#property indicator_width22datetime Время=0; // Время прошлого бараdouble Bid1;
double Buf_1[];
long V1; // объем для текущего тика вверхlong V2; // накопленный объем для всех тиков вверх текущего бараlong V3; // объем текущего тика внизlong V4; // накопленный объем для всех тиков вниз для текущего бараlong V5; // отрицательные и положительные iVolume нарастающим итогомvoidOnInit()
{
IndicatorDigits(0);
SetIndexBuffer(0,Buf_1);
//SetIndexBuffer(1,Buf_2);
Bid1=Bid;
V5 = 0;
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &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);
}
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
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.
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?
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.
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
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?
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.
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
É 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