スクリプト: インディケータ値のエクスポート - ページ 2

削除済み  
うまくいかない。
 
50期間指数 移動平均の値がエクスポートできません。
 

フォルダ内のファイルを探す

Files

 
このスクリプトは非常に素晴らしいものですが、RTDサーバーを経由して、ExcelのRDTR関数を使用するために、データを直接Excelに転送することができれば、さらに良いと思います。そのような計画はありますか?
 
 
Jose Luis Perez Navarro:
スクリプトはとてもいいのですが、RTDサーバーを経由して、直接エクセルにデータを送り、エクセルのRDTR関数を使用できればもっといいのですが。そのようなことをお考えですか?
xm.cm real14
 

はい、うまくいきます。...MQL5Filesのパスを見る必要があります。そこにCSVファイルがあります。

、OBV(リアルボリューム)の値を保存するように修正しました。以下のコードを変更するだけです。


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

こんにちは、

スクリプトを実行してもファイルが作成されません。C:/temp/に書き込むようにスクリプトを更新しました。デバッグで実行すると、ファイル名は正しく、エラーも出ませんが、ファイルがありません。

何か手がかりはありますか?


ハンドルをチェック すると、おそらく-1(無効なハンドル)が返されます。


Print ( "fileHandle Value=", fileHandle);


なぜかMT5は、デフォルトと異なる場所にファイルを保存することを嫌います。元のコードのままにしておけば、...MQL5Filesパスに書き込まれます。

 

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をシフト・ポジションで水平方向に移動させる。
   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);
//--- インジケータの描画開始位置をずらす。
   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をシフト・ポジションで水平方向に移動させる。
   PlotIndexSetInteger(3,PLOT_SHIFT,Shift);
//--- インジケータの描画開始位置をずらす。
   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;
      //--- SmoothAlgorithms.mqhファイルからのCMoving_Averageクラス変数の宣言 
      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エラー

 

これはとても役に立つ。

著者は強気だ。