トレーディングシステム入門:前編

  • 蛇行システムⅠ
    できるだけ少ないヒストリカルデータを使い、始値、高値、安値、終値すべてを使って、その値動きと標準偏差を計算する。
    日足を使ったデイトレードのシステム。
    始値が下値レベル以下のときに買い、終値で売る。
    または計算した下値レベル以下になったら買う。
    ロスカットはプライスのパーセンテージ分マイナスの含み益になったら行う。
    Excelに日足データを取り込み、Excelでバックテストを行っている。
    S&P 500ととうもろこしのデータでバックテスト。買いトレードと売りトレードにわけた指標結果を算出。

    第8章。ドローダウン(STD,ETD,CTD,TED)、最大逆行幅(略MAE)、最大順行幅(略MFE)について考える。
    ”VS Mid”レベルより下に始値があるとき、始値で買い、終値で決済するルールに単純化しバックテスト。
    (VSMidは109ページの蛇行システムのコード内に出てくる。)その結果から横軸をSTD/MAE、縦軸を最終損益にしたグラフを表示。
    ただし日足でのトレード結果であり、安値の次に高値がくる前提でのテストのため、信頼性は低い。

    図8.6では横軸にETD、縦軸に最終損益のグラフ、

    図8.8では横軸にMFE、縦軸にETDのグラフを表示。

    これらのグラフから解析し、ストップロスと利益目標(プロフィットプロテクション)の設定を行うことで結果が改善することを示唆。

    図8.12では横軸にSTD/MAE、縦軸に最終損益/CTDのグラフを表示。

    図8.13では勝ちトレードについて横軸にSTD/MAE、縦軸に最終損益のグラフを表示。

    図8.15では横軸にMFE、縦軸にCTDのグラフを表示。

    図8.17では横軸に仕掛け、STD/MAE、MFE、ETD/最終損益の時間順、縦軸に各時点での損益をグラフ表示。

    これによりトレードの推移がわかる。

    第11章。
    システムを変更。
    週足を使ってレベルを算出。
    日足でトレードし、週末には決済。
    レベル(トリガーレベル)は平均値の2標準偏差とした。
    そしてS&P 500でバックテスト。
    Excelでの指標算出と、平均値(平均損益)、中央値、尖度、歪度、トリム平均も算出。
    図11.7にはリターン分布のグラフを表示。

    このグラフが正規分布でないためチェビシェフの定理と歪度がプラスということから、グラフ上の大きな利益と大きな損益を切るラインを決める。
    そしてその値をリミットストップ、ストップロスとしてStrategyにコードを追加する。
    再びバックテストし指標を算出。
    リターン分布のグラフ、平均値(平均損益)、中央値、尖度、歪度、トリム平均も算出。
    また、バックテストへの未使用データでのテストも実施。

    ブラックジャックの手仕舞いを蛇行システムに使用し、S&P 500のRADでバックテストを行いExcelで指標算出。
    しかし結果は悪くなった。
    そこで前の手仕舞いの方法とブラックジャックの手仕舞いのどちらがいいのかを考えるために、何が違いをうんだのかを調べた。
    だが結局はどちらを選ぶかは個人の判断らしい。

    第12章フィルタリング。
    表12.4にある10種類のフィルターをそれぞれ追加してS&P 500でためしたが一貫性のある結果をうみだすフィルターはみつからなかった。
    ここで「論理的な推論と、特定のフィルターとシステムの組み合わせが機能しない理由」を理解する方法の重要性を指摘している。
    が、その方法について詳しい説明があるわけではない。

  • ブラックジャックⅠ
    200日移動平均より上であればロング、下であればショートのエントリーだけとし、さらに短期の移動平均線を使ってブレイクアウトの場合とリトレースメントの場合にわけた計4つの種類のエントリーがある。
    ここで目的とするのはコンスタントに安定した平均利益を上げること。

    大きな平均利益を上げるためには、できるだけ多くの収益性の高いトレードをみつけ且つ標準偏差を最小限に抑える必要がある。
    最適な(長さの)トレードを見つけるため、Strategyのプログラムの最後に123ページにある出力用コードを追加した。

    121から123ページにかけてこのStrategyのプログラムが掲載されており、122ページ後半からこれから検討する4種類のExitの条件式が載っている。
    しかし気をつけなければいけないのは、このStrategyだけではなくこの本全般に言えることだが、最終的な検討結果のプログラムコードが載っていないことである。

    そして著者は時折文中で「これはあくまで説明するためのモデルとしてのコード」ということを言っている。
    言い換えれば「この本に書かれている検討方法は、自分自身で実践し元となるプログラムコードを最適化(改良)せよ」ということかもしれない。

    話を元に戻すと、掲載されている4種類のExitは次の通り。
    時間ベースストップ(名:Long time,Short time)、ストップロス(名:Long loss,Short loss)、利益目標ストップ(名:Long profit,Short profit)、最小利益ストップ(名:Long stop,Short stop)。
    各ストップは初期設定では無効となっており、124ページ以降でそれぞれについて個別に条件検討を行うこととなる

    各ストップについて。

    TradeStationでバックテスト、ファイル出力、Excelでの取り込み、データを並び替え平均損益の計算、各トレード日数(期間)でのパーセンテージベース利益の標準偏差、平均損益/標準偏差、各トレード期間における勝率、すべてのマーケットで各トレード期間における勝ちトレードの標準偏差、勝率/標準偏差を計算。
    トレード日数ごとまたは利益目標ごとまたはの各指標の数値がまとめられる。

    平均損益/標準偏差と勝率/標準偏差の数値が高いもの、という基準で表5.9、表5.10、表5.11、表5.12から各ストップの最適な数値をさがした。

    完成したStrategyを14の先物マーケットでバックテストし、表5.13にまとめた。

    以上のExitについて最適化の行程はこれらのマーケットすべてで行っている。

    その方法を詳しく書いてみると例えば時間ストップについて。
    最初に”2”日間とプログラムコードに数値を入力しそのバックテストを14のマーケットすべてに行い、その指標結果(各マーケットのバックテスト結果としてファイル出力した”平均損益””パーセンテージベースの利益”)それぞれを全マーケットの結果から平均数値を算出した。
    そして今度は”3”日間とプログラムコードに数値を入力し、同じ作業を繰り返す。

    残念ながら表5.13の結果からはほとんどのマーケットでトレードする価値があるほどの利益を上げていないことがわかる。
    しかしこの理由が現在のマーケット価格とスリッページと手数料の関係がトレードをする水準にないだけであり、このブラックジャックが有効に機能していないというわけではない、と著者は書いている。
    (有効に機能している、とは何から判断するのか?それについては明確な記述なし)

    15番目のマーケットとしてS&P500でバックテスト。
    ファイル出力、Excelでの取り込み、指標算出。その結果ドローダウンが大きすぎ、実用に耐えないと判断。

    第11章。Entryの条件を「ランダムにLongまたはShortでEntryすること」に変更した。
    この章の目的はランダムなエントリーを使って、最適なストップの条件を決める、ということである。
    Exitは時間ベースのストップ(2~10日)とストップロス(0.5~2で0.1刻み)を設定することにした。

    この2つのストップの組み合わせすべてをそれぞれ10回ずつバックテストする。
    (9 x 16 x 10 = 1440回)303~307ページにプログラムコードが掲載されており、ランダムにトレードを生成するために

    PositionGenerator = IntPortion(Random(5)); と

    If MarketPosition = 0 then begin
    If PositionGenerator = 3 then Buy at Close;
    If PositionGenerator = 4 then Sell at Close; (Tradestion8.3の場合はSellをSell Shortと書く)
    End;

    と書かれている。

    IntPortion(X)はXの数値の小数点第1位以降を切り捨てた値。
    Random(X)は0からXの間の範囲の数値(小数点第2位まで)をランダムに抽出。

    例えば、ここでは0~5の範囲の数値として2.56が選択される可能性がある。
    そして小数点を切り捨てると2がPositionGeneratorの値となる。

    プログラムの中身をみるとここでひとつの疑問が出てくる。

    文章では”時間ベースのストップとストップロスを検討”と書いてあるが、プログラムにはそれ以外の利益目標ストップ(Long Target,Short Target)とトレーリングストップがこの時点で含まれており初期設定の段階で機能するようになっている。

    また日足によるトレードのため、エントリーしたその日のバーの時点ではTradeStationはエントリープライスを認識しないため、ポジションをもったとたんストップロスにヒットして決済するケースが発生する。これを回避するために1バー以上待つ、というコードを一つ追加しているが本来は日足ではなく日中足でバックテストすべきだろう。

    時間ベースストップの数値とストップロスの数値の組合せ計1440回分の結果から各指標を算出、それぞれ1440個ある指標数値の平均と標準偏差を計算。

    図11.10では横軸にストップロス、縦軸に時間ベースストップとし、パーセント利益を「面チャート(等高線)」で表示。

    図11.11では横軸にストップロス、縦軸に時間ベースストップとし、パーセント利益の標準偏差を「面チャート(等高線)」で表示。

    図11.12では横軸にストップロス、縦軸に時間ベースストップとし、尖度 を「面チャート(等高線)」で表示。

    図11.13では横軸にストップロス、縦軸に時間ベースストップとし、歪度 を「面チャート(等高線)」で表示。

    表11.13では時間ベースストップと尖度と歪度の関係を表示。
    表11.13ではストップロスと尖度と歪度の関係を表示。

    図11.14で、横軸にパーセント利益目標、縦軸にストップロスとし、平均損益を「面チャート」で表示。

    図11.15で、横軸に時間ベースストップ、縦軸に最小利益ストップとし、平均損益を「面チャート」で表示。

    これらの結果からストップロス、最小利益ストップ、利益目標、時間ベースストップについて具体的な数値が決定され、315~316ページに示された。
    決定されたストップの条件を使用し、ランダムエントリーによるバックテストを行った結果を表11.15と図11.16に示した。