トレードの後、一時停止するほうが良いか?
今月に入り、短い時間(数分)の間に多くのトレードが発生し、損失が増えるという現象が出ています。
そこで、一時停止するべきかどうか過去のトレードを基に検証してみました。(バックテストでは「停止時間を設けないほうが利益が増える」という結果になります)
※ZigzagBreakoutEAって何!?という方は、下記の記事をご覧ください。
まず、目立ってトレード回数が増えて悪化している15分足です。
TitanFX Blade口座を使い始めた今年4月からのトレードのうち、前のトレードがクローズされた後、10分以内に次のトレードが開始されたトレードの結果を抽出したものです。
そして、赤枠が11月に入ってからのトレードです。
今月に入ってから1分以内に次のトレードを開始したケースが非常に増えています。
全体の合計では+9pipsですが、11月だけでみると-2.6pipsになっています。
大した問題ではないようにも見えますが、この損益には手数料が含まれていません‥。数字以上に損失は大きいと思います。
11月から発生しているこの現象は一時的な問題である可能性もありますが、もしブレイクアウトの逆指値付近を行ったり来たりを繰り返し続けて、数十回、数百回実行したら・・?というリスクを考えるとちょっと怖いですよね‥。
これだけでも十分「停止時間を設けるべきだろう」と結論付けるに十分ですが、一応、1時間足も確認しました。
11月のトレードがほとんどです。-0.6pipsの損失になっています。
設定(パラメーター)について
一時停止する設定(パラメーター)であるTimeToPauseAfterOrdering(s)を0より大きくするとバックテスト結果は悪化するのですが‥
15分足で0秒~600秒、60秒刻みで最適化してみると300が良いようなのでまずはこの値で運用してみようと思います。
1時間足では60秒が損益では一番良いですが、15分と同じ300にして運用してみます。(誤差レベルですが一番PFが高いです)
まずはこの設定で仮運転してみて、特に問題なければ正式採用する予定です。
以上、ZigzagBreakoutEAで「トレードの後、一時停止する方が良いかどうか」の検証でした。
コメント
はじめまして。
二階建餅太郎と申します。
TimeToPauseAfterOrdering(s)の設定は必須かと存じます。
emijaさんのおっしゃったような、短時間で数十回、数百回実行して破綻したシステムを知っているからです。
たまたま、Myfxbookで見つけシステムで監視していた「5Gulden_2.0」というシステムです。ロジックの詳細は分かりませんが、0-2秒で平均5Pips抜くもので、2012.2から稼働しており2016.6時点で800%程の収益をあげておりました。
4年で8倍ですから優秀ですね。
ところが、ある日たったの12分で破綻してしまいました。2016.6.24。英国民投票でEU離脱が決まった日です。
http://www.myfxbook.com/members/5_Gulden/5gulden-20/830573
12分間で260回もの取引を行っていますね(–;
恐ろしすぎる。。。
ググるとfacebookで顧客から資金集める広告打ってますね。履歴見ると定期的に出金もしているようですので、破産は逃れたかもしれませんが。。。
ところで、自分への戒めとして書きますが、私も今月はZigzagBreakoutEAの11/9、11/25 の挙動で損失を出しました。(手数料負けが痛かった)
ただ、「5Gulden_2.0」の悪夢を知りながら、どうして、少なくても11/9の時点で停止するなり、ロット落とすなりしなかったかですよね。
大いに反省しなくては。
最後にemija様。
いつも、迅速な対応に感謝申し上げます。
今後のEA開発にもご期待申し上げます。
コメントありがとうございます。
自動売買では大量にトレードが発生しても「おかしい」という判断ができないので予想していなかったことが起きることがありますよね・・
11/9の時点では「たまたまかもしれない」と安易に思っていましたが、あの次点で「もし連続して大量の注文がされたら・・」と考えが至らなかったのかと・・
あの時に気がついていれば、二回目は防げたかもしれません‥。
まだまだ至らない点が多々あると思いますが、これからも皆さんに満足して頂けるよう頑張って参ります。
今後もよろしくお願いします。
11/9は米大統領選、11/24・25は感謝祭でスプレッドの拡大が予想されたため、私は両日とも停止していて難を逃れました。
ただ、停止のスケジュールをうっかり忘れることも考えられるため、この機会にTimeToPauseAfterOrdering(s)の設定を導入することにしました。
今後もパラメーターの改良をよろしくお願いします。
停止されていたのですか・・!やはり、スプレッドが拡大するようなイベントでは停止するのが無難ですね‥。
ZigzagBreakoutEAは、今後も改良していく予定です。
FXDD 1分足データ及び左記データから変換した各分足データを使用して2012.1.1-2016.11.25の期間でM15セットファイルでバックテスト。PauseAfterOrderingが、= 0、= 300の場合を比較してみました。
・結果
■PauseAfterOrdering=0
純益 10823.07、総取引数 464
■PauseAfterOrdering=300
純益 8336.88、総取引数 433
・考察
1.取引数だけみるとフィルタリングにより31回の実取引が減っているように見えますが、取引記録を詳細に見ると取引数として計上されないキャンセル分(指値注文⇒指値取消)が23回あるので、実際は54回の注文が減っていました。
2.キャンセルされた54回の注文の直前の注文状況は次のとおりでした。実取引後からの注文が20回(内12回が実取引となったもの)、指値取消後からの注文が34回(内19回が実取引となったもの)。
3.前者は今回のような連続注文⇒損失につながるおそれがあるので除外すべきですが、後者はある意味チャンスを逃しているようにも考えられます。
もちろん、リアルトレードでは、各人の利用環境(通信環境、ブローカー、EA上での許容MAXスプレッド設定値など)が異なることから一概にはいえないかもしれませんが。
4.今回のバックテストでは、ティックデータではなく1分足データしか準備できなかったためか、続けて注文される事象の最大値は2回までしか確認できませんでした。
5.結論(・・・というよりお願いでございます。m(_ _)m)
意図しない発注を防ぎつつ、チャンスを最大にするために、
次のようにプログラムの修正をご検討いただけませんでしょうか。
PauseAfterOrderingの設定は、直前の注文がOrderClose()の場合に作用し、OrderDelete()の場合は作用しない。
以上。長文失礼しました。
ありがとうございます。
なるほど・・たしかに単純にHistoryの最後のCloseTimeを取得しているのでDeleteも対象にされてしまいますね・・・。
承知いたしました。
本件について、なるべく早く修正したいと思います。
TimeToPauseAfterOrderingは、エントリーする直前に、前のエントリーの情報を読み込んで今の時間と前のエントリー時間の差をみているのでしょうか?
逆指値を入れる前にHistoryの最後の行を参照して、クローズした時刻を取得、現在時刻と比較してTimeToPauseAfterOrderingで指定した秒数よりも時間が経過していなければ「逆指値注文を入れない」という処理をしています。
ニ階建餅太郎氏の指摘どおり、単純に最後の行を取得しているためDeleteされた行も対象にしてしまっていますが‥。(これについては修正します)
ありがとうございます。
お忙しいとは存じますが、よろしくお願いいたします。