2017年12月13日水曜日

[MT4インジケータ]ちょっと分けて考えてみよう。半分だけのボリンジャーバンド

最近LSMAを研究していて、わりかしいい感じなのですが、その中で、バンドは分けて考えたほうがいいのではないか?ということに気が付きました。
本家のLSMAの方は、2条平均誤差をベースにあれこれしていますが、メジャーインジケータであるボリンジャーバンドも、分けて考えると違った物が見えてくるかもしれません。

ということで、早速サラッと作ってみました。標準的なボリンジャーバンドの計算方法を移動平均より上のデータと下のデータを分けて計算して描画しています。
データ量が1/2になっっている前提で、バンド幅のσ値を通常の2倍にしています。


わりあい機能するような・・・しないような??
M1とかの逆張りとかのほうがいいのかもしれません。

ソースコードはブログの最後です。

ボリンジャーバンド特有の価格が動いた時に逆方向にもバンド幅が伸びてしまう症状が無いだけでも優秀かもしれません。

せっかく上と下に分けるんだから、high/low見た方がいいかな?ということで、下はlow、上はhighと分けて計算しています。

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program
Trading View プロフィール

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。

//------------------------------------------------------------------
// +と-側のボリンジャーバンドを別に計算してみた。
#property copyright "Copyright 2017,  Daisuke"
#property link      "http://mt4program.blogspot.jp/"
#property version   "1.00"
#property strict
#property indicator_chart_window

//バッファーを指定する。
#property indicator_buffers 5

//プロット数を指定する。
#property indicator_plots   5

#property indicator_label1  "Band1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrAqua
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

#property indicator_label2  "Band2"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrAqua
#property indicator_style2  STYLE_DOT
#property indicator_width2  1

#property indicator_label3  "Band3"
#property indicator_type3   DRAW_LINE
#property indicator_color3  clrIndianRed
#property indicator_style3  STYLE_SOLID
#property indicator_width3  1

#property indicator_label4  "Band4"
#property indicator_type4   DRAW_LINE
#property indicator_color4  clrIndianRed
#property indicator_style4  STYLE_SOLID
#property indicator_width4  1

#property indicator_label5  "MA"
#property indicator_type5   DRAW_LINE
#property indicator_color5  clrYellow
#property indicator_style5  STYLE_DOT
#property indicator_width5  2

double m_buffer1[];
double m_buffer2[];
double m_buffer3[];
double m_buffer4[];
double m_buffer5[];

input int MaPeriod = 21;   // 移動平均期間
input ENUM_APPLIED_PRICE PriceMode = PRICE_TYPICAL;   // 対象価格
input double BandWidth1 = 2.0; // バンド幅1
input double BandWidth2 = 4.0; // バンド幅2

//------------------------------------------------------------------
//初期化
int OnInit()
{
   //インジケーターバッファを初期化する。
   SetIndexBuffer(0,m_buffer1);
   SetIndexBuffer(1,m_buffer2);
   SetIndexBuffer(2,m_buffer3);
   SetIndexBuffer(3,m_buffer4);
   SetIndexBuffer(4,m_buffer5);
   
   string short_name = "HBB(" + IntegerToString(MaPeriod) + ")";
   IndicatorShortName(short_name);
   
   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[])            //スプレット
{
   double upDiff[];
   double downDiff[];
   ArrayResize(upDiff, MaPeriod);
   ArrayResize(downDiff, MaPeriod);
   for( int i = rates_total - prev_calculated - 1; i >= 0 && !IsStopped(); i-- )
   {
      if( i > rates_total - MaPeriod ) continue;
      
      m_buffer5[i] = iMA(NULL, PERIOD_CURRENT, MaPeriod, 0, MODE_SMA, PriceMode, i);
      
      ArrayInitialize(upDiff, 0);
      ArrayInitialize(downDiff, 0);
      for( int j = 0; j < MaPeriod; j++ )
      {
         if( high[i + j] > m_buffer5[i + j] ) upDiff[j] = high[i + j] - m_buffer5[i + j];
         if( low[i + j] < m_buffer5[i + j] ) downDiff[j] = m_buffer5[i + j] - low[i + j];
      }
      
      double upStd = StdDev(upDiff, MaPeriod, 0);
      double downStd = StdDev(downDiff, MaPeriod, 0);
      
      m_buffer1[i] = m_buffer5[i] + BandWidth1 * upStd;
      m_buffer2[i] = m_buffer5[i] + BandWidth2 * upStd;
      m_buffer3[i] = m_buffer5[i] - BandWidth1 * downStd;
      m_buffer4[i] = m_buffer5[i] - BandWidth2 * downStd;
   }

   ArrayFree(upDiff);
   ArrayFree(downDiff);

   return rates_total - 1;
}

//------------------------------------------------------------------
//標準偏差を求める。
// return 標準偏差
double StdDev(
   const double &values[],      //元となる配列
   int count,                   //計算対象数
   int shift                    //シフト
)
{
   if( (count + shift) > ArraySize(values) ) return 0;

   double avg = 0 ;
   double mu = 0 ;
   for( int i = shift; i < shift + count; i++ )
   {
      avg += values[i];
   }
   avg = avg / count;

   for( int i = shift; i < shift + count; i++ )
   {
      mu += MathPow(values[i] - avg, 2);
   }

   // 標本標準偏差
   return MathSqrt(mu / (count - 1));
}

2017年12月10日日曜日

[MT4プログラミング]通貨強弱インジをEURベースに変更する。

twitterで質問がありましたので、公開している通貨強弱インジをEURベースに変更する方法です。

通貨強弱インジケータの元ファイルはこちらからもダウンロード可能です。
FX-ONのダウンロードはこちらから。
ダウンロード

ソースコードを修正出来る方ならかんたんに変更可能です。

OnInit関数と、OnCalculate関数内の”USD”と”USDUSD”となっている部分を”EUR”と"EUREUR"に変更するだけです。

なお、後半のCurrencyIndex3/4とCurrencyMultiKairiはこの変更をしてもほとんど表示は変わりません。(USDの線が100から動くやつです。)
システムトラブル等でクロスとドルストレートの間に比率の乖離が起きない限り同じ同じ値となります。これは、最後に通貨間比率の平均で割ってしまっている為です。

■USDを基準に計算した乖離率チャート(上)と、EURを基準にした乖離率チャート(下) (CurrencyMultiKairi)


■USDを基準としたN本前100チャート(上)、EURを基準としたN本前100チャート(下)(CurrencyIndex1)

通貨間の平均で割ったものは相対的な通貨の強弱がはっきり分かる利点があります。USDのラインが動くのが特徴です。しかし、たとえば、USDJPYをトレードしている際、円安になっているのに、他にもっと弱い通貨があって、CurrencyIndex上では円高になっている事もあります。(その場合は逃げ頃なんだと思われますが・・・)

あと、EURをベースにした場合、EURCHFやEURNZDなど、EURをベースとするペアのチャートをある程度過去まで表示しておく必要が有ることにご注意ください。

あ、もしかっこよく改造するのであれば、基準通貨を引数として定義して、パラメータで変更出来る方がいいかもしれません。

サンプルとしてCurrencyIndex1の改造例をブログ最後に乗せておきます。
ナビゲーターからCurrencyIndex1を選択した後、マウス右クリックメニューの修正を選び、赤字の部分を修正してみてください。

※もう少し補足します。
これは私のブログタイトルの付け方が悪かったかもしれません。
CurenncyIndex3,4及びMultiKairiはUSDストレートから計算していますが、最終表示値にはUSD成分は(USD値以外は)含まれていません。

 次の計算を行っています。
・7通貨ペアの対USDインデックス値を計算する。
例EUR/USDインデックス

・8通貨ペア(USDUSDを含む)平均値を簡易USDインデックスとする。
   USDインデックス=100/通貨ペアのインデックス平均値

 ※EURUSDインデックスが101だった場合、EURがUSDに対して基準点か101%になったという意味。EURからみて、USD100/101で99%になった事になる。この場合ドルインデックスは99

・7通貨ペアインデックス値を再度にUSDインデックスを掛け合わせる
 EURインデックス=EUR/USDインデックス ☓ USDインデックス
 EURインデックス=EUR/USDインデックス ☓ (100/通貨ペアの平均値)

ということで、どの通貨を基準に計算しても、ほぼおなじ値となってしまいます。
ほぼというのは、スプレット差などあるので全く同じにはなりません。


その為、各通貨のフローの想定は、線の方向性で見ることになります。
ある2つの通貨の幅が広がっている場合、下方向の通過から上方向の通貨に資金が流れていると想定出来ます。
上記はわかりやすくEUR,USD,JPY,GBPの4通貨のみを表示しています。

JPYが売られてGBPが買われていることがわかるかと思います。
EURも微妙に売られています。EURとJPYだけ比較すると差が広がっていることが分かります。
JPYが売られて、EURも少し売られて、USDとGBPが買われている感じです。

このインジケータは通貨の流通量までは見ていません。例えば、ドル円が1円動くのと、ポンド円が1円動くのとでは、動くお金の量が全く異なります。あくまで価格ベースの参考値となります。
例えば、1ドル=100兆ジンバブエドルになったとしても、1ドル=10兆円なるわけではありません。
しかし、このインジケータの計算方法だと、平均的には50兆倍になった計算になってしまします。

その意味では、このインジケータの初期設定のままだと、GBPに全体が釣られすぎているかもしれません。GBP大暴れです(笑)

そのうち正確性が重要になってきた場合は、2016の取引シェアとかの値を参考に取引量補正も掛けたインジケータを作成したいと思います。

[MT4インジケータ]通貨の強弱をUSDを基準に表示する。その2
[MT4インジケータ]通貨の強弱をUSDを基準に表示する。その3
[MT4インジケータ]通貨の強弱をUSDを基準にその4とFX-ONへのアップロード

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program
Trading View プロフィール

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。
//------------------------------------------------------------------
// 通貨強弱 インデックス比較インジケータ(N本前開始)
#property copyright "Copyright 2017,  Daisuke"
#property link      "http://mt4program.blogspot.jp/"
#property version   "1.00"
#property strict
#property indicator_separate_window

#include <Arrays/ArrayString.mqh>

//インデックス開始位置タイプ
enum ENUM_INDEX_TYPE
{
   // 固定値
   IDX_TYPE_FIX,
   
   // 前日終値
   IDX_TYPE_DAY,

   // 前週終値
   IDX_TYPE_WEEKEND,

   // 前月終値
   IDX_TYPE_MONTHEND,
};

//バッファーを指定する。
#property indicator_buffers 9

input string sep00 = "";            //【通貨】
input string Currency1 = "EUR";     // 対象通貨1
input color Color1 = clrDodgerBlue; // 対象通貨1色

input string Currency2 = "GBP";     // 対象通貨2
input color Color2 = clrMagenta;    // 対象通貨2色

input string Currency3 = "AUD";     // 対象通貨3
input color Color3 = clrGreen ;     // 対象通貨3色

input string Currency4 = "NZD";     // 対象通貨4
input color Color4 = clrSilver;     // 対象通貨4色

input string Currency5 = "USD";     // 対象通貨5
input color Color5 = clrAqua;       // 対象通貨5色

input string Currency6 = "CAD";     // 対象通貨6
input color Color6 = clrPink;       // 対象通貨6色

input string Currency7 = "CHF";     // 対象通貨7
input color Color7 = clrPaleGreen;  // 対象通貨7色

input string Currency8 = "JPY";     // 対象通貨8
input color Color8 = clrRed;        // 対象通貨8色

input string BaseCurrency = "USD";  // 基準通貨

input string sep10 = "";            //【計算設定】
input ENUM_INDEX_TYPE IndexType = IDX_TYPE_FIX;   // インデックス開始位置タイプ
input int IndexLength = 200;        // インデックス化開始本数(タイプIDX_TYPE_FIX時のみ)
input int MaPeriodBase = 4;         // 比較元移動平均期間(ある程度大きな値でもOK)
input int MaPeriodTarget = 4;       // 比較先移動平均期間(小さい値推奨)

input string sep20 = "";            //【その他】
input string CurrencyPrefix = "";   // 通貨ペア名の前に付く文字列
input string CurrencyPostfix = "";  // 通貨ペア名の後に付く文字列
input int LabelDistance = 3;        // 通貨名ラベル描画スペース

//バッファ
double m_buffer1[];
double m_buffer2[];
double m_buffer3[];
double m_buffer4[];
double m_buffer5[];
double m_buffer6[];
double m_buffer7[];
double m_buffer8[];

//通貨一覧
CArrayString m_currencies;

//通貨ペア一覧
CArrayString m_currencyPairs;

//USDインデックス
int m_usdIndex = -1;

//オブジェクト名
#define OBJECT_NAME "OBJ_CURR_HL"

//色配列
color m_colors[8];

//------------------------------------------------------------------
// 初期化
int OnInit()
{
   ClearObjects();

   IndicatorBuffers(8);

   int count = 0 ;
   SetIndexStyle(count, DRAW_LINE, STYLE_SOLID, 1, Color1);
   SetIndexBuffer(count++, m_buffer1);
   
   SetIndexStyle(count, DRAW_LINE, STYLE_SOLID, 1, Color2);
   SetIndexBuffer(count++, m_buffer2);

   SetIndexStyle(count, DRAW_LINE, STYLE_SOLID, 1, Color3);
   SetIndexBuffer(count++, m_buffer3);

   SetIndexStyle(count, DRAW_LINE, STYLE_SOLID, 1, Color4);
   SetIndexBuffer(count++, m_buffer4);

   SetIndexStyle(count, DRAW_LINE, STYLE_SOLID, 1, Color5);
   SetIndexBuffer(count++, m_buffer5);

   SetIndexStyle(count, DRAW_LINE, STYLE_SOLID, 1, Color6);
   SetIndexBuffer(count++, m_buffer6);

   SetIndexStyle(count, DRAW_LINE, STYLE_SOLID, 1, Color7);
   SetIndexBuffer(count++, m_buffer7);

   SetIndexStyle(count, DRAW_LINE, STYLE_SOLID, 1, Color8);
   SetIndexBuffer(count++, m_buffer8);
   
   m_currencies.Add(Currency1);
   m_currencies.Add(Currency2);
   m_currencies.Add(Currency3);
   m_currencies.Add(Currency4);
   m_currencies.Add(Currency5);
   m_currencies.Add(Currency6);
   m_currencies.Add(Currency7);
   m_currencies.Add(Currency8);
   
   m_colors[0] = Color1;
   m_colors[1] = Color2;
   m_colors[2] = Color3;
   m_colors[3] = Color4;
   m_colors[4] = Color5;
   m_colors[5] = Color6;
   m_colors[6] = Color7;
   m_colors[7] = Color8;

   m_usdIndex = -1;
   for( int i = 0; i < m_currencies.Total(); i++)
   {
      if(m_currencies.At(i) == BaseCurrency)
      {
         m_usdIndex = i;
         break;
      }
   }
   if( m_usdIndex < 0 )
   {
      //USDが見つからない場合、パラメータ異常
      return INIT_PARAMETERS_INCORRECT;
   }

   //USDに対する通貨ペアを生成する。   
   for( int i = 0; i < m_currencies.Total(); i++)
   {
      if( m_currencies.At(i) == "" )
      {
         m_currencyPairs.Add("");
         continue;
      }
      
      if( i < m_usdIndex )
      {
         m_currencyPairs.Add(CurrencyPrefix + m_currencies.At(i) + BaseCurrency + CurrencyPostfix);
      }
      else if( i > m_usdIndex )
      {
         m_currencyPairs.Add(CurrencyPrefix + BaseCurrency + m_currencies.At(i) + CurrencyPostfix);
      }
      else
      {
         m_currencyPairs.Add(BaseCurrency + BaseCurrency);
      }
      //線のラベルを設定する。
      SetIndexLabel(i, m_currencies.At(i));
   }
   
   ChartSetInteger(0, CHART_SHIFT, true);
   ChartSetDouble(0, CHART_SHIFT_SIZE, 12);

   return(INIT_SUCCEEDED);
}

//------------------------------------------------------------------
//終了処理
void OnDeinit( const int reason )
{
   ClearObjects();
}

//------------------------------------------------------------------
//計算イベント
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[])            //スプレット
{
   int total = m_currencyPairs.Total();
   if( IndexType == IDX_TYPE_FIX )
   {
      //新しいバーが生成されたとき。
      if(prev_calculated != rates_total - 1)
      {
         //いったんバッファを初期化する。
         ArrayInitialize(m_buffer1, EMPTY_VALUE);
         ArrayInitialize(m_buffer2, EMPTY_VALUE);
         ArrayInitialize(m_buffer3, EMPTY_VALUE);
         ArrayInitialize(m_buffer4, EMPTY_VALUE);
         ArrayInitialize(m_buffer5, EMPTY_VALUE);
         ArrayInitialize(m_buffer6, EMPTY_VALUE);
         ArrayInitialize(m_buffer7, EMPTY_VALUE);
         ArrayInitialize(m_buffer8, EMPTY_VALUE);
      }
   
      for( int i = IndexLength - 1; i >= 0; i--)
      {
         if( m_buffer1[i] == EMPTY_VALUE || i == 0 )
         {
            for( int j = 0; j < total; j++)
            {
               string pair = m_currencyPairs.At(j);
               if(pair == BaseCurrency + BaseCurrency )
               {
                  SetValue(j, 100, i);
               }
               else
               {
                  double baseValue = iMA(pair, PERIOD_CURRENT, MaPeriodBase, 0, MODE_LWMA, PRICE_CLOSE, IndexLength - 1);
                  double targetValue = iMA(pair, PERIOD_CURRENT, MaPeriodTarget, 0, MODE_LWMA, PRICE_CLOSE, i);
   
                  if( j < m_usdIndex )
                  {
                     if( baseValue != 0 && baseValue != EMPTY_VALUE )
                     {
                        SetValue(j, targetValue / baseValue * 100, i);
                     }
                  }
                  else
                  {
                     if( targetValue != 0 && targetValue != EMPTY_VALUE )
                     {
                        SetValue(j,  baseValue / targetValue * 100, i);
                     }
                  }
               }
            }
         }
      }
   }
   else
   {
      // 特定の区切りをタイミングとする場合
      // 日にち区切りの場合、1時間足以下の必要あり。
      if( IndexType == IDX_TYPE_DAY && Period() > 60 ) return 0;
      // 週区切りの場合、日足以下の必要あり。
      if( IndexType == IDX_TYPE_WEEKEND && Period() > 60 * 24 ) return 0;
      
      //GMT補正とかは考えない・・。
      for( int i = rates_total - prev_calculated - 1; i >= 0; i-- )
      {
         for( int j = 0; j < total; j++)
         {
            string pair = m_currencyPairs.At(j);
            if(pair == BaseCurrency + BaseCurrency )
            {
               SetValue(j, 100, i);
            }
            else
            {
               //おおちゃくw
               //ちゃんと出ない場合は、日足と週足と月足のチャートを一度表示してね。
               //平滑化をかけているのと、終値で判断(始値ではない)のでぴったり100スタートではないので注意。
               double baseValue = 0;
               if( IndexType == IDX_TYPE_DAY )
               {
                  baseValue = iClose( pair, PERIOD_D1, iBarShift(pair, PERIOD_D1, time[i]) + 1);
               }
               else if( IndexType == IDX_TYPE_WEEKEND )
               {
                  baseValue = iClose( pair, PERIOD_W1, iBarShift(pair, PERIOD_W1, time[i]) + 1);
               }
               else if( IndexType == IDX_TYPE_WEEKEND )
               {
                  baseValue = iClose( pair, PERIOD_MN1, iBarShift(pair, PERIOD_MN1, time[i]) + 1);
               }
               double targetValue = iMA(pair, PERIOD_CURRENT, MaPeriodTarget, 0, MODE_LWMA, PRICE_CLOSE, i);

               if( j < m_usdIndex )
               {
                  if( baseValue != 0 && baseValue != EMPTY_VALUE )
                  {
                     SetValue(j, targetValue / baseValue * 100, i);
                  }
               }
               else
               {
                  if( targetValue != 0 && targetValue != EMPTY_VALUE )
                  {
                     SetValue(j,  baseValue / targetValue * 100, i);
                  }
               }
            }
         }
      }      
   }

   
   DrawCurrencyLabels();

   return rates_total - 1;
}


//------------------------------------------------------------------
//通貨ラベルを描画する。
void DrawCurrencyLabels()
{
   //ソート行う。
   //とりあえずバブルソート
   int index[8];
   double rates[8];
   ArrayInitialize(index, 0);
   ArrayInitialize(rates, 0);

   int total = m_currencyPairs.Total();

   for( int i = 0 ; i < total; i++ )
   {
      index[i] = i;
      rates[i] = GetValue(i, 0);
   }
   
   //ソート行う。
   //とりあえずバブルソート
   for( int b = 1 ; b < total; b++ )
   {
      for( int j = 0; j < total - b; j++ )
      {
         if( rates[j] > rates[j + 1]  )
         {
            double work = rates[j + 1];
            rates[j + 1] = rates[j];
            rates[j] = work;
            
            int indexWork = index[j + 1];
            index[j + 1] = index[j];
            index[j] = indexWork;
         }
      }
   }

   //通貨ラベルを更新する。
   ClearObjects();
   int sub = WindowOnDropped();

   double max = ChartGetDouble(0, CHART_PRICE_MAX, sub);
   double min = ChartGetDouble(0, CHART_PRICE_MIN, sub);
   
   double distance = ( max - min ) / (total + 2);
   datetime writeTime = iTime(NULL, PERIOD_CURRENT, 0) + PeriodSeconds() * LabelDistance ;

   for( int j = 0; j < total; j++)
   {
      //描画対象通貨(インデックス)
      int currencyIndex = (int)index[j];
   
      //価格テキストを追加する。
      string objectName = StringFormat("%s_TXT_%d_%d", OBJECT_NAME, sub, j);

      if( ObjectCreate(0, objectName, OBJ_TEXT, WindowOnDropped(),writeTime , min + distance * (j + 1)) )
      {
         // 表示文字列
         ObjectSetString(0, objectName, OBJPROP_TEXT, m_currencies.At(currencyIndex));
         
         // アンカー
         ObjectSetInteger(0, objectName, OBJPROP_ANCHOR, ANCHOR_BOTTOM);
         
         ObjectSetInteger(0, objectName, OBJPROP_COLOR, m_colors[currencyIndex]);
      }
   }
}

//------------------------------------------------------------------
//値を設定する。
void SetValue(
   int i,            //配列番号0~7
   double value,     //値
   int shift)        //シフト
{
   switch(i)
   {
      case 0:
         m_buffer1[shift] = value;
         break;
      case 1:
         m_buffer2[shift] = value;
         break;
      case 2:
         m_buffer3[shift] = value;
         break;
      case 3:
         m_buffer4[shift] = value;
         break;
      case 4:
         m_buffer5[shift] = value;
         break;
      case 5:
         m_buffer6[shift] = value;
         break;
      case 6:
         m_buffer7[shift] = value;
         break;
      case 7:
         m_buffer8[shift] = value;
         break;
   }
}

//------------------------------------------------------------------
//値を取得する。
double GetValue(
   int i,            //配列番号0~7
   int shift)        //シフト
{
   switch(i)
   {
      case 0:
         return m_buffer1[shift];
      case 1:
         return m_buffer2[shift];
      case 2:
         return m_buffer3[shift];
      case 3:
         return m_buffer4[shift];
      case 4:
         return m_buffer5[shift];
      case 5:
         return m_buffer6[shift];
      case 6:
         return m_buffer7[shift];
      case 7:
         return m_buffer8[shift];
   }
   return EMPTY_VALUE;
}

//------------------------------------------------------------------
//オブジェクトをすべて削除する。
void ClearObjects()
{
   long chartId = ChartID();   
   int sub = WindowOnDropped();
   int total = ObjectsTotal( chartId, sub );
   //生成したオブジェクトを削除する。
   //0から削除するとインデックス位置がずれて
   //正しく削除できないため、後ろから削除するようにする。
   for( int i = total - 1; i >= 0 ; i--)
   {
      string name = ObjectName( chartId, i, sub );
      
      // 先頭文字列がRangeRectangleNameと一致する場合、削除する。
      if ( StringFind( name, OBJECT_NAME ) == 0 )
      {
         ObjectDelete( chartId, name );
      }
   }
}

2017年12月9日土曜日

[Gewinn9]バージョンアップ申請をします。

お疲れ様です。
今年の頭から、ビットコインバブル参加しないの?と言われながら怖くて参加できなくて結果だけみて激しく後悔しているだいすけです。詐欺と言われようが、価値がないと言われようが儲かっている時にはちゃんと参加するべきなのかもしれないと反省しました。一生に何度も無いチャンスをまたも不意にしてしまいました・・。

(なお前回は、ガンホー株・・・。職業柄周りよりかなり早くパズドラの盛り上がりを知っていたのですが、一生懸命パズドラをしていて株のことなんかすっかり忘れてました・・・。)

Gewinn9 V1.1をリリース予定しています。
リリースに従い、値上げ予定です。

修正点は次の通りです。

1.
 深夜時間帯のスプレットが広がるところでは、バックテストでもポジションを持たないように修正しました。リアル運用ではスプレットフィルタで実際はポジションを持たないところです。
 スプレットフィルタ値を広めて、ポジションを持つような運用も可能です。

2.
 利益確定タイミングの判定にLSMAを取り入れました。
 フラクタルの判定だけだと、日本時間の少しの動きで利益確定してしまうことがアリアmした。

3.1本のバーで大きく動いた時には利益確定してしまう動きを追加しました。
 最近の相場では、フラッシュ・クラッシュで瞬間的に値動きが発生することが多々あります。その場合、利益が乗っていた場合は一旦利益確定してしまう制御を追加しました。

4.デフォルト設定を安全側に、週末クローズOn、夜間取引制限Onに変更します。

全体として、ポジションを取る場所は変えていませんので負ける時には負けますが、より大きく勝てるように変更しました。

4ポジションEAとして、持って行かれる時はどうしても持っていかれるので、ポジションをフィルタしてドローダウンを減らす方向には修正せずにちょうど、タイミングよく持ったポジションからなるべく利益を得られる方向に修正しています。

旧バージョンV1.04のバックテスト結果は、過去記事を御覧ください。
http://mt4program.blogspot.jp/2017/12/gewinnonoff.html

■Gewinn V1.1 週末クローズ無し
通貨ペアEURUSD (Euro vs US Dollar)
期間1時間足(H1) 2006.10.02 00:00 - 2017.11.29 23:00 (2006.10.01 - 2017.11.30)
モデル全ティック (利用可能な最小時間枠による最も正確な方法)
パラメーターSep00=""; MagicNumber=28980001; IsCountdong=false; SpreadFilter=5; MaxPosition=4; Comment="Gewinn9_EURUSD"; Lot=0.5; Sep01=""; MaxProfit=400; StopLoss=150; IsTrailing=true; TrailingStartPips=150; TrailingPips=80; IsBreakEven=true; BreakPips=30; ProfitBigBar=true; BigBarP=250; ProfitAlfa=4; MaxOpenBars=240; CloseWeekEnd=false; Sep02=""; Aggressiveness=1; SignalCloseUpper=30; IsFractalCheck=false; IsOffMidnight=true;
テストバー数70024モデルティック数157456078モデリング品質90.00%
不整合チャートエラー0
初期証拠金10000.00スプレッド20
純益59443.95総利益126501.18総損失-67057.23
プロフィットファクタ1.89期待利得78.63
絶対ドローダウン2881.80最大ドローダウン6376.50 (8.67%)相対ドローダウン36.58% (4105.70)
総取引数756売りポジション(勝率%)401 (84.54%)買いポジション(勝率%)355 (84.79%)
勝率(%)640 (84.66%)負率 (%)116 (15.34%)
最大勝トレード2003.30敗トレード-761.08
平均勝トレード197.66敗トレード-578.08
最大連勝(金額)35 (9238.40)連敗(金額)6 (-4392.75)
最大連勝(トレード数)9238.40 (35)連敗(トレード数)-4392.75 (6)
平均連勝9連敗2



■Gewinn V1.1 週末クローズ有り



通貨ペア
EURUSD (Euro vs US Dollar)
期間1時間足(H1) 2006.10.02 00:00 - 2017.11.29 23:00 (2006.10.01 - 2017.11.30)
モデル全ティック (利用可能な最小時間枠による最も正確な方法)
パラメーターSep00=""; MagicNumber=28980001; IsCountdong=false; SpreadFilter=5; MaxPosition=4; Comment="Gewinn9_EURUSD"; Lot=0.5; Sep01=""; MaxProfit=400; StopLoss=150; IsTrailing=true; TrailingStartPips=150; TrailingPips=80; IsBreakEven=true; BreakPips=30; ProfitBigBar=true; BigBarP=250; ProfitAlfa=4; MaxOpenBars=240; CloseWeekEnd=true; Sep02=""; Aggressiveness=1; SignalCloseUpper=30; IsFractalCheck=false;
テストバー数70024モデルティック数157456078モデリング品質90.00%
不整合チャートエラー0
初期証拠金10000.00スプレッド20
純益51265.79総利益99841.68総損失-48575.89
プロフィットファクタ2.06期待利得86.02
絶対ドローダウン3608.74最大ドローダウン4876.94 (37.46%)相対ドローダウン42.92% (4805.14)
総取引数596売りポジション(勝率%)323 (78.33%)買いポジション(勝率%)273 (85.35%)
勝率(%)486 (81.54%)負率 (%)110 (18.46%)
最大勝トレード2001.58敗トレード-761.32
平均勝トレード205.44敗トレード-441.60
最大連勝(金額)29 (2504.85)連敗(金額)6 (-1851.36)
最大連勝(トレード数)9146.84 (19)連敗(トレード数)-2993.68 (4)
平均連勝7連敗2


「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program
Trading View プロフィール

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。

2017年12月7日木曜日

[MT4インジケータ]通貨強弱インジケータ アップデート

通貨強弱インジケータその5を含めて、FX-ONのファイルをアップロードしました。
ソースコード込みで無料です。

FX-ONのダウンロードはこちらから。
ダウンロード

[MT4インジケータ]通貨の強弱をUSDを基準に表示する。その2
[MT4インジケータ]通貨の強弱をUSDを基準に表示する。その3
[MT4インジケータ]通貨の強弱をUSDを基準にその4とFX-ONへのアップロード

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program
Trading View プロフィール

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。

2017年12月5日火曜日

[MT4インジケータ]通貨強弱その5・・・って(笑)


■通貨強弱・・・その5(笑)

Tiwtterのフォロアーさんで、週の頭からの変動率でトレードされている方から、週の頭をベースにした通貨強弱インジケータほしーなーとかリクエストをいただきましたので、、、軽くできるかなと思っていたら、思ったより苦労しました。

画像はLSMA+通貨強弱です。LSMAも少々手間がかかったので500円で販売しています。
ダウンロード
線形回帰をベースにした移動平均で、なかなか優秀で活用しています。

おっとちょっとCM挟んでしまいました。

日、週、月の頭を基準にした、価格に対する変動量を通貨毎に算出してまとめてグラフ化したものです。

チャートを出す際は、日足、週足、月足の履歴を見ます。
一度も出したことない時間足のチャートがあると、正しくインジケータが表示されませんのでご注意ください。
デフォルトの設定ですと、EURUSD、GBPUSD、AUDUSD、NZDUSD、USDCAD、USDCHF、USDJPYの日足、週足、月足のチャートを一度は表示する必要があります。
(一度表示して、適当に過去にさかのぼったら、そのチャートは閉じてもらって大丈夫です)

おまけで、分散の1σと2σのラインを表示しています。
日頭設定チャートだとなんの役にも立ってなさそうです(^^;
週頭の設定だとそれなりに参考になるラインとなるように思われます。全然検証してないですが、水曜日の段階で2σを超えている所は、利食いして、反対方向に動き始めたところで逆張り仕掛けても良さそうに思えます。

・・まぁポンドは暴れん坊ですが・・(汗

チャート時間補正しての表示などは対応していません。
素直にアメリカ夏冬時間GTM+2/+3の業者で使用されることをおすすめします。

なんか、このインジで有用なトレードアイデアあれば、ぜひ教えてください〜。情報お待ちしています。

ソースコードは記事の最後です。


[MT4インジケータ]通貨の強弱をUSDを基準に表示する。その1

[MT4インジケータ]通貨の強弱をUSDを基準に表示する。その2
[MT4インジケータ]通貨の強弱をUSDを基準に表示する。その3
[MT4インジケータ]通貨の強弱をUSDを基準にその4とFX-ONへのアップロード

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program
Trading View プロフィール

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。

2017年12月2日土曜日

[Gewinn]週末クローズOn/Offによるバックテスト

FX-ONのコミュニティで依頼がありました、週末クローズ設定On/Offによるバックテスト結果です。

2017/12/03追記
なお、私は、週末クローズOnでトレードしています。主に精神上の問題です^^;;
(何かあった時に手動クローズできないのは精神的によろしくないと思って・・。)

この前のドローダウンを考えて、同じ価格帯で複数ポジションを持たないような制御を付け加えて、週末クローズ無しでもドローダウンをある程度抑えることができないか検討します。
やっていましたが、芳しくないどころかドローダウン変わらずで利益が半減してしまいました。どうも同じ所をウロウロしている時は勝負したほうが良さそうです。


■週末クローズON

通貨ペアEURUSD (Euro vs US Dollar)
期間1時間足(H1) 2006.10.02 00:00 - 2017.11.24 23:00 (2006.10.01 - 2017.11.30)
モデル全ティック (利用可能な最小時間枠による最も正確な方法)
パラメーターSep00=""; MagicNumber=28980001; IsCountdong=false; SpreadFilter=5; MaxPosition=4; Comment="Gewinn9_EURUSD"; Lot=0.5; Sep01=""; MaxProfit=400; StopLoss=150; IsTrailing=true; TrailingStartPips=150; TrailingPips=80; IsBreakEven=true; BreakPips=30; MaxOpenBars=240; CloseWeekEnd=true; Sep02=""; Aggressiveness=1; SignalCloseUpper=30;
テストバー数69951モデルティック数157159849モデリング品質90.00%
不整合チャートエラー0
初期証拠金10000.00スプレッド20
純益48512.84総利益99184.52総損失-50671.68
プロフィットファクタ1.96期待利得75.45
絶対ドローダウン2827.92最大ドローダウン5477.22 (32.24%)相対ドローダウン39.02% (4588.86)
総取引数643売りポジション(勝率%)344 (78.49%)買いポジション(勝率%)299 (83.95%)
勝率(%)521 (81.03%)負率 (%)122 (18.97%)
最大勝トレード2001.54敗トレード-767.25
平均勝トレード190.37敗トレード-415.34
最大連勝(金額)30 (3724.47)連敗(金額)6 (-1852.68)
最大連勝(トレード数)8982.90 (21)連敗(トレード数)-2993.84 (4)
平均連勝7連敗2





■週末クローズOFF

通貨ペアEURUSD (Euro vs US Dollar)
期間1時間足(H1) 2006.10.02 00:00 - 2017.11.24 23:00 (2006.10.01 - 2017.11.30)
モデル全ティック (利用可能な最小時間枠による最も正確な方法)
パラメーターSep00=""; MagicNumber=28980001; IsCountdong=false; SpreadFilter=5; MaxPosition=4; Comment="Gewinn9_EURUSD"; Lot=0.5; Sep01=""; MaxProfit=400; StopLoss=150; IsTrailing=true; TrailingStartPips=150; TrailingPips=80; IsBreakEven=true; BreakPips=30; MaxOpenBars=240; CloseWeekEnd=false; Sep02=""; Aggressiveness=1; SignalCloseUpper=30;
テストバー数69951モデルティック数157159849モデリング品質90.00%
不整合チャートエラー0
初期証拠金10000.00スプレッド20
純益56400.29総利益125805.53総損失-69405.24
プロフィットファクタ1.81期待利得69.89
絶対ドローダウン1894.56最大ドローダウン6577.87 (16.28%)相対ドローダウン32.50% (3902.62)
総取引数807売りポジション(勝率%)427 (83.61%)買いポジション(勝率%)380 (85.26%)
勝率(%)681 (84.39%)負率 (%)126 (15.61%)
最大勝トレード2003.08敗トレード-767.25
平均勝トレード184.74敗トレード-550.84
最大連勝(金額)40 (5823.38)連敗(金額)6 (-4399.90)
最大連勝(トレード数)10432.84 (39)連敗(トレード数)-4399.90 (6)
平均連勝9連敗2


「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program
Trading View プロフィール

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。

2017年12月1日金曜日

[MT4インジケータ]通貨の強弱をUSDを基準にその4とFX-ONへのアップロード

皆様、週末ですね。ついに今年も最後の月となりました。
昨日のBTC祭りといい、今年はとにかくビットコインのとしでしたね。私は全く手を付けてなかったのですが、世の中ビットコイン長者と破産者をたくさん出したようで・・・。

まぁさて置き、USDを基準とした通貨強弱のラストです。
予告通り乖離率をベースに順位付けしたチャートを作成しました。

上が昨日のインデックス、下が乖離率ベースです。

どうでしょうか?正直ノリで作ってみただけと言った感じなので、研究もなにもないです。いまからですね。ただ、インデックスと比較すると頂点がはっきりでるのと、実際のピークアウトかなり前に乖離率はピークアウトするので、シグナルが早いように思われます。

その意味では、比較先となる現在価格に対する平滑化をもう少し大きくかけてみてもいいのかもしれません。
比較先終わり値に対する平滑化を10にしてみたチャートと比較してみましょう。


上が平滑化期間4、下が10です。乖離率ベースなのは同じです。
きざきざが収まった分、かなり見やすいチャートになっていますね。

さて、、ここで一点いままでのチャートと少し元データが異なる事に気がついた方はもう目を皿のようにしてチャートを見ている人だと思います。

今回の画像はNZDを省いてXAUSUD(金ドル)を加えています。物価代表として金に登場してもらいました。日本の業者では難しいのですが、AlpariやXMなどではMT4で金ドルもトレード可能ですので、このようなチャートも作成できます。画像のチャートの中では、ドル安の流れの中で、金が先にピークアウトしていたりするので、なかなか参考になりそうな気がしています。

・・・同じようなインジケータばかり4つも作成してしまいました(笑)

どのように役に立つかはいまからですが、EAに取り込んでいきたいと思っています。作成したチャートはFX-ONにアップロードしました。

・・・・久しぶりにアップロードしたら、製品紹介ページにすら飛べずにどうやってURLだせばいいのかかなり悩んだ・・・。どーいうこと??汗。とりあえずURLの登録ID書き換えて飛びました・・・・。
一旦諦めて、昔の通貨強弱インジケータのファイルをアップデートしました。

FX-ONのダウンロードはこちらから。
ダウンロード

ソースコードは記事の最後に乗せています。
[MT4インジケータ]通貨の強弱をUSDを基準に表示する。その2
[MT4インジケータ]通貨の強弱をUSDを基準に表示する。その3
[MT4インジケータ]通貨の強弱をUSDを基準にその4とFX-ONへのアップロード

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program
Trading View プロフィール

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。

2017年11月30日木曜日

[MT4インジケータ]通貨の強弱をUSDを基準に表示する。その3

[MT4インジケータ]通貨の強弱をUSDを基準に表示する。その1
[MT4インジケータ]通貨の強弱をUSDを基準に表示する。その2

さて、第3弾です。
今回もいきなり結果画像から紹介です。

上から、その1、その2、その3です。
その3では、その2の結果に対して、一度8つの通貨の平均値を求めてから再度インデックスの計算を行っています。
USDに対する値ですので、その2ではUSDは常に100に固定されていましたが、平均値から再度求め直すとUSDに動きが出てきました。


USDとGBPとJPYだけ出した結果です。USDとJPYの逆相関っぷりがよく分かる結果です。クロスした最に、USDが間に挟まっていれば逆に動いていますし、挟まっていないのであれば、同じ方向です。
これはEURなどでは見られないJPYとGBPだけの特徴のように思われます。日本人どれだけGBPJPY好きなんだ・・・・(笑)

なお、このチャートは、描画不要な通貨をNoneとすることで表示しています。描画は不要でも計算には必要ですので、設定の通貨文字列を減らさないようお願いします。

GBPを除いて、通貨のドルに対する大体の動き幅は決まっていますので、ある程度逆張りの参考にもなりそうです。っていうよりこのチャートみているとGBPJPYのトレードしたくなりますw
まだ、全然研究してないですが、円高になり始める前に、ポンド高がピークアウトしていたり逆だったりと、少しだけ時差があるようです。ポンドが下がっているのに円安に触れていたら天井の合図とかそんな感じに使えそうな予感です。

さて、このインジケータはN本前の値を使用しています。価格差を使用して計算しているのですが、最後のインジケータは、インデックスの平均に対して再度インデック化を行っています。計算式は、乖離率を求める場合を一緒ですので、ようは通貨間で乖離率を計算した形になっています。

それなら、いっそ元データも乖離率でいいのではないかな?ということでおまけで移動平均乖離率ベースのインジケータも作成してみることにします。まぁあんまり変わらないかもしれませんが、N本前のデータと比較するインジケータと比べると最新のデータも含むデータを元データとしていますので、より何かに早く反応する・・かもしれません^^;;まだ全然実験もなにもしてないので感覚的な話です。

FX-ONへのアップロードはある程度準備が必要ですので、週末にやります〜。しばしお待ちを。

ソースコードは記事の最後です。

[MT4インジケータ]通貨の強弱をUSDを基準に表示する。その2
[MT4インジケータ]通貨の強弱をUSDを基準に表示する。その3
[MT4インジケータ]通貨の強弱をUSDを基準にその4とFX-ONへのアップロード


「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program
Trading View プロフィール

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。

ソースコードはこちらから

2017年11月29日水曜日

[MT4インジケータ]通貨の強弱をUSDを基準に表示する。その2

昨日の続きです。
[MT4インジケータ]通貨の強弱をUSDを基準に表示する。その1



上が昨日作成した現在時刻からN本前の点を100とした通貨の推移を描画したものです。
下が、描画対象のバーのN本前を100とした通貨の推移を描画したものです。

バーの最終値のみをひたすら書き続けた結果となります。上はN本前からどんどん幅が広がっていく感じの描画がされますが、下はドルに対して通貨全体の値動きがどのように推移したのかが延々描画されていく形です。

USDを基準にした時に、どのように動いているのかは眺めて、新しい戦略が思い浮かぶといいなぁ。例えばこんな感じ。

■USD,EUR,JPY,GBP H4
ふらーと眺めてみると、JPYとGBPの逆相関が結構目立ちます。
円高=ポンド安、円安=ポンド高

です。よっぽどGBPJPYのクロス通貨でのトレード量が多いのか、島国だからなのかはわかりませんが、EURUSDなどに比べると、USDJPYとGBPUSDが逆方向(チャート的には同じ方向、USDJPYにおける円高と、GBPUSDにおけるポンド安はどちらも下方向に動く)によく動いている事がわかります。具体化はできませんが、円とポンドのインデックスラインのクロスは、なかなか色々示唆していそうです。

一点注意点です。複数通貨の履歴が必要ですので、履歴が足りていない通貨があると表示がおかしくなります。
下のチャートは、USDJPYの履歴が足りなくて描画がおかしくなった例です。

このような場合は、対象となっている通貨ペアをチャートで開いて、スクロールバーを一番最後まで持っていて過去データをダウンロードするようにした後に再度インジケータをセットしてみてください。

ここまで来るとオリジナルっぽいインジケータになってきたでしょうか?
さて、後一本あります。正直役に立つかどうかわかってないのですが、価格の行き過ぎを見ようとおもった場合、インデックス化だけではなくドルに対する強さの中心値に対するばらつきでも見てみたいなーと。8つの通貨のインデックス値の平均からの乖離が見えるインジケータを最後に作りたいと思います。
作ろうとインジケータのいい所は、他の過去データからの乖離率と比較すると、最新時点で8つも対象となるデータがある所です。より乖離率を元にした逆張りが有効ではないか!と期待している所です。

今日のアップしているインジケータで結構作り終えていますので、MT4プログラムの勉強をされている方は例題の代わりにチャレンジしてみてください^^


[MT4インジケータ]通貨の強弱をUSDを基準に表示する。その2
[MT4インジケータ]通貨の強弱をUSDを基準に表示する。その3
[MT4インジケータ]通貨の強弱をUSDを基準にその4とFX-ONへのアップロード


「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program
Trading View プロフィール

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。


ソースコードはこちら

2017年11月28日火曜日

[MT4インジケータ]通貨の強弱をUSDを基準に表示する。その1

うーん。Gewinn9君は年末バタバタですね。
週末クローズONにしていると金曜日にポジションを持たない為、リアル運用の方はそれほど悪い成績になっていませんが、FX-ONのフォワードグラフはひどい形になってしまいました。

さておき、本命のEA開発に向けて複数通貨の関連性に注目している話を以前しました。
[MT4インジケータ]通貨の強弱を表示する。

この時には、移動平均を使用して大きな流れの中での強弱を判定しましたが、瞬間的な値を含む強弱も逆張りという視点では重要です。
そこで、まず第1段階として、ある特定の点を100とした場合の価格の推移を描画したいと思います。

こんな感じです。

距離が離れている通貨ほど大きな動きになっています。今で言うとGBPAUDが一番大きな値動きをしているということになります。
ドルに対して一斉に価格が同じ方向に動いた場合はドル中心、特定の通貨だけの場合は、その通貨固有の問題と言った形で、ドルか個別か?という判定にもなりそうですね。

ソースコードを修正すると、例えばJPYを中心としたインデックスも作成可能かと思います。世界の通貨はドルを中心にしているので、まずはドル中心で作ってみました。

ちなみに、世の中には同じインジケータがたくさんありますので、敢えてダウンロードするより、もっと使われているインジケータを利用されるのが良いと思います(CCFpとか・・)。汗汗。。
自作したい方で、自分で改造するサンプルにしたいという人向けです。

なお、平滑化として、元データにLWMA(4)のデータを利用しています。

ソースコードはブログの最後の方に記載してあります。
FX-ONにはもう一個の方のインジケータを作ってからセットであげたいと思います。

で、もう1個なのですが、今日作ったインジケータはドルに対するインデックスがみんな100になる地点から描画しています。
ですので、ある特定期間より前は描画していません。
これをひたすら最終値だけ描画し続けたらどうなるかな?というのが次の記事の予定です。(文章で書いても意味分からないですね・・・。次の記事でしっかり説明したいと思います・・)

[MT4インジケータ]通貨の強弱をUSDを基準に表示する。その2
[MT4インジケータ]通貨の強弱をUSDを基準に表示する。その3
[MT4インジケータ]通貨の強弱をUSDを基準にその4とFX-ONへのアップロード



「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program
Trading View プロフィール

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。


 ソースコードはこちら