Скрипты: Export Indicator's Values v1 - страница 2

[Удален]  
Не работает.
 
Я не могу экспортировать значения из 50-периодной экспоненциальной скользящей средней, кто-нибудь может мне помочь?
 

Найдите файл в папке

C:\Users\XXX\AppData\Roaming\MetaQuotes\Terminal\ZXVVDASDADDEDADS23132\MQL5\Files

 
Скрипт очень хороший, но мне бы больше хотелось, чтобы данные шли в excel напрямую, через RTD сервер, чтобы использовать RDTR функцию excel. Планируется ли у вас что-то подобное?
 
 
Jose Luis Perez Navarro:
Скрипт очень хорош, но мне бы больше хотелось, чтобы данные поступали в excel напрямую, через сервер RTD, чтобы использовать функцию RDTR excel. Есть ли у вас что-то подобное на примете?
xm.cm real14
 

Да, работает. Вам нужно посмотреть на путь ...MQL5\Files, там находится CSV файл.

Я модифицировал, чтобы сохранить значения OBV (реальный объем), просто измените код ниже.


Indicator_Directory_And_Name="Examples\\OBV";
IndicatorPeriod=VOLUME_REAL;
 
Ecirba:

Здравствуйте,

Спасибо за работу. К сожалению, когда я запускаю скрипт, файл не создается. Я обновил скрипт, чтобы он записывался в C:/temp/. Когда я запускаю в отладке, я вижу, что имя файла правильное и я не получаю никаких ошибок, но файл не создается.

Есть какие-нибудь подсказки?


Если вы проверите хэндл, то, скорее всего, он вернет -1 (недействительный хэндл).


Print ( "fileHandle Value=", fileHandle);


По какой-то причине MT5 не нравится, что вы сохраняете файлы в местах, отличных от стандартных. Просто дайте оригинальный код и он будет записывать в ...MQL5\Files path

 

Поздравляю со скриптом, я экспортирую значения флага volatilitypivot в csv, но скрипт корректно экспортирует только высокие значения, в строках, где должны отображаться низкие значения, появляется ошибка.

Может ли кто-нибудь помочь мне, пожалуйста?

Скрипт VolatilityPivot

#property indicator_chart_window
//--- 4 буфера используются для расчета и отрисовки индикатора
#property indicator_buffers 4
//--- используется 4 участка
#property indicator_plots   4
//+----------------------------------------------+
//| Параметры рисования бычьего индикатора |
//+----------------------------------------------+
//--- рисуем индикатор 1 в виде линии
#property indicator_type1   DRAW_LINE
//--- синий цвет используется для линии индикатора
#property indicator_color1  clrBlue
//--- линия индикатора 1 - точка-тире
#property indicator_style1  STYLE_DASHDOTDOT
//--- ширина линии индикатора 1 равна 2
#property indicator_width1  2
//---- отображение индикаторной метки
#property indicator_label1  "Upper VolatilityPivot"
//+----------------------------------------------+
//| Параметры построения медвежьего индикатора |
//+----------------------------------------------+
//--- рисуем индикатор 2 в виде линии
#property indicator_type2   DRAW_LINE
//--- Для линии индикатора используется цвет HotPink
#property indicator_color2  clrHotPink
//--- линия индикатора 2 - это линия с точкой и тире
#property indicator_style2  STYLE_DASHDOTDOT
//--- ширина линии индикатора 2 равна 2
#property indicator_width2  2
//---- отображение индикаторной метки
#property indicator_label2  "Lower VolatilityPivot"
//+----------------------------------------------+
//| Параметры рисования бычьего индикатора |
//+----------------------------------------------+
//--- рисование индикатора 3 в качестве метки
#property indicator_type3   DRAW_ARROW
//--- Для индикатора используется цвет DeepSkyBlue
#property indicator_color3  clrDeepSkyBlue
//--- ширина индикатора 3 равна 4
#property indicator_width3  4
//--- отображение метки индикатора
#property indicator_label3  "Buy VolatilityPivot"
//+----------------------------------------------+
//| Параметры построения медвежьего индикатора |
//+----------------------------------------------+
//--- рисование индикатора 4 в качестве метки
#property indicator_type4   DRAW_ARROW
//--- красный цвет используется для индикатора
#property indicator_color4  clrRed
//--- ширина индикатора 4 равна 4
#property indicator_width4  4
//--- отображение метки индикатора
#property indicator_label4  "Sell VolatilityPivot"
//+----------------------------------------------+
//| Объявление констант |
//+----------------------------------------------+
#define  RESET 0  // Константа для возврата команды пересчета индикатора в терминал
//+----------------------------------------------+
//| Объявление перечисления |
//+----------------------------------------------+
enum Mode_
  {
   Mode_ATR=0,   //ATR
   Mode_Price    //Отклонение цены
  };
//+----------------------------------------------+
//| Входные параметры индикатора |
//+----------------------------------------------+
input uint   atr_range=100;
input uint   ima_range=10;
input double atr_factor=3;
input Mode_  Mode=Mode_ATR;
input  uint  DeltaPrice=200;
input int    Shift=0;          // Горизонтальный сдвиг индикатора в барах
//+----------------------------------------------+
//--- объявление динамических массивов, которые
//--- будут использоваться в качестве индикаторных буферов
double ExtMapBufferUp[];
double ExtMapBufferDown[];
double ExtMapBufferUp1[];
double ExtMapBufferDown1[];
//---
double dDeltaPrice;
//--- объявление целочисленных переменных для ручек индикаторов
int ATR_Handle;
//--- объявление целочисленных переменных для начала вычисления данных
int min_rates_total;
//+------------------------------------------------------------------+
//| Описание класса CMoving_Average|
//+------------------------------------------------------------------+
#include <SmoothAlgorithms.mqh>
//+------------------------------------------------------------------+
//| Пользовательская функция инициализации индикатора |
//+------------------------------------------------------------------+ 
int OnInit()
  {
//--- Получение ручки индикатора ATR
   if(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 по горизонтали на Shift
   PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//--- сдвиг начала рисования индикатора на 1
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//--- индексирование элементов буфера как временных рядов 
   ArraySetAsSeries(ExtMapBufferUp,true);
//--- установка значений индикаторов, которые не будут видны на графике
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- установите динамический массив ExtMapBufferDown[] в качестве индикаторного буфера
   SetIndexBuffer(1,ExtMapBufferDown,INDICATOR_DATA);
//---- сдвиг индикатора 2 по горизонтали на Shift
   PlotIndexSetInteger(1,PLOT_SHIFT,Shift);
//--- смещение начальной точки расчета построения индикатора 2
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//--- индексирование элементов буфера как временных рядов 
   ArraySetAsSeries(ExtMapBufferDown,true);
//--- установка значений индикаторов, которые не будут видны на графике
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- Установите динамический массив ExtMapBufferUp1[] в качестве индикаторного буфера
   SetIndexBuffer(2,ExtMapBufferUp1,INDICATOR_DATA);
//---- сдвиг индикатора 1 по горизонтали на Shift
   PlotIndexSetInteger(2,PLOT_SHIFT,Shift);
//--- смещение начала рисования индикатора 3
   PlotIndexSetInteger(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 по горизонтали на Shift
   PlotIndexSetInteger(3,PLOT_SHIFT,Shift);
//--- смещение начала рисования индикатора 4
   PlotIndexSetInteger(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);
  }
//+------------------------------------------------------------------+
//| Пользовательская функция итерации индикатора|
//+------------------------------------------------------------------+
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[])
  {
//--- проверяем, достаточно ли количество баров для расчета
   if((BarsCalculated(ATR_Handle)<rates_total && Mode==Mode_ATR) || rates_total<min_rates_total) return(RESET);
//--- объявления локальных переменных 
   double DeltaStop,Stop;
   static double 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);
  }

ошибка csv

 

Эта книга очень полезна.

Автор - бык.