システムトレードの作り方 TOP > システムトレード初級編:移動平均のクロス >
移動平均線クロスの作り方
前回、1本の移動平均線と当日の終値でトレント判定を行いましたが、小さな損失が多く全体でもマイナスのシステムとなってしまいました。そこで今回は2本の移動平均線を使用してトレンド判定をしたいと思います。 ルールは下記のとおりです。
短期の移動平均線が長期の移動平均線より上にあれば上昇トレンド継続中と考え、短期の移動平均線が長期の移動平均線より下にあれば下降トレンド継続中と考える
この移動平均線のクロスを使用したトレンド判定は、期間の違う2本のデータから判定されているので1本の移動平均線で作られたトレンド判定よりもだましは少なくなると予想されます。さっそく移動平均のクロスを作成してみましょう。
過去データをコピーしエクセルに貼り付けます。
1.F1に「10日移動平均線」と入力
2.F11に「 =AVERAGE(E2:E11) 」と入力
3.データの最終行までコピー
4.G1に「30日移動平均線」と入力
5.G31に「 =AVERAGE(E2:E31) 」と入力
6.データの最終行までコピー
7.H1にトレンド判定と入力
8.H31に「 =IF(F31>G31,"上昇","下降") 」と入力
これは短期の移動平均が長期の移動平均よりも上に位置するなら上昇、下に位置するなら下降を意味する。
10.F2でウィンドウ枠の固定を設定する
ここまで進むと下の図のようになる。
移動平均クロスのドテン
移動平均クロスによるトレンド判定を利用して、ドテン売買を検証してみます。売買ルールは下記の通りです。
トレンド判定が下降から上昇へ変わった日の翌日の始値で買い、その後上昇から下降へ変わったら、次の日の始値で決済。売りの場合はその逆で、ドテン売買なので、常時、売買を繰り返していく。
取引枚数は10,000通貨とし手数料は1,050円、スプレッドは0.04円とする。(移動平均のドテンの時とほとんど同じ数式。。。)それでは早速作成!!移動平均クロスによるトレンド判定の続きからです。
☆約定価格を計算
1.ウィンドウ枠の固定をF4に設定する
2.I1に「約定価格」と入力する
3.I49に「=IF(H47<>H48,B49,I48)」
Hのトレンド判定が変わっていたら翌日の始値を約定価格としている
4.データのある最終行までコピーする
☆ポジションの種類を計算
5.J1に「種類」と入力する
6.J49に「=IF(AND(H47<>H48,H48="上昇"),"買",IF(AND(H47<>H48,H48="下降"),"売",J48))」と入力する
前々日と前日のHが変わっていて、かつ前日のHが上昇なら買、前々日と前日のHが変わっていて、かつ前日のHが下降なら売と表示させている。Hに変更がなければ、前日のJを表示させる。
7.データのある最終行までコピーする
☆ポジションの日数を計算
8.K1に「日数」と入力する
9.K49に「=IF(H47<>H48,1,K48+1)」と入力する
これは前々日と前日のHが変わっていたら1を表示させ、変わっていなかったら前日のKに1をプラスする
10.データのある最終行までコピーする
☆決済価格を計算
11.L1に「決済価格」と入力する
12.L50に「=IF(H48<>H49,B50,"")」と入力する
これは前々日と前日のHが変わっていたらその日の始値を表示させ、それ以外は空白とする
13.データのある最終行までコピーする
☆損益を計算
14.M1に「損益」、M2に「10,000」、M3に「1,050」、L3に「0,04」と入力する
取引単位を10,000通貨、手数料を1,050円、スプレッドを0.04円にするため
15.M50に「 =IF(AND(L50<>"",J49="買"),(L50-I49)*$M$2-$M$3-L$3*M$2,IF(AND(L50<>"",J49="売"),(I49-L50)*$M$2-$M$3-L$3*M$2,"")) 」と入力する
Lが空白じゃなくかつJが買だった場合、決済価格Lから約定価格Iを引いてその値に10,000通貨を掛算、手数料、スプレッドをマイナスしている。逆にLが空白じゃなくかつ、Jが売だった場合、約定価格Iから決済価格Lを引いてそのその値に10,000通貨を掛算、手数料、スプレッドをマイナスしている。それ以外は空白としている
16.データのある最終行までコピーする
※取引通貨と手数料に対しては絶対参照($)が使われていることに注意しよう。
前回の移動平均のドテンとほとんど同じ数式だったから問題なくついてこれただろう。
一応、下の図を参考にして作成してほしい。
移動平均クロスのドテンの評価
移動平均クロスのドテン売買のテスト結果を評価してみます。まずは、評価をするための下準備からしていきます。
☆累積損益を計算
1.N1に「累積損益」と入力する
2.N50に「 =SUM(M50)+N49 」と入力する
3.データのある最終行までコピーする
☆最大損益を計算
4.O1に「最大損益」と入力する
5.O50に「 =MAX(N50,O49) 」と入力する
6.データのある最終行までコピーする
☆ドローダウンを計算
7.P1に「ドローダウン」と入力する
8.P50に「 =IF(N50-O50>=0,0,N50-O50) 」と入力する
9.データのある最終行までコピーする
☆評価シートを作成
10.シートを挿入して、名前を評価シートとする
☆勝率と売買回数を計算
11.勝ち回数 (B2)
「 =COUNTIF(usdデータ!M$4:M$1001,">0") 」
損益の中で0より大きな数値を数える
12.負け回数 (B4)
「 =COUNTIF(usdデータ!M$4:M$1001,"<0") 」
損益の中で0より小さな数値を数える
13.売買回数 (B6)
「 =SUM(B2,B4) 」
勝ち回数と負け回数の合計
14.勝率 (A2)
「 =B2/B6 」
勝ち回数÷売買回数
☆期待値を計算
15.利益合計 (C2)
「 =SUMIF(usdデータ!M$4:M$1001,">0") 」
損益の中で0より大きな数値を合計する
16.損失合計 (C4)
「 =SUMIF(usdデータ!M$4:M$1001,"<0") 」
損益の中で0より小さな数値を合計する
17.損益合計 (C6)
「 =SUM(C2,C4) 」
利益合計+損失合計
18.平均利益 (D2)
「=C2/B2」
利益合計÷勝ち回数
19.平均損失 (D4)
「=C4/B4」
損失合計÷負け回数
20.期待値 (D6)
「 =(D2*A2)+(D4*(1-A2)) 」
(平均利益×勝率)+(平均損失×(1-勝率)))
☆最大利益、最大損失、最大ドローダウンを計算
21.最大利益 (E2)
「 =MAX(usdデータ!M$4:M$1001) 」
損益の中での最大値
22.最大損失(E4)
「 =MIN(usdデータ!M$4:M$1001) 」
損益の中での最小値
23.最大ドローダウン (E6)
「 =MIN(usdデータ!P4:P1001) 」
ドローダウンの最小値
↑評価項目は上の図のようになる。
参考にしてほしい。
↑前回の移動平均のドテンの評価と比較。
改善点として注目すべきなのは、勝率と最大ドローダウン。勝率は24.8%(下図)から42.4%(上図)と良くなっているし、最大ドローダウンも-193,900から-83,050へと良くなっている。これは思わく通りにだましを減らすことに成功したことを表している。その証拠に期待値はマイナスからプラスに転じている。もちろんプラスと言ってもわずかなものなので今後の改善に期待したい。
思惑通りの改善が実現するとうれしいものです。次にもっと良くするためには何が必要なのかを考えて、検証する。この繰り返しの作業を苦にせず楽しめる人はシステムトレードに向いているのかもしれない。
過去27年間の検証(移動平均クロス)
前回まで、短期移動平均10日、長期移動平均を30日と固定して検証してきましたが、今回もいくつかの日数の組み合わせについて検証してみました。もちろん、USD/JPN の27年間で!下の図が、短期移動平均を5日から15日(5日ずつ)、長期移動平均を20日から80日(10日ずつ)づらして検証した結果です。
単純に合計だけ見ると、5-60、 10-60、 5-80、 10-20、が比較的いい数字を残しています。ただ、ざっと見てみると、2003年から2006年の期間に赤が目立ちます。試しに直近10年と直近5年について、収益の平均を調べてみましたが、全12の組み合わせ中プラスだったのは、直近10年では3組、直近5年では1組という結果でした。ということは、どの組み合わせも一見利益が出ているように見えますが、どれも10年以上前の利益がその多くの割合を占めているということが言えるでしょう。
次はMACDです。
[スポンサードリンク]






