【MQL言語】ロウソク足の大きさで実体制御したい時

【MQL言語】ロウソク足の大きさで実体制御したい時

先月、使っているFXチャートのプラットフォームがおかしくなって結局アンインストールすることになったのですが、その時に今まで書いていたコードが全てなくなってしまって



その後に、コードに修復する作業がとてもめんどくさかったので、ちょっとだけ思い出すのが楽になるよーに備忘録残しときます

今回は依頼者様の手法をコード化したものです

バックテスト代行でお金とってやってる人しか見かけたことないけど、自分の勉強にもなるから僕は基本的に無料で受け付けてます!気になる手法の勝率知りたい人と書いたら気軽に声かけてください!

ちなみに実体制御は、坊主足くらいしかいじったことがなかったので初めての試みで楽しかったです!



エントリールールはこんな感じ

  • 一定期間内での実体の大きさの平均値の2倍でtickを更新した時
  • その足が坊主足もしくは実体に対する髭の割合が85%の時逆張り
  • 判定は5分後判定

もう1つ加える制御があったけど今日作業したのはここまで

ポイントになったのは、実体の平均値の大きさをどうやって取得するかで、MAを使って持ってこれるのは平均値であって、平均の大きさではないし、関数使わないで書いたら計算量多すぎてだるいなーってググってたら、参考になる記事を発見しました!

自作関数を2つ作ってあげて、それでピピぴってやったらいい感じに言語化できたので一部抜粋



まず一定期間における移動平均の大きさを計算する関数

double Average(int MAperiod,int shift) {
    double mah = iMA(NULL,0,MAperiod,0,MODE_SMA,PRICE_HIGH,shift);
    double mal = iMA(NULL,0,MAperiod,0,MODE_SMA,PRICE_LOW,shift);
    return(MathAbs(mah - mal));
    }

それぞれの足の大きさの平均値が持ってこれます!1番目の引数がsymbol()になっててうまくいかなかったけど、そこと少しだけいい感じにしたらいい感じになりました。

値は絶対値で返さないと、マイナス値が入ってきて計算うまくいかないので気をつけまする。

続いて計算できた平均の大きさと比較する評価足の大きさを計算する関数

double EntrySize(int shift){
    double diff = iLow(Symbol(),0,shift) - iHigh(Symbol(),0,shift);
    return(MathAbs(diff));
    }

これで条件式書く時に、EntrySize() > 2*Average()みたいな感じで書いてあげたら、あっという間に評価できましたっ!

参考までに、エントリー箇所と判定足はこんな感じ。



ロウソク足の選び方だけ気をつけてあげて簡単に取ってみたら勝率はめっちゃ普通でした

USD/JPY 5.6回/day
 
1month
low 56.4%
high 55.2%
total 55.8%

1year
low 55.8%
high 54.0%
total 54.8%

EUR/GBP 7回/day

1month
low 54.0%
high 49.4%
total 51.4%

通貨によっちゃ試す価値あるけど、これくらいなら最高値最安値の制御も加えても58%超えないだろうし、ボツなのかなー。



こんな感じでした!実体制御はカーブフィッティングが少ないしシンプルな手法になりやすいので好きですが、数値いじってベストなところを探してみたいと思います!

んじゃまた!