無料で差し上げます!
システムトレードの作り方エクセルファイル
・MACDのトレンド判定、RSIの作り方
・ストキャスティクスの作り方
・ボラティリティストップの作り方
・トレイリングストップの作り方
損切りの役割
ようこそ!システムトレード中級編へ!!初級編を実践されてきた方は、だいぶエクセルでの検証に慣れてきたのではないでしょうか?でも、初級編はあくまでウォーミングアップ程度にお考えください。なぜなら、いくらテクニカル指標を駆使して勝てるシステムを見つけたところで、それは相場で使えるシステムとは言えません。
では、どうしたら相場で使えるシステムを作ることができるのでしょうか。まずはその疑問にお答えすることからはじめてみようと思います。では、さっそくシステムトレード中級編へどうぞ!!
ここまでいくつかの仕掛けを検証してきたので、大体の見当はついていると思うけど、有名どころの仕掛けの勝率は以外に低い。
FX売買(USD/JPN)
1.移動平均線のドテン売買(25日)・・・23.8%
2.移動平均線のクロスのドテン売買(10日、30日)・・・42.4%
3.MACDのドテン売買(12日、26日、9日)・・・41.0%
この「システムトレードの作り方」でご紹介しているような中長期のトレンドフォローという投資スタンスではこのぐらいの勝率が妥当なところなのである。どんな投資のプロでも、中長期のトレンドフォローワーの勝率は、30~40%くらいなんだそうだ。もちろん投資スタンスが変わればもっと高い勝率を実現することもできるが。。。では、この低い勝率で勝ち続けていくためには、何が必要だろう?
ちょっと考えてほしい。
・・・・・
・・・・
・・・
・・
・
その答えは、小さな損失と大きな利益である。
たとえば、3回連続で負け続けても、1回、1回が小さな損失だったなら、次の4回目、5回目のトレードで大きく勝てれば損失をすべて帳消し、かつ利益をだすことができるだろう。このようなトレードを繰り返していれば、たとえ4勝6敗の勝率40%だったとしても、利益を出すことは可能なのである。
トレンドフォロー型の投資スタンスとは、簡単に言うと波に乗って利益を伸ばしていくということ。 自分の思った方向に波がうねれば、その波に乗り続けて、出来る限り利益を大きく伸ばしていく。しかし、逆の方向に波がうねってしまった場合には、いち早くその波から降りなければならない。 そのいち早く降りる役目をになっているのが、損切りなのである。
また、あらかじめ損切り価格を決めて、逆指値注文を入れておくことにも大きな意味がある。先ほどは、1回、1回の損失が小さなものだったら、4勝6敗でも利益を出せるといった。しかし、逆に1回、1回の損失が大きくなってしまった場合には当然損失を出すことになる。
たとえば、はじめは小さな損失で損切りしようと思っていても、いざその場面が来た時には、もうちょっと待ってれば利益が出るかもしれないからと、その取引からいち早く降りることができなくなってしまう。このようなことは相場に入ったことのある方なら、誰でも経験したことがあると思う。これは、心が弱いからでもなんでもなく、人間の本能的がさせる行動なのだという。
人は本能的に、大きな損失と小さな利益を狙ってしまう性質がある。だからこそ、あらかじめ損切り価格を決めて、初期リスクを限定することには大きな意味があるのだ。また、中長期のトレンドフォローという投資スタンスで、もっとも重要だといわれているのが、初期リスクに対してより大きな利益を得るための投資戦略である。このもっとも重要な要素に先ほど説明した「プロのトレーダーでも30~40%の勝率」という理由が隠されているように思う。
初期リスクを小さくする位置に損切りを設定すれば、勝った時には当然、初期リスクに対してより大きな利益を実現できる。しかし、初期リスクを小さくすれば、すなわち、きつめの損切りを設定すれば、損切りにかかる回数が増えてしまうので勝率が悪くなってしまうのである。 このへんのさじ加減が損切りを設定する時の難しさなのだ。
次回よりいろいろな損切りについて検証していくが、この初期リスクを測定するためにR倍数という評価指標を加えようと思う。 R倍数とは、初期リスクRを1とし、損益の大きさをRの何倍かということをあらわしたものである。例えば、初期リスク1万円の時に、10万円の利益を出したとする。このときのR倍数は10R倍ということになる。R倍数を測定していくことで、初期リスクに対してより大きな利益を得るための投資戦略になっているかをチェックすることができるのだ。
次回からいよいよ損切りのあるシステムトレードの作成に入りたいと思う。高値安値のストップからどうぞ!
「実際に検証を行った結果となりますが、その内容を保障するものではありません。検証結果の正確なデータにつきましては、直接販売者様に確認を取って頂きますようお願い致します。」※参考データ FX検証実践会
直近の高値安値 ポジション編
今回からシステムトレードの損切りについて検証を進めていく。
まずはじめは、直近の高値と安値を損切りラインとする手法を試してみたい。
損切りルールは下記のとおり
買いの場合、過去5日の最安値を損切りラインとする。
売りの場合、過去5日の最高値を損切りラインとする。
今回のシステムトレードは今までやってきたドテン売買のシステムトレードより
複雑になっているためこれから数回にわたって作り方を説明していくことにする。
ちょっとわかりにくい部分もでてくるとは思うが、しっかりとついてきてほしい。
では、さっそくエクセルでシステムトレードを作成していこう!
まずは、以前に作成した移動平均線のトレンド判定を開く。
仕掛け部分の作り方については、移動平均のトレンド判定を参照してほしい。
1.シグナルの計算
・H1にシグナルと入力する。
・H27に「=IF(K27="",IF(AND(G26<>G27,G27="上昇"),"buy",IF(AND(G26<>G27,G27="下降"),"sell","")),"")」と入力する。
これは、今日のトレンド判定Gが前日と異なり、かつ今日が上昇なら、買い(buy)。
逆に下降なら売り(sell)。それ以外は空白という意味。
・これをコピーして、データのある最終行まで貼り付ける。
2.約定価格の計算
・I1に約定価格と入力する。
・最初のシグナルが出た次の日に(例はI37)、「=IF(OR(O36<>"",S36<>""),"",IF(H36<>"",B37,I36))」と入力する。
これは、損切シグナルOと利食シグナルが空白じゃない場合は、空白を表示する。損切シグナルOと利食シグナルSが空白の場合で、更にシグナルHが空白じゃない場合は、その日の始値を表示する。それ以外の場合は前日の価格を表示するという意味。
・これをコピーして、データのある最終行まで貼り付ける。
3.日数を計算する
・J1に日数と入力する。
・最初の約定価格が出た日に(例はJ37)、「=IF(I37="","",IF(I37<>I36,1,J36+1))」と入力する。
これは、約定価格Iが空白の場合は、空白を表示し、空白ではなかった場合で、更に 今日と前日の約定価格Iが違った場合は、1を表示し、同じ場合には前日の日数に1を加算する。という意味。
・これをコピーして、データのある最終行まで貼り付ける。
4.ポジションを計算する
・K1にポジションと入力する。
・最初の約定価格が出た日に(例はK37)、「=IF(J37="","",IF(H36<>"",H36,K36))」と入力する。
これは、日数Jが空白の場合は空白を表示し、空白じゃない場合で、更に前日のシグナルHが空白じゃない場合は、前日のシグナルHを表示し、空白の場合は前日のポジションKを表示させる。という意味。
・これをコピーして、データのある最終行まで貼り付ける。
ここまでついてこれただろうか。
一応、下記の図を参考にしてほしい。
ここまでがポジジョン部分になる。
この後、損切り部分、利食い部分、損益計算部分、R倍数部分と作っていく。
このように一つのシステムトレードをいくつかのパーツに分けて作っていくと理解しやすいし、後から改良する時にもとてもやりやすいのでおすすめ。
直近の高値安値 損切り編
今回は前回に引き続き、直近高値安値の損切りの損切り部分を作成していく。
1.最悪含損を計算する
・L1に「最悪含損」と入力する。
・L2に「10000」と入力する。
これは、枚数を意味する。
・最初のシグナルが出た次の日に(例はL37)、「=IF(K37="sell",(I37-C37)*L$2,IF(K37="buy",(D37-I37)*L$2,""))」と入力する。
これは、ポジション K が sell だった場合、(約定価格 I - 高値 C) × 10000通貨を表示し、ポジション K が buy だった場合、(安値 D - 約定価格 I ) × 10000通貨を表示する。それ以外は空白を表示するという意味。
・コピーして、データのある最終行まで貼り付ける。
2.損切価格を計算する
・M1に「損切価格」と入力する
・最初のシグナルが出た次の日に(例はM37)、「=IF(AND(J37=1,K37="sell"),MAX(C32:C36),IF(AND(J37=1,K37="buy"),MIN(D32:D36),IF(J37="","",M36)))」と入力する。
これは、日数 J が1で、かつポジション K が sell だった場合、過去5日の最高値を損切り価格とする。また、日数 J が1で、かつポジション K が buy だった場合、過去5日の最安値を損切り価格とする。日数 J が空白だった場合は、空白を表示し、それ以外は、前日の損切り価格を表示する。という意味。
・コピーして、データのある最終行まで貼り付ける。
3.損切り額を計算する
・N1に「損切り額」と入力する。
・最初のシグナルが出た次の日に(例はN37)、「 =IF(K37="sell",(I37-M37)*L$2,IF(K37="buy",(M37-I37)*L$2,""))」と入力する。
これは、ポジション K が sell だった場合、(約定価格 I - 損切り価格 M ) × 10000通貨を表示し、ポジション K が buy だった場合、(損切り価格 M - 約定価格 I ) × 10000通貨を表示する。それ以外は空白を表示する。という意味。
・コピーして、データのある最終行まで貼り付ける。
4.損切シグナルを計算する
・O1に「損切シグナル」と入力する。
・最初のシグナルが出た次の日に(例はO37)、「=IF(L37<N37,"損切り","")」と入力する。
これは、最悪含損 L が損切り額 N より小さかった場合、損切りと表示させる。それ以外は空白を表示させるという意味。
・コピーして、データのある最終行まで貼り付ける。
わからなくなった人は、下の表を参考にしてほしい。
1行目を色分けしてみた。
黄色の項目がシステムトレードの損切り部分になる。
損切りを改良したかったら、この部分を変更していけばいい。
直近の高値安値 利食い編
今回も前回に引き続き、直近の高値安値の損切りを作成していく。
今回組み込む利食いルールは、
買いの時、2%上昇したら利食い
売りの時、2%下降したら利食い
では、さっそく作成してみよう!!
1.含み損益を計算する
・P1に「含み損益」と入力する
・最初のシグナルが出た次の日に(例はP37)、「=IF(K37="sell",(I37-E37)*L$2,IF(K37="buy",(E37-I37)*L$2,""))」と入力する。
これは、 ポジション K が sell だった場合、(約定価格 I - 終値 E) × 10000 を表示する。
ポジション K が buy だった場合、(終値 E - 約定価格 I ) × 10000 を表示する。それ以外は空白を表示する。
・コピーして、データのある最終行まで貼り付ける。
2.利食価格を計算する
・Q1に「利食価格」と入力する
・Q2に「2.00%」と入力する
・最初のシグナルが出た次の日に(例はQ37)、「=IF(J37="","",IF(AND(J37=1,K37="sell"),I37*(1-Q$2),IF(AND(J37=1,K37="buy"),I37*(1+Q$2),Q36)))」と入力する
これは、日数 J が空白の時は空白を表示する。日数が1を表示し、かつポジションKがsellを表示した場合、約定価格の98%の価格を表示する。日数が1を表示し、かつポジションがbuyを表示した場合、約定価格の102%の価格を表示する。ことを意味する。
・コピーして、データのある最終行まで貼り付ける。
3.利食い額を計算する
・R1に「利食い額」を表示する。
・最初のシグナルが出た次の日に(例はR37)、「=IF(K37="sell",(I37-Q37)*L$2,IF(K37="buy",(Q37-I37)*L$2,""))」を入力する
これは、ポジションKがsellを表示するとき、(約定価格I - 利食価格 Q) × 10000 を表示する。
ポジションKがbuyを表示するとき、(利食価格 Q - 約定価格I) × 10000 を表示する。
・コピーして、データのある最終行まで貼り付ける。
4.利食シグナルを計算する
・S1に「利食シグナル」と入力する
・最初のシグナルが出た次の日に(例はS37)、「=IF(AND(O37="",K37<>"",P37>R37),"利食い","")」と入力する。
これは、損切シグナルOが空白、かつポジションKが空白じゃなく、かつ含み損益が利食い額よりも大きい場合、利食いと表示し、それ以外は空白を表示するという意味。
・コピーして、データのある最終行まで貼り付ける。
<ここでひとつアドバイス>
エクセルでシステムトレードを構築する場合には、シグナルをうまく使っていくことがポイントになる。今回作成している損切りのシステムトレードも仕掛けシグナル、損切りシグナル、利食いシグナルと3つのシグナルを使っている。
直近の高値安値 損益編
今回も直近の高値安値の損切りシステムトレードを構築していく。
損益部分の必要項目は、損益、累積損益、最大損益、ドローダウンの4項目。
それでは早速作っていこう!
1.損益を計算しよう
・T1に「損益」と入力する。
・T2に「1050」と入力する。
これは手数料1050円を考慮して計算するために使用する。
・最初のシグナルが出た次の日に(例はT37)、「=IF(O37="損切り",N37-$T$2,IF(S37="利食い",R37-T$2,""))」と入力する。
これは、損切りシグナルOが損切りと表示されていたら、(損切り額N - 手数料T2)を表示し、利食いシグナルSに利食いと表示されていたら、(利食い額R - 手数料T2)を表示する。それ以外は空白を表示するという意味。
・コピーし、データ最終行まで貼り付ける。
2.累積損益を計算する
・U1に累積損益と入力する。
・最初のシグナルが出た次の日に(例はU37)、「=SUM(T37)+U36」と入力する。
・コピーし、データ最終行まで貼り付ける。
3.最大損益を計算する
・V1に最大損益と入力する
・最初のシグナルが出た日に(例はU36)、「=MAX(V35,U36)」と入力する。
・コピーし、データ最終行まで貼り付ける。
4.ドローダウンを計算する
・W1にドローダウンと入力する。
・最初のシグナルが出た日に(例はW36)、「=U36-V36」と入力する。
・コピーし、データ最終行まで貼り付ける。
さっ!次回はいよいよR倍数部分に入る。
完成まであと一息!!
直近の高値安値 R倍数編
今回も直近の高値安値の損切りシステムトレードを作成する。
R倍数部分の必要項目は、初期リスク、R倍数、R累積、R最大、Rドローダウンの5項目。
1.初期リスクを計算しよう
・X1に初期リスクと入力する
・最初のシグナルが出た次の日に(例はX37)、「=IF(J37="","",IF(J37=1,N37-T$2,X36))」と入力する。
これは、日数Jが空白の時は、空白を表示し、1を表示擦る時は、 損切り額N - 手数料T2 を表示し、それ以外は前日の初期リスクXを表示するという意味。
・コピーし、最終データのある行まで貼り付ける
2.R倍数を計算しよう
・Y1にR倍数と入力する
・最初のシグナルが出た次の日に(例はY37)、「=IF(T37<>"",-(T37/X37),"")」と入力する
これは、損益Tが空白じゃない時は、- ( 損益T ÷ 初期リスクX)を表示し、それ以外は空白を表示する
・コピーし、最終データのある行まで貼り付ける
3.R倍数の累積を計算しよう
・Z1にR累積と入力する
・最初のシグナルが出た次の日に(例はZ37)、「=SUM(Y37)+Z36」と入力する。
これは、R倍数Yと前日のR累積を足し算するという意味
・コピーし、最終データのある行まで貼り付ける
4.R倍数累積の最大値を計算しよう
・AA1にR最大と入力する
・最初のシグナルが出た日に(例はAA36)、「=MAX(AA35,Z36)」と入力する
・コピーし、最終データのある行まで貼り付ける
5.R倍数のドローダウンを計算しよう
・AB1にRドローと入力する
・最初のシグナルが出た次の日に(例はAB37)、「=Z37-AA37」と入力する
・コピーし、最終データのある行まで貼り付ける
お疲れ様でした。
これで一通りのシステムは完成しました。
次回は、この直近の高値安値のシステムトレードを評価してみようと思います。
直近の高値安値の損切りの評価
前回まで作成していた直近の高値安値の損切りの評価をしたいと思う。
まず、評価シートを作成するため、新しいシートを挿入して、名前を評価シートにする
勝率を計算する
・勝ち回数 (B2)
「=COUNTIF(usdデータ!$T$3:$T$1001,">0")」
損益の中で0より大きな数値を数える
・負け回数 (B4)
「=COUNTIF(usdデータ!$T$3:$T$1001,"<0")」
損益の中で0より小さな数値を数える
・売買回数 (B6)
「=SUM(B2,B4)」
勝ち回数と負け回数の合計
・勝率 (A2)
「=B2/B6」
勝ち回数÷売買回数
期待値を計算する
・利益合計 (C2)
「=SUMIF(usdデータ!$T$3:$T$1001,">0")」
損益の中で0より大きな数値を合計する
・損失合計 (C4)
「=SUMIF(usdデータ!$T$3:$T$1001,"<0")」
損益の中で0より小さな数値を合計する
・損益合計 (C6)
「=SUM(C2,C4)」
利益合計+損失合計
・平均利益 (D2)
「=C2/B2」
利益合計÷勝ち回数
・平均損失 (D4)
「=C4/B4」
損失合計÷負け回数
・期待値 (D6)
「=(D2*A2)+(D4*(1-A2))」
(平均利益×勝率)+(平均損失×(1-勝率)))
最大利益、最大損失、最大ドローダウンを計算する
・最大利益 (E2)
「=MAX(usdデータ!T3:T1001)」
損益の中での最大値
・最大損失(E4)
「=MIN(usdデータ!T3:T1001)」
損益の中での最小値
・最大ドローダウン (E6)
「=MIN(usdデータ!W3:W1001)」
ドローダウンの最小値
R倍数合計を計算する
・勝ちR倍数の合計(C9)
「=SUMIF(usdデータ!$Y$3:$Y$1001,">0")」
R倍数の中で0より大きな数値を合計する
・負けR倍数の合計(C11)
「=SUMIF(usdデータ!$Y$3:$Y$1001,"<0")」
R倍数の中で0より小さい数値を合計する
・R倍数の合計(C13)
「=SUM(C9,C11)」
勝ちR倍数と負けR倍数の合計
R倍数の期待値を計算する
・勝ちR倍数の平均(D9)
「=C9/B2」
勝ちR倍数の合計 ÷ 勝ち回数
・負けR倍数の平均(D11)
「=C11/B4」
負けR倍数の合計 ÷ 負け回数
・R倍数の期待値(D13)
「=(D9*A2)+(D11*(1-A2))」
(勝ちR倍数の平均×勝率)+(負けR倍数の平均×(1-勝率)))
R倍数の最大利益、最大損失、最大ドローダウンを計算する
・R倍数の最大利益(E9)
「=MAX(usdデータ!Y$3:Y$1001)」
R倍数の中の最大値
・R倍数の最大損失(E11)
「=MIN(usdデータ!Y$3:Y$1001)」
R倍数の中の最小値
・R倍数の最大ドローダウン(E13)
「=MIN(usdデータ!AB$3:AB$1001)」
ドローダウンの中の最小値
↑移動平均線のトレンド判定に直近の高値安値の損切りを加えた評価シート
注目すべきは、何と言っても、プラスの期待値が少しだけど、大きくなったこと!!
ただ、損切りの役割、初期リスクに対してより大きな利益を得るための投資戦略になっているかというと、勝ちR倍数の平均が1.13と物足りない。
今後は今回作成したファイルを利用して、いろいろな損切りを試していき、この数値がどのように変化していくのかを見ていこうと思う。
次は、パーセントストップの作り方へどうぞ!
「実際に検証を行った結果となりますが、その内容を保障するものではありません。検証結果の正確なデータにつきましては、直接販売者様に確認を取って頂きますようお願い致します。」※参考データ FX検証実践会
パーセントストップの作り方
今回は、前回まで作成していた「移動平均線を使ったシステムトレード」の損切り部分をパーセントストップに変更してみようと思う。
パーセントストップとは、仕掛けた方向とは逆の方向に、あらかじめ決めておいた一定の割合の価格に損切り注文を置いておくことである。
今回採用するパーセントストップのルールは下記の通り
買いの時、価格の1.5%下落したら損切り
売りの時、価格の1.5%上昇したら損切り
(注意) 1.5%という数値は、利食いルールがたまたま2%だったため、それよりも小さい数値ということで決めた僕のでたらめな数値であり、もちろん損切りルールの割合は1.5%である必要はない。
この割合については、ご自分でいろいろと検証していくなかで適した数値を見つけ出していってほしい。その中で新たな発見や気付きがあるだろう。
このパーセントストップを組み込むためには、損切り部分の中の損切り価格Mを変更するだけでよいので比較的簡単だ。
1.損切りの割合を入力する
・M2に「1.5%」と入力する。
2.損切り価格を計算する
最初の取引が発生した日に(今回はM37)、「=IF(AND(J37=1,K37="sell"),I37*(1+M$2),IF(AND(J37=1,K37="buy"),I37*(1-M$2),IF(J37="","",M36)))」と入力する
これは、日数Jが1で、かつポジションKがsellだった場合、約定価格I × (1+ 1.5%)を表示し、日数Jが1で、かつポジションKがbuyだった場合、約定価格I × (1- 1.5%)を表示する。それ以外で日数Jが空白なら空白をそれ以外は前日の損切り価格Mを表示するという意味。
3.コピーし、価格データのある最終行まで貼り付ける。
パーセントストップ1.5%の評価は下記の通り
パーセントストップの割合を別の数値に変更してその結果を見ていくのもおもしろい。下のグラフはパーセントストップの割合を1.5%~3.0%まで動かした場合、損益合計と最大ドローダウンがどのような変化をしていくかをあらわしたものである。
日々のノイズの外側にストップを置くことを意識していろいろと工夫してみよう!!
次は、ボラティリティストップの作り方へどうぞ!
「実際に検証を行った結果となりますが、その内容を保障するものではありません。検証結果の正確なデータにつきましては、直接販売者様に確認を取って頂きますようお願い致します。」※参考データ FX検証実践会
ボラティリティストップの作り方
今回は、「移動平均線を使ったシステムトレード」の損切り部分をボラティリティストップに変更してみようと思う。
あまり聞きなれない言葉かもしれないが、ボラティリティストップとは、ボラティリティ,つまり日々の価格変動幅がトレンドを形作る時のノイズを表しているという考え方を前提に置くストップのことである。
あ~、ちょっと難しいですね。。。
つまり市場は、上下動を繰り返しながらトレンドを形作っていく。
その上下動に引っかからないストップを置いてやれば、トレンドが作り出す大きな値動きを捕らえることができるってこと。
そして、その上下動を計算するためにボラティリティ(日々の価格変動幅)を使いましょうというのがボラティリティストップってわけ。
じゃーそのボラティリティをどうやって求めるかってことを説明したいと思う。
ボラティリティを計算するためには、ATR(Average True Range)を使う。
下記にATRの求め方をまとめてみた。
1.今日の高値と安値の差、今日の高値と昨日の終値の差、昨日の終値と今日の安値の差、の中で最大の数値が今日のTR(True Range)となる。
2. 過去n日のTR(True Range)の平均がATR(Average True Range)となる。
ATR = 日々のノイズなので、使用する時は「1.1」以上の数値を掛けてしようしたい。
今回は、1.5をしようする。もちろんこれは、僕のでたらめな数値なので使用する時はご自分で検証してほしい。
では、さっそくボラティリティストップを作っていこう!
1.行を挿入する
以前に作成した「移動平均線の直近高値安値の損切り」を開く。
最悪含損のL列と損切価格のM列の間に、5つの列を挿入する。
5つの列の役割は、①今日の高値と安値の差、②今日の高値と昨日の終値の差、③昨日の終値と今日の安値の差、④TR、⑤ATR となる。
2.今日の高値と安値の差を求める
・挿入したM1に「高値安値」と入力する
・M3に「=C3-D3」と入力する。
これは、(高値 - 安値)を意味する。
・最終データ行までコピー
3.今日の高値と昨日の終値の差を求める
・挿入したN1に「高値終値」と入力する
・N3に「=C3-E2」と入力する。
これは、(高値 - 1日前の終値)を意味する。
・最終データ行までコピー
4.昨日の終値と今日の安値の差を求める
・挿入したO1に「終値安値」と入力する
・O3に「=E2-D3」と入力する
これは、(1日前の終値 - 安値)を意味する
・最終データ行までコピー
5.TR(True Range)を求める
・挿入したP1に「TR」と入力する
・P3に「=MAX(M3:O3)」と入力する。
これは、(高値 - 安値)、(高値 - 1日前の終値)、(1日前の終値 - 安値)の中の最大値を意味する
・最終データ行までコピー
6.ATR(Average True Range)を求める
・挿入したQ1に「ATR」と入力する
・Q8に「=AVERAGE(P3:P7)」と入力する
これは、過去5日間の平均値を意味する。
※今回は5日したが、何日でもよい。
・最終データ行までコピー
7.損切価格を変更する
・最初に約定した行(今回はR37)に、「=IF(AND(J37=1,K37="sell"),I37+Q37*R$2,IF(AND(J37=1,K37="buy"),I37-Q37*R$2,IF(J37="","",R36)))」と入力する
これは、日数Jが1、かつポジションKが sell の時、約定価格I + ATRQ × 1.5 を表示し、日数Jが1、かつポジションKが buy の時、約定価格I - ATRQ × 1.5 を表示する。日数Jが空白の時は空白を、それ以外は前日の損切価格Rを表示する という意味。
・最終データ行までコピー
変更作業が終わると下記のようになる。
ボラティリティストップのn1.5の評価は下記の通り
前回のパーセントストップ同様に、nを1.5から3.0まで変更し、損益合計と最大ドローダウンがどのような変化をしていくか、その推移をグラフにしてみました。
日々のノイズの外側にストップを置くことを意識していろいろと検証してみよう!!
慣れないうちは、今回のボラティリティのような聞きなれない言葉に戸惑うかもしれないし、検証作業がちょっとめんどくさく感じるかもしれない。
でも、焦る必要はありません。
実は私もボラティリティにはめちゃくちゃ戸惑いましたし、今でも検証するのが面倒に感じることがあります(笑)
あなたのできるペースでいいのです。
投資用語に戸惑ったなら、インターネットでいろいろと検索してみればいいですし、解りやすく解説されている投資本を探して読んでみてもいいでしょう。
また、検証作業はあなたにとって、とても大切な作業だということを理解してください。自分で考え→検証し→発見する この一連の作業が確実にあなたの力になっていくのです。
マイペースでいいのです。最後までシステムを作り上げていってください。一つ完成すれば、それが大きな自信となり、またひとつあなたを大きく成長させてくれるでしょう。
次は、標準偏差を使ったストップを考える1改訂版へどうぞ!
「実際に検証を行った結果となりますが、その内容を保障するものではありません。検証結果の正確なデータにつきましては、直接販売者様に確認を取って頂きますようお願い致します。」※参考データ FX検証実践会
標準偏差を使ったストップを考える1改訂版
※標準偏差を使ったストップについて掲載しましたが、ご指摘を受け、データ計算方法を大幅に変更させていただきました。
シュウ様 心より感謝致します!!
今回は、統計学の標準偏差を使ったストップについて考えてみようと思う。
標準偏差とは、価格が平均からどの程度散らばっているのかを表す値のことである。
自然界の分布をグラフにすると、平均付近のデータが多く、平均から離れると急激にデータが少なくなり釣り鐘のような形になる。これを正規分布という。
正規分布の場合、-1σ から +1σ の間に全体の68.23%が分布し、-2σ から +2σ の間に全体の95.44%が分布している。
標準偏差を使ったストップとは、市場価格が上のグラフのような正規分布になると仮定し、標準偏差の数値から日々のノイズの外側にストップを置こうとするものである。
では、市場心理が強くはたらく市場価格に、自然界のような正規分布が成立するのだろうか?
もし成立しないのならどんな形の分布になるのだろうか???
疑問に思ったので確かめてみようと思う。
1.四本値を用意する
今回は USD/JPN の2004年5月19日から2008年3月21日のデータを用意した。
2.HV(変動率)を計算する
・F1にHVと入力する
・F3に「=(E3-E2)/E2」と入力する
これは、(今日の終値 - 昨日の終値) ÷ 昨日の終値 を計算している
Fの数式をデータのある最終行までコピーする
3.データ区間を作成する
価格データの分布をみるためのデータ区間を作成する
・HV(F)の最大値を求める(I1)
=MAX(F3:F1001)
・HV(F)の最小値を求める(I2)
=MIN(F3:F1001)
・HV(F)のデータの数を数える(I3)
=COUNT(F3:F1001)
・データ数のルートを計算する(I4)
=I3^(1/2)
・最大値と最小値の差を計算する(I5)
=I1-I2
・データ区間の幅を計算する(I6)
=I5/I4
・最初のデータ区間のを計算する(I8)
=I2-0.01%/2
・次のデータ区間を計算する(I9)
=I8+I$6
I9の数式を最大値が超えるまで下へコピーする。
4.ヒストグラムで分析する
[データ]→[データ分析]→[ヒストグラム]を選択する
小さなウインドウが開くので、入力範囲にHV(F)を、データ区間に作成したデータ区間(I)を指定する
OKを押すと新規ワークシートに頻度が集計される
集計された頻度をグラフにしたものが下の図である。
標準偏差を使ったストップの考え方2改訂版
前回 USD/JPN の価格変動が正規分布するのかということを検証するために、ヒストグラムでデータ分析してみた。その結果、中央値 -0.011%を中心に正規分布近い分布になっていることがわかった。
USD/JPN
USD/JPN だけでは分かりにくいので、ユーロ/JPN と 日経平均先物225についてもヒストグラムを作成してみた。
EUR/JPN
日経225先物
次に、全体に占める割合について比較してみる。
正規分布と比較すると、-1σ~1σ について日経225について5%以上の差が発生しているが、他の2銘柄は3%以内の差である。
また、-2σ~2σについては、どれも2%以下の差であり誤差の範囲内と考えられるかな。。。
こうして見ると上記3銘柄はどれもゼロに近い中央値を中心に極めて正規分布に近い分布になっているといえるだろう。
次回は、標準偏差を使ったストップを検証してみようと思う。
標準偏差を使ったストップの作り方改訂版
今回は、「移動平均クロスを使ったシステムトレード」の損切り部分を標準偏差を使ったストップに変更してみようと思う。
標準偏差を使ったストップのルールは下記の通り
買いの時、約定価格 - (約定価格 × 2標準偏差)を損切りラインとし、
売りの時、約定価格 + (約定価格 × 2標準偏差)を損切りラインとする。
移動平均クロスのトレンド判定で作成したエクセルファイルを使って、その続きから説明することとする。
I シグナル
トレンド判定がはじめて反転する日に(例ではI48)
=IF(L48="",IF(AND(H47<>H48,H48="上昇"),"buy",IF(AND(H47<>H48,H48="下降"),"sell","")),"")
ポジションLが空白の時、前日と当日のトレンド判定Hが違いかつ、当日が上昇ならbuy、前日と当日のトレンド判定Hが違いかつ当日が下降ならsell、それ以外は空白
J 約定価格
シグナルがはじめて点灯した次の日に(例ではJ49)
=IF(OR(R48<>"",V48<>""),"",IF(I48="sell",B49,IF(I48="buy",B49,J48)))
損切りシグナルRが空白じゃない、または利食シグナルVが空白じゃない場合は空白、シグナルIがsellなら始値、シグナルIがbuyなら始値、それ以外は前日の約定価格J
K 日数
シグナルがはじめて点灯した次の日(例ではK49)
=IF(J49="","",IF(J49<>J48,1,K48+1))
約定価格Jが空白なら空白、当日の約定価格Jが前日の約定価格Jと違うなら1、同じなら前日の日数K+1
L ポジション
L49
=IF(K49="","",IF(I48<>"",I48,L48))
日数Kは空白なら空白、前日のシグナルIが空白じゃないなら、前日のシグナル、空白なら前日ンおポジションL
M 最悪含損
M2に10000
M49
=IF(L49="sell",(J49-C49)*M$2,IF(L49="buy",(D49-J49)*M$2,""))
ポジションLがsellなら(約定価格J - 高値) × 1万通貨、ポジションLがbuyなら(安値 - 約定価格J) × 1万通貨、それ以外は空白
N HV
N3
=(E3-E2)/E2
(当日の終値 - 前日の終値) ÷ 前日の終値
O 標準偏差
O27
=STDEV(N3:N27)
過去25日間の標準偏差
P 損切価格
P49
=IF(AND(K49=1,L49="sell"),J49*(1+O49*2),IF(AND(K49=1,L49="buy"),J49*(1-O49*2),IF(K49="","",P48)))
日数Kが1、かつポジションLがsellなら、約定価格 × (1 + 標準偏差O × 2)、日数Kが1、かつポジションLがbuyなら、約定価格 × (1 - 標準偏差O × 2)、日数Kが空白なら空白、それ以外なら前日の損切り価格
Q損切り額
Q49
=IF(L49="sell",(J49-P49)*M$2,IF(L49="buy",(P49-J49)*M$2,""))
ポジションLがsellなら、(約定価格J - 損切価格P) × 1万通貨、ポジションLがbuyなら、(損切価格P - 約定価格J) × 1万通貨、それ以外は空白
R 損切シグナル
R49
=IF(M49<Q49,"損切り","")
最悪含損より損切価格が大きいなら損切り、それ以外は空白
S 含み損益
S49
=IF(L49="sell",(J49-E49)*M$2,IF(L49="buy",(E49-J49)*M$2,""))
ポジションLがsellなら、(約定価格J - 終値) × 1万通貨、ポジションLがbuyなら、(終値 - 約定価格J) × 1万通貨、それ以外は空白
T 利食価格
T2に3%
T49
=IF(K49="","",IF(AND(K49=1,L49="sell"),J49*(1-T$2),IF(AND(K49=1,L49="buy"),J49*(1+T$2),T48)))
日数Kが空白なら空白、日数Kが1かつ、ポジションLがsellなら、約定価格J × (1 - 3%)、日数Kが1かつ、ポジションLがbuyなら、約定価格J × (1 + 3%)、それ以外は前日の利食い価格
U 利食い額
U49
=IF(L49="sell",(J49-T49)*M$2,IF(L49="buy",(T49-J49)*M$2,""))
ポジションLがsellなら、(約定価格J - 利食価格T) × 1万通貨、ポジションLがbuyなら、(利食い価格T - 約定価格J) × 1万通貨、それ以外は空白
V利食シグナル
V49
=IF(AND(R49="",L49<>"",S49>U49),"利食い","")
損切りシグナルが空白かつ、ポジションLが空白じゃなく、含み損益が利食い額より大きい場合、利食い、それ以外は空白
W損益
W2に手数料1050
W49
=IF(R49="損切り",Q49-$W$2,IF(V49="利食い",U49-W$2,""))
損切りシグナルRが損切りなら、損切り額 - 手数料、利食いシグナルVが利食いなら、利食い額 - 手数料、それ以外は空白
これ以降の説明については、以前にも説明しているのでここではしない。
標準偏差を使ったストップの評価については下記の通り
累積損益の推移は下記の通り
次は、利食いの役割へどうぞ!
「実際に検証を行った結果となりますが、その内容を保障するものではありません。検証結果の正確なデータにつきましては、直接販売者様に確認を取って頂きますようお願い致します。」※参考データ FX検証実践会
ExcelVBAで自作する売買システム自動大量製造マシン
テキストの目的
・ExcelとVBAでシステム構築ツールを作れるようになること
・付属のExcelブックを使えるようになること
9種類のトレンドフォロー系のエントリー戦略
5種類のイグジット戦略
ドリームゲートFX 4つのシステムで安定運用
ドリームゲートFXの成績
・ 1月 318pips
・ 2月 272pips
・ 3月 83pips
・ 4月 -26pips
・ 5月 552pips
・ 6月 155pips









