リペイントする指標にGood bye!

後から見て素晴らしいと思う指標は殆どがリペイントする。実際のトレードにリペイントする指標は使えない。判断を誤らせる。ということでこのサイト自体をリペイントしてリペイントするインジのコードを削除しました。

メリーゴーランドのに乗るのは楽しいけれどトレンド系の景色に飽きたので、次なるメリーゴーランドに進むべくオシレーター指標を探索したいと思います。聖杯探しの旅は続く。

<MT4でのテクニカル分析指標の分類>

  • トレンド系…Bollinger Bands,Moving Average,Ichimoku Kinko Hyo,Average Directional Movemaent Index
  • オシレーター系…Bears Power,Commodity Cannel Index,DeMarker,Force Index,MACD,Momentaum,Moving Average of Oscillator,Relative Strength  Index,Relative Vigor Index,Stochastic Osillator,Williams’Percent Range
  • ボリューム系…Accumulation/Distribution,Money Flow Index,On Balance Volume,Volumes
  • ビル・ウィリアム系…Awesome Oscillator,Accelerator Oscillator,Alligator,Fractals,Gator Oscillator,Market Facillitation Index

間違わないインジケーター

には手品の種がやっぱりあるようです。MetaEditerの図書館でコード漁りしていたら1本めからまけたなあと思わせる3_Level_ZZ_Semafor.mq4というインジケーターを見つけて自作の気持ちが折れそうになったんだけど、カキコ見たらやっぱりリペイントするみたいです。後から見ると完璧なインジケーターにリペイントはつきものなのかも知れません。1,2,3のレベルを書き変えるようなのです。

追記:良く見てたらレベルだけじゃなく。バー超えて移動もするようでやっぱりこれは手品ですね。間違わないインジケーターより時々間違う手品なしのインジケーターの方が有用性あると思います。2018年1月22日

図書館通いになりそう。

といっても物理的なそれとは違いMetaEditorのツールボックスにある図書館です。コード戦士にとっては宝箱みたいなもの?!誰とかは分かりませんが、ここからコピペして売っている猛者もいそうな気がします。

  • Expert Advisor— エクスパートアドバイザ
  • Indicator— インディケータ
  • Script— スクリプト
  • Library— ライブラリ

BBインジケーター

同じところをぐるぐる回って目が回る。メリーゴーランド回ってるだけじゃどこにも行けないけれど乗ってるだけで結構楽しい。自分の感覚としっくりこないインジケーターは作りたくない。いろいろと試みるがうまくいかない。下手な考え休むに似たり。なんのことないシンプルなボリンジャーバンドの上下を超えた時にサインを出すインジケーターだけが実践で使えそうです。小さきことは良きことかな。サインを判断するのは結局人間ということで良いような気がしますが、やっぱりEA化出来るようなものを作りたいものです。

 

BB_Indicator.mq4

#property copyright "Copyright 2017, WIZSYS Networks Corp."
#property link "https://www.wizsys.net/"
#property version "1.01"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 clrBlue
#property indicator_color2 clrRed
#property indicator_width1 1
#property indicator_width2 1
//--- input parameters
extern int bb_peirod = 38; //ボリンジャーバンドの周期
extern double bb_deviation = 2.0; //ボリンジャーバンドの偏差
double up[];
double down[];
// Custom indicator initialization function
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,up);
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,233);
SetIndexLabel(0,"Up Arrow");
SetIndexBuffer(1,down);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,234);
SetIndexLabel(1,"Down Arrow");
//---
return(INIT_SUCCEEDED);
}
// Custom indicator iteration function
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 limit = rates_total - prev_calculated;
if(prev_calculated==0)limit--;
for(int i=0;i<limit;i++)
{
double bBU_value = iBands(_Symbol,0,bb_peirod,bb_deviation,0,PRICE_CLOSE,MODE_UPPER,i);
double bBL_value = iBands(_Symbol,0,bb_peirod,bb_deviation,0,PRICE_CLOSE,MODE_LOWER,i);
if(bBU_value < High[i]) up[i]=Low[i]; else if(bBL_value > Low[i])
down[i]=High[i];
}
//--- return value of prev_calculated for next call
return(rates_total-1);
}

ソースさらしは恥さらし

恥を覚悟でソースコードをさらしてます。さらすことによってやる気を出そうと思います。下は昔読んでときどき思い出す本です。この中の教えに小さな機能を別々に作って組み合わせて使うこととありました。一つのインジケーターに何でもかんでも合わせて作るのは良くないです。パラメータが10個もあるようなインジケーターを誰が使いたいですか?大失敗のOSマルチックスMULTICSの反対の概念としてユニックスUNIXという素晴らしいOSが生まれたのです。小さく単純なものを作りたいです。

都合の良いように考えるのが常

さらに気付いてしまったこと。それは恥ずかしいコードをさらしてしまったということ。勇み足とはこのことか。もしかして待てよこの意味するところは何なのかを考える余裕がなかったんだと反省することしきり。思えば先人が考えぬいてのインジケーターが綺羅星のごとくあるわけでちょっとの時間でまともなものが出来るわけがない。甘く見すぎ。猿の実験でもランダムに出て来る餌とボタンの関係をしきりに考えるらしい。聖杯探しの旅は終わらない。あるのかないのかさえも判然としないんだけどプログラミングにちょっと本気出さなくてはと思います。

バックテストではわからない

フォワードテストで気づいてしまった。自作インジケーターは嘘をつくということ。なんと最後の矢印の位置をチャートが進むにつれて都合よく変えてしまうのです。見えないバグが本当のバグなんだと改めて思い知ることになった。

ロジック的にはUpとDownの矢印が交互に出るように書いたつもりが同じ向きが2連続して出て再読込をすると1つ目が消えているという症状。バックテストでは気づかなかったが後から見るとそれらしく見えるのです。それらしく見えるインジケーターはそれらしく見えるだけでEA化は無理だと分かる。見えないバグがなくなるまで修正しなければならないことになりました。

追記:頭を冷やして考えるとバグではない。インジケーターが示すことが出来るのは「先のことは分からないけど現時点ではこうです。」なので理屈から言えば当然の結果なのです。魔法のように見える手品には種がある。バグなら修正できますがバグでないなら修正できないです。学習機能なしインジケーターの限界なのだと思います。

MQL4 Tutorialだけじゃきつい。

偉そうにMQL4 Tutorialを参考にプログラミング始めようみたいなこと書いたんだけどハッカーはいざしらずプログラミングの素人には無理げじゃないと思います。そこでKindle版なんだけど豊嶋久道氏の「新MT4対応 FXメタトレーダープログラミング入門」を紹介しておきます。結構わかりやすいんじゃないかなと思います。

インジケーターの設定値について

これは反省なんだけどインジケーターに独りよがりの特殊な設定値を工夫してもあまり意味がないような気がしてきた。もともとだめなEAで無理やり利益を出せる設定値をさがすようなものなんだと思う。大多数のトレーダーが見ているインジケーターの設定値と同じものを見ていないと相場の動きとのコミュニケーションが取れない。チャートの向こう側にいる大勢のトレーダーと同じものを見つつ解釈の違いによって優位に行動しなければならない。同じチャートを見つつその他大勢と行動が一緒では利益を上げることはできないという点が難しいところなんだと思う。

チャートの向こう側が人間とは限らない。AIかも知れない。AIのロジックは人間に解析不能だというが人間のロジックだって解析不能なんだからそれだけAIが人間に近づいてきたということだと思う。解析不能VS解析不能だがビッグデータ処理能力が人間よりAIの方が上というだけ。相場の世界にAIが増えてくればビッグデータ処理能力の優位性も消える。高性能のアルゴが市場で常勝を続けることは難しいのと同じだと思う。生き残ることができるのは圧倒的性能を保つために進化し続けることができるものかはたまたゴキブリやカブトガニのように小さな優位性を保ちつつ同じ手法を守り続けるかどちらなのだと思う。話があらぬ方向に脱線したところでおしまい。