ダイバージェンスEAをiCustomで作る
EA作成中
案外簡単にできたのですが、デバッグしているとインジケータのデータが細切れに途切れてしまう現象が・・・
一旦MT5を落として、立ち上げなおすと何とか動作するようになりました。
同じインジケータの違うバージョンを同名で立ち上げていると誤動作するようですね。
デバッグの時には気を付けよう。
iCustomのオーダー
オーダー部分は、MT5のExampleEA(MACD Sample.mq5)から取り出して使ったので、iCustomでインジケータのデータを取り込みオーダーする部分のみ実装すればOKでした。
下のコードで「最大ヒストリーバー」以降は、インジケータのパラメータです。
ex_ind_handle = iCustom(
Symbol(),
Period(),
"DiverEye5", // インジケータ名称(ファイル名)
1000, // 最大ヒストリーバー
0, // チャート表示選択
true, // オーダーのみ表示
true, // ダイバージェンス両表示
macdDivSignal, // MACDダイバージェンス
shortMacdPeriod, // 短期MACD期間
longMacdPeriod, // 長期MACD期間
divMacdPeriod, // MACD ダイバージェンス判断期間(期間より大きく)
stochasDivSignal, // ストキャス ダイバージェンス
stochasMidPeriod, // ストキャス期間
stochasMidSlow, // ストキャス スローイング
stochasViewThreshold, // ストキャスしきい値(ダイバージェンス)
diverStochasPeriod // ストキャス ダイバージェンス判断期間(期間より大きく)
);
DiverEye5インジケータでは、バッファ0にロングオーダーサイン、バッファ1にショートオーダーサインを表示しています。なので、iCustomの戻りハンドルを使用して、バッファ0と1をコピーしてきます。
その最新インデックス(0)が有効な値の場合は、オーダーサインになります。
if (CopyBuffer(m_handle_ind, 0, 0, 1000, m_long) != m_period)
{
Print(" CopyBuffer error !! ");
return false;
}
if (m_long[0] != 0 && m_long[0] != EMPTY_VALUE)
{
Print("long = ", m_long[0]);
return 「ロングのオーダー」;
}
if (CopyBuffer(m_handle_ind, 1, 0, 1000, m_short) != m_period)
{
Print(" CopyBuffer error !! ");
return false;
}
if (m_short[0] != 0 && m_short[0] != EMPTY_VALUE)
{
Print("short = ", m_short[0]);
return 「ショートのオーダー」;
}
それでどうなの?
いろいろな通貨ペアで試しましたが、USDJPYの1時間足が一番いい結果でした。
去年1年間でバックテスト・フォワードテストを行いました。
パラメータ最適化をしています。Lotは0.1固定です。
バックテスト期間(1年の2/3)では微益が出ました。勝率は辛うじて50%を超えています。
フォワード期間(1年の1/3)でも微益が出ました。勝率は56%ぐらいです。
グラフで見るとこんな感じ。バックテストからフォワードテストに移るときに金額がリセットされています。(2019年8月中旬で残高が100000$にリセットされています)
他の通貨ペア(EURUSD、GBPUSD、CADJPY)は最適化してもプラスになっていません。
他の時間足(5分、15分、30分)は微益でしたが、1時間足が一番いい結果でした。
1時間足なので1年間83オーダーしかしていません。インジケータの時に説明した、山谷の判断ロジックを改善すれば、オーダー数は上がると思います。が・・・それがいい結果になるかどうかはわかりません。
(_ _|||)
あとクローズサインをインジケータでは表示しているのですが、EA側では全く違うクローズロジックになっています。
これも損益に関係してくると思います。
次にやること
やはりMT5でのバックテストは良いですねー、MT4よりも相当早い気がします。
最適化やバックテストを行うと、自動でパラメータや設定を保存しておいてくれるのもGOODです。
フォワードテストで検証できるのも良いし。
これで、移植さえ簡単なら・・・( ̄へ ̄||)
このEAのままでは使い物にならないので、次にやることは、
- 山谷の判断ロジックを改善する。
- クローズサインでクローズするようにする。
特に「クローズサインでクローズ」は他のインジケータを作ったとき必須になるので、実装しておきたいですね。
連休中にはできないかなぁ・・・( ̄ー ̄;)ゞ
カルマンフィルタの改造もしたいし、機械学習の組み込みもしたいなぁ、休みがあと1ヵ月あればなぁ。
Oo。。( ̄¬ ̄*)
(そんなことしたら生活できませんてw)
- 関連記事
-
- EA用の機械学習おさらい (2020/05/05)
- ダイバージェンスEAをiCustomで作る2 (2020/05/04)
- ダイバージェンスEAをiCustomで作る (2020/05/02)
- カルマンフィルタEAでバックテスト (2020/05/01)
- まずはダイバージェンス・インジケータ (2020/04/30)
コメント