Кто-нибудь из добрых людей подскажите как написать следующую штуку.
Сделал учебный индикатор, который считает iVolume для каждого тика: для тех что дернулись вверх iVolume положительная, а для тех что вниз - отрицательная iVolume. Чтобы получилась кривая, все iVolume (положительный и отрицательные) складываю нарастающим итогом от бара к бару. Получается кривая. Однако, я столкнулся с 2-мя проблемами:
1) линия получается сильно ломаная;
2) невозможно протестировать советник, поскольку , полученный график iVolume живет только жизнью реальной.
Вопрос:
1) как описать код, позволяющий строить график по усредненным данным, которые у меня записываются в буфер?
2) возможно ли данные по этому индикатору (которые получаются в реальном режиме) записывать в некий файл, чтобы потом, сославшись на этот файл, можно было бы построить индикатор на исторических данных, применив к ним уже собранные тиковые объемы? Если можно, то как это описать программно? Или есть иное решение, не требующее записи в файл текущей информацией iVolume?
#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: возможно ли данные по этому индикатору (которые получаются в реальном режиме) записывать в некий файл, чтобы потом, сославшись на этот файл, можно было бы построить индикатор на исторических данных, применив к ним уже собранные тиковые объемы? Если можно, то как это описать программно? Или есть иное решение, не требующее записи в файл текущей информацией iVolume?
Индикатор по данным из файла - ввел эту строку в поиске и нашел
Всем привет. Народ, окажите пожалуйста небольшую помощь. Не мог бы кто нибудь установить в индикатор строку где можно указать наименование звукового файла, чтобы строка отображалась в настройках индикатора.
Кто-нибудь из добрых людей подскажите как написать следующую штуку.
Сделал учебный индикатор, который считает iVolume для каждого тика: для тех что дернулись вверх iVolume положительная, а для тех что вниз - отрицательная iVolume. Чтобы получилась кривая, все iVolume (положительный и отрицательные) складываю нарастающим итогом от бара к бару. Получается кривая. Однако, я столкнулся с 2-мя проблемами:
1) линия получается сильно ломаная;
2) невозможно протестировать советник, поскольку , полученный график iVolume живет только жизнью реальной.
Вопрос:
1) как описать код, позволяющий строить график по усредненным данным, которые у меня записываются в буфер?
2) возможно ли данные по этому индикатору (которые получаются в реальном режиме) записывать в некий файл, чтобы потом, сославшись на этот файл, можно было бы построить индикатор на исторических данных, применив к ним уже собранные тиковые объемы? Если можно, то как это описать программно? Или есть иное решение, не требующее записи в файл текущей информацией iVolume?
Может в конце кода добавить:
double macurrent=iMAOnArray(Buf_1[0],0,5,0,MODE_LWMA,0);
Эх нет! Компилятор пишет ошибку, что мол, нет массива.
Кто-нибудь....., может помочь? Моя тупиковая для меня задача изложена здесь: https://www.mql5.com/ru/forum/160683/page378#comment_6053255
Индикатор по данным из файла - ввел эту строку в поиске и нашел
Какой-то кошмар, не понимаю почему так выдает:
Участок кода :
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));
Выводит :
EURUSD,M15: Var 0.00000
EURUSD,M15: Code 11754.00000
Что происходит со значением после присваивания?
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));
Выводит :
EURUSD,M15: Var 0.00000
EURUSD,M15: Code 11754.00000
Что происходит со значением после присваивания?
Распечатайте значения переменных после присваивания и значение переменной D. Посчитаем на калькуляторе...
Всем привет. Народ, окажите пожалуйста небольшую помощь. Не мог бы кто нибудь установить в индикатор строку где можно указать наименование звукового файла, чтобы строка отображалась в настройках индикатора.
Распечатайте значения переменных после присваивания и значение переменной D. Посчитаем на калькуляторе...
Так ведь присваемое значение я и вывожу сразу. То есть по сути код такой:
a=b;
Print (a);
Print (b);
Но a выдает равным нулю, а b выводит правильно
Так ведь присваемое значение я и вывожу сразу. То есть по сути код такой:
a=b;
Print (a);
Print (b);
Но a выдает равным нулю, а b выводит правильно
не вижу нуля, где-то вы намудрили