MT4EA 週末クローズ
MT4で稼働中させている自作EAが年初から好調です。
いまのところ14勝1敗1分で+21,022円となっています。このEAこのままでも悪くはないのですが、ちょっと気になる欠点があります。それは、ときおり2〜3連敗が発生するところです。目をつぶって動かすのも悪くはないのですが、EA作りの勉強にもなるので2つ手をうってみました。
そのひとつが週末クローズです。
相場が乱高下すると損きりを連発することが多いので、週末・金曜日の午後以降新規ポジションを止める関数を作ってみました。
週末クローズ関数の書き方と効果
先ほどのEA一年間のバックテスト結果です。
この主要部分を抜き出すと以下のようになります。
- 期間利益:679.78
- PF:1.42
- 連敗ー120.74(最高4連敗)
- 最大ドローダウン:368.32
- 売買回数:149回
最高4連敗なのですが、バックテスト結果をみると、2連敗・3連敗が結構な頻度で発生するのでなんとか減らしたいと考えていました。このEAは、金曜日には稼動を止めています。これは、金曜深夜から土曜日の朝方にかけて相場が荒れ易く、スプレッドも開き易い傾向があり、収支を悪化させている要因と思われたからです。
でも、手動でやっていました。そのうち、この作業は自動化できるんじゃなかろうかと思い始めて挑戦してみました。そもそも金曜日に止めるのが本当に有効かどうかわからないので検証もしたいですしね。
そこで数日かけてつくったのがこの関数です。上記のプログラムに追加したのが以下の関数です。
//時間制限。金曜日15時以降新規注文なし
int Zikanfilter(int magic)
{
int zikan=0;
if(DayOfWeek()==5 && Hour()>=7) zikan=1;//金曜日アルパリは8時=日本時間15時の7時間差(MT4に合わせて調整)
if(DayOfWeek()==6) zikan=1;
return(zikan);
}
あとstart()以降の部分にはこの2行
int zikan_yasumi = Zikanfilter(MAGIC);
zikan_yasumi ==0
考える時間は長かったのですが、それは私のEA技術が未熟なだけで、追加必要なプログラムはこの程度でした。金曜日の日本時間15時になるとzikan=1となり、新規売買注文が停止されます。既存ポジションは通常どおりに決済されます。
修正後EAの同条件でのバックテスト結果がこれです。
数字は以下のように変化しました。
- 期間利益:679.78⇒864.3
- PF:1.42⇒1.72
- 連敗ー120.74(最高4連敗)⇒ー90.4(最高3連敗)
- 最大ドローダウン:368.32⇒310.84
- 売買回数:149回⇒125回
赤字が週末クローズ関数を追加したあとのものです。一日売買日数を減らしたので売買回数は減っています。ただ、連敗も減り最大ドローダウンも少し減り、全体の利益も増加しています。バックテスト上での連敗回数も少し減っています。
売買回数が減って利益も増加するという効率的な感じになりました。1分足や5分足を使って比較的マメに決済をしていくEAは、この週末クローズの関数が有効かもしれませんね。
ここのところ、EA作成はGKFXとアルパリジャパンの2つを使っています。GKFXは、EURNOKやEURZARなどのマイナー通貨でも比較的低スプレッドで提供しているためここ独自の取引が出来るので気に入っています。
このEAは、もう少し工夫をしてみるつもりです。