MT4のプログラムMQL4で、一目均衡表の関数iIchimoku()で、遅行スパン(遅行線)の戻り値がどうもおかしい。
いつも0が返ってくるんです。その対処方法をまとめてみました。MT5(MQL5)も同様の原因です。
iIchimokuの関数
一目均衡表の値を取得する関数の仕様は以下のとおり。
1 2 3 4 5 6 7 8 9 |
double iIchimoku( string symbol, // 通貨ペア int timeframe, // 時間軸 int tenkan_sen, // 転換線期間 int kijun_sen, // 基準線期間 int senkou_span_b, // 先行スパン期間 int mode, // ラインインデックス int shift // シフト ); |
六番目の引数modeで取得する種類が変わります。
ID | 値 | 詳細 |
---|---|---|
MODE_TENKANSEN | 1 | 転換線 |
MODE_KIJUNSEN | 2 | 基準線 |
MODE_SENKOUSPANA | 3 | 先行スパンA |
MODE_SENKOUSPANB | 4 | 先行スパンB |
MODE_CHIKOUSPAN | 5 | 遅行線 |
サンプルコード
1 2 3 4 5 6 7 8 9 |
//一目均衡表の値 double tenkansen = iIchimoku(NULL,PERIOD_CURRENT,9,26,52,MODE_TENKANSEN,0); double kijunsen = iIchimoku(NULL,PERIOD_CURRENT,9,26,52,MODE_KIJUNSEN,0); double chikousen = iIchimoku(NULL,PERIOD_CURRENT,9,26,52,MODE_CHIKOUSPAN,0); //1バー前 一目均衡表の値 double tenkansen_1 = iIchimoku(NULL,PERIOD_CURRENT,9,26,52,MODE_TENKANSEN,1); double kijunsen_1 = iIchimoku(NULL,PERIOD_CURRENT,9,26,52,MODE_KIJUNSEN,1); double chikousen_1 = iIchimoku(NULL,PERIOD_CURRENT,9,26,52,MODE_CHIKOUSPAN,1); |
遅行スパンだけ0が返ってくる
Comment関数でチャートに表示させてデバッグしてみると
遅行スパンだけ常に0。1バー前の値も0.
最初は、MT4に不具合があると思いました。
あれこれ、iIchimoku関数の情報調べたんですが、全くヒットせず。
ほんっと、参りましたが、海外の方で良い情報が。
チャートをよく見ろ!。26バー前で終わる
遅行スパンは26バー前の情報が表示される
これが全てですね。
一目均衡表の理論を知っていれば何の問題もない事でした^^;
分からない方は、外為オンラインのこのページで詳しく解説してました。ご参考を。
正しいサンプルコード
最後の引数部分はshift(何本前のバー)の値なので、これに26とすれば取得できるはず。
1バー前は27ですね。
1 2 3 4 5 6 7 8 9 |
//一目均衡表の値 double tenkansen = iIchimoku(NULL,PERIOD_CURRENT,9,26,52,MODE_TENKANSEN,0); double kijunsen = iIchimoku(NULL,PERIOD_CURRENT,9,26,52,MODE_KIJUNSEN,0); double chikousen = iIchimoku(NULL,PERIOD_CURRENT,9,26,52,MODE_CHIKOUSPAN,26); //1バー前 一目均衡表の値 double tenkansen_1 = iIchimoku(NULL,PERIOD_CURRENT,9,26,52,MODE_TENKANSEN,1); double kijunsen_1 = iIchimoku(NULL,PERIOD_CURRENT,9,26,52,MODE_KIJUNSEN,1); double chikousen_1 = iIchimoku(NULL,PERIOD_CURRENT,9,26,52,MODE_CHIKOUSPAN,27); |
結果
無事取得できました。
僕みたいな、プログラマー上がりの方は、かなりハマってしまうんじゃないでしょうかね。だいぶあれこれ検索して調べましたもん。
ご質問はコメント欄からお願いします