開発:MQL開発9/損切り価格の不具合を修正する | シストレの現実

シストレの現実

インフラ構築のプロが、シストレをゼロから始める記録です。
リーン・スタートアップの考えを取り込み、Expert Adviser を作っていきます。

教えるような大したものではなく、ユースケースの一つになれば幸いです。

さて、今回は以前判明した課題  のうち、
もう一つ ① ロスカットの価格設定の不具合 の解決に取り組みたいと思います。

どういう状況か、もう一回思い出しますが。

バックテスト結果02

画像の使い回しでスミマセン。
明らかに損切り価格の指定がおかしいのは明白です。

どうやら 「過去○本のバーの最安値を取得する」 が全然役に立ってない気がする(仮定)。。。。
なので、下記を追加して取得してみます。

for (int i = 1; i <= StopLossCriteria; i++) {

      if (MinPrice < Low[i]) MinPrice = Low[i];

      Print("CalcStopLoss[",i,"/",StopLossCriteria,"] MinPrice=",MinPrice," Low=",Low[i]);

}

この結果から買い取引が発生した時間帯の出力内容を見てみると。。。

ズレ04


あれ、、、全然、最低価格を更新してくれてない。。。
これは完全にケアレスミスの匂いがする。。。

for (int i = 1; i <= StopLossCriteria; i++) {

      if (MinPrice < Low[i]) MinPrice = Low[i];

}

orz

完全にケアレスミスですね。逆だ、逆!!

というわけで、修正しました。

まず買いの最安値を算出するロジック。
// 過去の最安値を算出する
for (int i = 1; i <= StopLossCriteria; i++) {
  if (MinPrice > Low[i]) MinPrice = Low[i];
}

まず売りの最安値を算出するロジック。
    // 過去の最高値を算出する
    for (int i = 1; i <= StopLossCriteria; i++) {
      if (MinPrice < High[i]) MinPrice = High[i];
    }


そして、前回「スプレッドの考慮忘れてた」という凡ミスを取り返すロジックを組み入れつつ、
この調査の過程で見つけた不具合を修正します。
double CheckStopLossPrice(int MarketTrend) {
(略)
     double Spread        = MarketInfo(Symbol(),MODE_SPREAD); // スプレッド
(略)
     MinPrice = Low[1];
     // 過去の最安値を算出する
     for (int i = 2; i <= StopLossCriteria; i++) {
       if (MinPrice > Low[i]) MinPrice = Low[i];
     }

     // 損切り価格の算出(10pips余裕を持たせる)
       if (MinPrice < Ask)  //現在値が最安値の場合を除く
          StopLossPrice = MinPrice - Spread - 0.1;
	} else 	if (MarketTrend == 2) {
	// 下げ相場=売りポジションの場合 ----------

     // 過去の最高値を算出する
     MinPrice = High[1];
     for (int i = 2; i <= StopLossCriteria; i++) {
        if (MinPrice < High[i]) MinPrice = High[i];
     }

     // 損切り価格の算出(10pips余裕を持たせる)
     if (MinPrice > Bid)  //現在値が最高値の場合を除く
          StopLossPrice = MinPrice + Spread + 0.1;

いや、これほどまでに凡ミスをひけらかすブログもどうかと思いますが

これでバックテストくらいは少しは儲けが出れば良いのですが。。。

ズレ修正の結果


おぉ!利益が出てる!!

思ったロジックで1年分のバックテストを実行して利益が出てるのは感動モノです。

とはいえ、まだ目標利益には一桁足りません。
でも、ドローダウンが大きいのは、逆に可能性を感じます!

今後は利益が出にくい傾向の取引をしないようなロジック修正をしたいと思います。


【修正後のEAソースコード】
GitHub: sysfxtry1/ea01/ea01.mq4