Скрипт очень хороший, но мне бы больше хотелось, чтобы данные шли в excel напрямую, через RTD сервер, чтобы использовать RDTR функцию excel. Планируется ли у вас что-то подобное?
Jose Luis Perez Navarro: Скрипт очень хорош, но мне бы больше хотелось, чтобы данные поступали в excel напрямую, через сервер RTD, чтобы использовать функцию RDTR excel. Есть ли у вас что-то подобное на примете?
Спасибо за работу. К сожалению, когда я запускаю скрипт, файл не создается. Я обновил скрипт, чтобы он записывался в C:/temp/. Когда я запускаю в отладке, я вижу, что имя файла правильное и я не получаю никаких ошибок, но файл не создается.
Есть какие-нибудь подсказки?
Если вы проверите хэндл, то, скорее всего, он вернет -1 (недействительный хэндл).
Print ( "fileHandle Value=", fileHandle);
По какой-то причине MT5 не нравится, что вы сохраняете файлы в местах, отличных от стандартных. Просто дайте оригинальный код и он будет записывать в ...MQL5\Files path
Поздравляю со скриптом, я экспортирую значения флага volatilitypivot в csv, но скрипт корректно экспортирует только высокие значения, в строках, где должны отображаться низкие значения, появляется ошибка.
Может ли кто-нибудь помочь мне, пожалуйста?
Скрипт VolatilityPivot
#property indicator_chart_window//--- 4 буфера используются для расчета и отрисовки индикатора#property indicator_buffers4//--- используется 4 участка#property indicator_plots4//+----------------------------------------------+//| Параметры рисования бычьего индикатора |//+----------------------------------------------+//--- рисуем индикатор 1 в виде линии#property indicator_type1DRAW_LINE//--- синий цвет используется для линии индикатора#property indicator_color1clrBlue//--- линия индикатора 1 - точка-тире#property indicator_style1STYLE_DASHDOTDOT//--- ширина линии индикатора 1 равна 2#property indicator_width12//---- отображение индикаторной метки#property indicator_label1"Upper VolatilityPivot"//+----------------------------------------------+//| Параметры построения медвежьего индикатора |//+----------------------------------------------+//--- рисуем индикатор 2 в виде линии#property indicator_type2DRAW_LINE//--- Для линии индикатора используется цвет HotPink#property indicator_color2clrHotPink//--- линия индикатора 2 - это линия с точкой и тире#property indicator_style2STYLE_DASHDOTDOT//--- ширина линии индикатора 2 равна 2#property indicator_width22//---- отображение индикаторной метки#property indicator_label2"Lower VolatilityPivot"//+----------------------------------------------+//| Параметры рисования бычьего индикатора |//+----------------------------------------------+//--- рисование индикатора 3 в качестве метки#property indicator_type3DRAW_ARROW//--- Для индикатора используется цвет DeepSkyBlue#property indicator_color3clrDeepSkyBlue//--- ширина индикатора 3 равна 4#property indicator_width34//--- отображение метки индикатора#property indicator_label3"Buy VolatilityPivot"//+----------------------------------------------+//| Параметры построения медвежьего индикатора |//+----------------------------------------------+//--- рисование индикатора 4 в качестве метки#property indicator_type4DRAW_ARROW//--- красный цвет используется для индикатора#property indicator_color4clrRed//--- ширина индикатора 4 равна 4#property indicator_width44//--- отображение метки индикатора#property indicator_label4"Sell VolatilityPivot"//+----------------------------------------------+//| Объявление констант |//+----------------------------------------------+#define RESET 0// Константа для возврата команды пересчета индикатора в терминал//+----------------------------------------------+//| Объявление перечисления |//+----------------------------------------------+enum Mode_
{
Mode_ATR=0, //ATR
Mode_Price //Отклонение цены
};
//+----------------------------------------------+//| Входные параметры индикатора |//+----------------------------------------------+inputuint atr_range=100;
inputuint ima_range=10;
inputdouble atr_factor=3;
input Mode_ Mode=Mode_ATR;
inputuint DeltaPrice=200;
inputint Shift=0; // Горизонтальный сдвиг индикатора в барах//+----------------------------------------------+//--- объявление динамических массивов, которые//--- будут использоваться в качестве индикаторных буферовdouble ExtMapBufferUp[];
double ExtMapBufferDown[];
double ExtMapBufferUp1[];
double ExtMapBufferDown1[];
//---double dDeltaPrice;
//--- объявление целочисленных переменных для ручек индикаторовint ATR_Handle;
//--- объявление целочисленных переменных для начала вычисления данныхint min_rates_total;
//+------------------------------------------------------------------+//| Описание класса CMoving_Average|//+------------------------------------------------------------------+#include <SmoothAlgorithms.mqh>
//+------------------------------------------------------------------+//| Пользовательская функция инициализации индикатора |//+------------------------------------------------------------------+ intOnInit()
{
//--- Получение ручки индикатора ATRif(Mode==Mode_ATR)
{
min_rates_total=int(atr_range+ima_range)+1;
ATR_Handle=iATR(NULL,0,atr_range);
if(ATR_Handle==INVALID_HANDLE)
{
Print(" Failed to get handle of the ATR indicator");
return(INIT_FAILED);
}
}
else
{
min_rates_total=3;
dDeltaPrice=DeltaPrice*_Point;
}
//--- установите динамический массив ExtMapBufferUp[] в качестве индикаторного буфераSetIndexBuffer(0,ExtMapBufferUp,INDICATOR_DATA);
//---- сдвиг индикатора 1 по горизонтали на ShiftPlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//--- сдвиг начала рисования индикатора на 1PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//--- индексирование элементов буфера как временных рядов ArraySetAsSeries(ExtMapBufferUp,true);
//--- установка значений индикаторов, которые не будут видны на графикеPlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- установите динамический массив ExtMapBufferDown[] в качестве индикаторного буфераSetIndexBuffer(1,ExtMapBufferDown,INDICATOR_DATA);
//---- сдвиг индикатора 2 по горизонтали на ShiftPlotIndexSetInteger(1,PLOT_SHIFT,Shift);
//--- смещение начальной точки расчета построения индикатора 2PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//--- индексирование элементов буфера как временных рядов ArraySetAsSeries(ExtMapBufferDown,true);
//--- установка значений индикаторов, которые не будут видны на графикеPlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- Установите динамический массив ExtMapBufferUp1[] в качестве индикаторного буфераSetIndexBuffer(2,ExtMapBufferUp1,INDICATOR_DATA);
//---- сдвиг индикатора 1 по горизонтали на ShiftPlotIndexSetInteger(2,PLOT_SHIFT,Shift);
//--- смещение начала рисования индикатора 3PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total);
//--- индексирование элементов буфера как временных рядов ArraySetAsSeries(ExtMapBufferUp1,true);
//--- установка значений индикаторов, которые не будут видны на графикеPlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- символ индикатораPlotIndexSetInteger(2,PLOT_ARROW,118);
//--- Установите динамический массив ExtMapBufferDown1[] в качестве индикаторного буфераSetIndexBuffer(3,ExtMapBufferDown1,INDICATOR_DATA);
//---- сдвиг индикатора 2 по горизонтали на ShiftPlotIndexSetInteger(3,PLOT_SHIFT,Shift);
//--- смещение начала рисования индикатора 4PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,min_rates_total);
//--- индексирование элементов буфера как временных рядов ArraySetAsSeries(ExtMapBufferDown1,true);
//--- установка значений индикаторов, которые не будут видны на графикеPlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- символ индикатораPlotIndexSetInteger(3,PLOT_ARROW,118);
//--- создание имени, которое будет отображаться в отдельном под-окне и во всплывающей подсказкеIndicatorSetString(INDICATOR_SHORTNAME,"VolatilityPivot");
//--- определение точности значений индикатораIndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//--- конец инициализацииreturn(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Пользовательская функция итерации индикатора|//+------------------------------------------------------------------+intOnCalculate(constint rates_total, // количество баров в истории на текущем тикеconstint prev_calculated,// количество истории в барах на предыдущем тикеconstdatetime &time[],
constdouble &open[],
constdouble& high[], // ценовой массив ценовых максимумов для расчета индикатораconstdouble& low[], // ценовой массив минимальных значений цены для расчета индикатораconstdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//--- проверяем, достаточно ли количество баров для расчетаif((BarsCalculated(ATR_Handle)<rates_total && Mode==Mode_ATR) || rates_total<min_rates_total) return(RESET);
//--- объявления локальных переменных double DeltaStop,Stop;
staticdouble PrevStop;
int limit,bar;
//--- индексация элементов в массивах, как во временных сериях ArraySetAsSeries(close,true);
//--- расчет начального индекса "лимита" для цикла пересчета баровif(prev_calculated>rates_total || prev_calculated<=0) // проверка первого начала расчета индикатора
{
limit=rates_total-min_rates_total-1; // начальный индекс для расчета всех баров
PrevStop=close[limit+1];
}
else limit=rates_total-prev_calculated; // начальный индекс для расчета новых баров//---if(Mode==Mode_Price)
{
//--- основной цикл расчета индикатораfor(bar=limit; bar>=0; bar--)
{
ExtMapBufferUp1[bar]=EMPTY_VALUE;
ExtMapBufferDown1[bar]=EMPTY_VALUE;
DeltaStop=dDeltaPrice;
//---if(close[bar]==PrevStop) Stop=PrevStop;
else
{
if(close[bar+1]<PrevStop && close[bar]<PrevStop) Stop=MathMin(PrevStop,close[bar]+DeltaStop);
else
{
if(close[bar+1]>PrevStop && close[bar]>PrevStop) Stop=MathMax(PrevStop,close[bar]-DeltaStop);
else
{
if(close[bar]>PrevStop) Stop=close[bar]-DeltaStop;
else Stop=close[bar]+DeltaStop;
}
}
}
//---if(close[bar]>Stop) ExtMapBufferUp[bar]=Stop; else ExtMapBufferUp[bar]=EMPTY_VALUE;
if(close[bar]<Stop) ExtMapBufferDown[bar]=Stop; else ExtMapBufferDown[bar]=EMPTY_VALUE;
if(ExtMapBufferUp[bar+1]==EMPTY_VALUE && ExtMapBufferUp[bar]!=EMPTY_VALUE) ExtMapBufferUp1[bar]=ExtMapBufferUp[bar];
if(ExtMapBufferDown[bar+1]==EMPTY_VALUE && ExtMapBufferDown[bar]!=EMPTY_VALUE) ExtMapBufferDown1[bar]=ExtMapBufferDown[bar];
if(bar) PrevStop=Stop;
}
}
//---if(Mode==Mode_ATR)
{
//--- объявления локальных переменных double ATR[];
int to_copy,maxbar;
//--- объявление переменных класса CMoving_Average из файла SmoothAlgorithms.mqh static CMoving_Average EMA;
//--- индексация элементов в массивах, как во временных сериях ArraySetAsSeries(ATR,true);
to_copy=limit+1;
if(CopyBuffer(ATR_Handle,0,0,to_copy,ATR)<=0) return(RESET);
maxbar=rates_total-min_rates_total-1;
//--- основной цикл расчета индикатораfor(bar=limit; bar>=0; bar--)
{
ExtMapBufferUp1[bar]=EMPTY_VALUE;
ExtMapBufferDown1[bar]=EMPTY_VALUE;
DeltaStop=atr_factor*EMA.EMASeries(maxbar,prev_calculated,rates_total,ima_range,ATR[bar],bar,true);
//---if(close[bar]==PrevStop) Stop=PrevStop;
else
{
if(close[bar+1]<PrevStop && close[bar]<PrevStop) Stop=MathMin(PrevStop,close[bar]+DeltaStop);
else
{
if(close[bar+1]>PrevStop && close[bar]>PrevStop) Stop=MathMax(PrevStop,close[bar]-DeltaStop);
else
{
if(close[bar]>PrevStop) Stop=close[bar]-DeltaStop;
else Stop=close[bar]+DeltaStop;
}
}
}
//---if(close[bar]>Stop) ExtMapBufferUp[bar]=Stop; else ExtMapBufferUp[bar]=EMPTY_VALUE;
if(close[bar]<Stop) ExtMapBufferDown[bar]=Stop; else ExtMapBufferDown[bar]=EMPTY_VALUE;
//---if(ExtMapBufferUp[bar+1]==EMPTY_VALUE && ExtMapBufferUp[bar]!=EMPTY_VALUE) ExtMapBufferUp1[bar]=ExtMapBufferUp[bar];
if(ExtMapBufferDown[bar+1]==EMPTY_VALUE && ExtMapBufferDown[bar]!=EMPTY_VALUE) ExtMapBufferDown1[bar]=ExtMapBufferDown[bar];
//---if(bar) PrevStop=Stop;
}
}
//--- return(rates_total);
}
Найдите файл в папке
C:\Users\XXX\AppData\Roaming\MetaQuotes\Terminal\ZXVVDASDADDEDADS23132\MQL5\Files
Экспорт значений индикаторов:
Автор: NFTrader
Экспорт значений индикаторов:
Автор: NFTrader
Скрипт очень хорош, но мне бы больше хотелось, чтобы данные поступали в excel напрямую, через сервер RTD, чтобы использовать функцию RDTR excel. Есть ли у вас что-то подобное на примете?
Да, работает. Вам нужно посмотреть на путь ...MQL5\Files, там находится CSV файл.
Я модифицировал, чтобы сохранить значения OBV (реальный объем), просто измените код ниже.
Здравствуйте,
Спасибо за работу. К сожалению, когда я запускаю скрипт, файл не создается. Я обновил скрипт, чтобы он записывался в C:/temp/. Когда я запускаю в отладке, я вижу, что имя файла правильное и я не получаю никаких ошибок, но файл не создается.
Есть какие-нибудь подсказки?
Если вы проверите хэндл, то, скорее всего, он вернет -1 (недействительный хэндл).
По какой-то причине MT5 не нравится, что вы сохраняете файлы в местах, отличных от стандартных. Просто дайте оригинальный код и он будет записывать в ...MQL5\Files path
Поздравляю со скриптом, я экспортирую значения флага volatilitypivot в csv, но скрипт корректно экспортирует только высокие значения, в строках, где должны отображаться низкие значения, появляется ошибка.
Может ли кто-нибудь помочь мне, пожалуйста?
Скрипт VolatilityPivot
Эта книга очень полезна.
Автор - бык.