明日から一週間、海外出張です・・・毎月あるね。
NYダウはダウ工業株30種平均(ダウ平均)、ニューヨーク・ダウ、ニューヨーク平均株価などとも呼ばれる、米ダウ社が算出するアメリカの代表的な経済指数です。
日本時間AM5:00に確定することから、日本市場の寄付き価格にも大きな影響を与えます。
NYダウが前日より高い場合は日本市場の寄付き価格は上がる傾向があります。つまり手仕舞いに向いているタイミングとなります。
NYダウが前日より低い場合は日本市場の寄付き価格は下がる傾向があります。つまり仕掛けるのに向いているタイミングとなります。
この特性を活かして戦略を作成すると成績を向上させることができます。
より美しい戦略作り – NYダウを利用する http://kabu.jyohokyoku.jp/nydow
と書いてあるので実験します。
NYダウを利用した逆張りの有効性検証
【仕掛けのルール】
- 1) 15日移動平均から終値が-30%以上乖離している
- 2) NYダウが、前日より低い場合
【手仕舞いのルール】
- 1) オーバーナイトして翌日成行
ソースコード
TIlib、Utility、TrendCheckライブラリはGitHubに置いています(日記の公開日に合わせたバージョンを利用下さい)
外部データを利用します。「CSVを読み込み外部データを使えるようにする方法」を先に読んで設定してください。
今回は「銘柄番号1番」に「ダウ平均」を登録しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# loop-type: date-only //============================== require "TIlib" require "Utility" require "TrendCheck" // ====================================== // NYダウを利用した逆張りの有効性 // ====================================== // //【仕掛けのルール】 // 1) 15日移動平均から終値が-30%以上乖離していたら、翌日成行 // //【手仕舞いのルール】 // 1) オーバーナイトして翌日成行 codes = CodeList if $code_num && $code_num != Length(codes) Print("前回と異なる銘柄リストでは実行できません。") Dummy end $code_num = Length(codes) //グローバル変数を初期化 if ! ($__INIT__) $budgetIni = 10000000 $buyUnit = 1000000 // 1回の購入資金 (100万円) $MaxHoldDay = 0 // 最大保有日数 $shortSelling = 0 // 空売り戦略 Yes(1)/No(0) $Interest = 1 // 無制限(0) / 単利(1) / 複利(2) $reverse = 0 // 購入順序 昇順(0) / 降順(1) $udcount = 0 // 騰落レシオ利用数 Init() //------------------------------------------------ $DiffMA = [$code_num] //------------------------------------------------ InitDone() $__INIT__ = 1 end def Main(i) //================================================== // 条件(買条件, 売条件共通部分) //================================================== //まだ上場していない銘柄は株価データがないためnullが返る if (Index == null) return end if ! ($order[(int)Code]) $order[(int)Code] = i end if ! ($DiffMA[i]) // 銘柄ごとのグローバル変数を初期化する $DiffMA[i] = DiffMA_new(15) $hold[i] = 0 return end // 指標の計算を1日進める DiffMA_next($DiffMA[i]) //================================================== // 保有してない→購入 //================================================== if ! ($hold[i]) diffma = DiffMA_value($DiffMA[i]) if ! (diffma && Close && {"1"}Close && {-1}{"1"}Close ) return end check = ({-1}{"1"}Close > {"1"}Close) if (diffma <= -30 && check) $buyflag[i][0] = 1 $buyflag[i][1] = diffma $buyCnt = $buyCnt + 1 end //================================================== // 保有している→売却 //================================================== elsif ($hold[i]) if ($set[i] < 1) $set[i] = 1 return end $set[i] = $set[i] + 1 //================================================== // 売買(売り) //================================================== // 1) 利食い:含み益が10%を上回った if ($set[i] >= $MaxHoldDay) PrintLog("損切り") $sellflag[i] = 1 $set[i] = 0 end end end //==================== // 買い処理 //==================== def SortBuy(i) if (PricedataExistCheck(Close)) return end $long = 0 $long = Num($buyUnit, Close) codeset = $order[(int)Code] Buying(codeset) end //==================== // 売り処理 //==================== def Sell_(i) if ($sellflag[i]) Selling(i) $sellflag[i] = 0 end // 使用した$buyflag 配列を初期化 if ($buyflag[i][0]) $buyflag[i][0] = 0 $buyflag[i][1] = 0 end end //==================== // 銘柄コードを変えながらMain関数,BuySell関数を実行 //==================== Print("-------------------------------------------------") Print("日付 = "+ Year + "/" + Month + "/" + Day) SortInit() // ソート初期化 i = -1 while (i + 1 < $code_num) i = i + 1 {codes[i]}Main(i) end i = -1 while i + 1 < $code_num i = i + 1 {codes[i]}Sort(i) end i = -1 if ($buyCnt) while i + 1 < $buyCnt i = i + 1 {$sortList2[i]}SortBuy(i) end end i = -1 while i + 1 < $code_num i = i + 1 {codes[i]}Sell_(i) end |
バックテスト結果
計算時間は約30分です。
NYダウを使わない場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
株価データ: 日足 銘柄リスト: 全銘柄 1998/01/05~2019/09/24における成績です。 ---------------------------------------- 全トレード数 2148 勝ちトレード数(勝率) 1043(48.56%) 負けトレード数(負率) 1105(51.44%) 全トレード平均利率 2.92% 勝ちトレード平均利率 15.64% 負けトレード平均損率 -9.08% 勝ちトレード最大利率 172.73% 負けトレード最大損率 -100.00% 全トレード平均期間 2.88 勝ちトレード平均期間 2.94 負けトレード平均期間 2.83 ---------------------------------------- 必要資金 ¥5,379,900 最大ポジション(簿価) ¥14,276,600 最大ポジション(時価) ¥241,941,400 純利益 ¥56,410,080 勝ちトレード総利益 ¥156,615,600 負けトレード総損失 -¥100,205,500 全トレード平均利益 ¥26,262 勝ちトレード平均利益 ¥150,159 負けトレード平均損失 -¥90,684 勝ちトレード最大利益 ¥2,109,000 負けトレード最大損失 -¥1,000,000 プロフィットファクター 1.56 最大ドローダウン(簿価) -¥5,959,498 最大ドローダウン(時価) -¥60,241,580 ---------------------------------------- 現在進行中のトレード数 7 ---------------------------------------- 平均年利 52.43% 平均年利(直近5年) 24.57% 最大連勝 10回 最大連敗 12回 ---------------------------------------- [年度別レポート] 年度 取引回数 運用損益 年利 勝率 PF 最大DD 2019年 63回 ¥1,861,000円 34.59% 44.44% 1.73倍 -57.27% 2018年 139回 ¥1,976,545円 36.74% 42.45% 1.35倍 -38.76% 2017年 39回 ¥810,736円 15.07% 48.72% 1.21倍 -68.18% 2016年 57回 ¥715,007円 13.29% 49.12% 1.50倍 -13.16% 2015年 41回 ¥1,244,625円 23.13% 53.66% 2.12倍 -19.51% 2014年 55回 ¥2,875,000円 53.44% 74.55% 4.76倍 -11.16% 2013年 76回 ¥4,987,650円 92.71% 67.11% 2.73倍 -100.00% 2012年 75回 ¥4,997,700円 92.90% 48.00% 2.15倍 -50.00% 2011年 74回 ¥718,600円 13.36% 47.30% 1.16倍 -50.00% 2010年 76回 -¥247,034円 -4.59% 67.11% 0.96倍 -50.00% 2009年 204回 ¥9,103,680円 169.22% 58.33% 2.05倍 -45.35% 2008年 393回 ¥7,545,043円 140.25% 51.65% 1.37倍 -100.00% 2007年 145回 -¥974,300円 -18.11% 45.52% 0.85倍 -100.00% 2006年 140回 ¥4,052,400円 75.32% 50.71% 1.67倍 -27.81% 2005年 28回 ¥1,100,700円 20.46% 64.29% 1.79倍 -33.33% 2004年 52回 ¥3,248,400円 60.38% 76.92% 2.85倍 -100.00% 2003年 84回 ¥4,136,600円 76.89% 72.62% 2.70倍 -100.00% 2002年 127回 ¥1,657,900円 30.82% 51.97% 1.29倍 -100.00% 2001年 114回 -¥1,163,550円 -21.63% 55.26% 0.85倍 -100.00% 2000年 166回 ¥7,763,380円 144.30% 65.66% 2.28倍 -100.00% |
NYダウを使った場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
株価データ: 日足 銘柄リスト: 全銘柄 1998/01/05~2019/09/24における成績です。 ---------------------------------------- 全トレード数 1411 勝ちトレード数(勝率) 716(50.74%) 負けトレード数(負率) 695(49.26%) 全トレード平均利率 3.17% 勝ちトレード平均利率 15.40% 負けトレード平均損率 -9.42% 勝ちトレード最大利率 153.41% 負けトレード最大損率 -100.00% 全トレード平均期間 2.95 勝ちトレード平均期間 3.02 負けトレード平均期間 2.87 ---------------------------------------- 必要資金 ¥7,614,200 最大ポジション(簿価) ¥14,917,600 最大ポジション(時価) ¥242,531,500 純利益 ¥38,397,810 勝ちトレード総利益 ¥103,362,600 負けトレード総損失 -¥64,964,800 全トレード平均利益 ¥27,213 勝ちトレード平均利益 ¥144,361 負けトレード平均損失 -¥93,475 勝ちトレード最大利益 ¥1,329,600 負けトレード最大損失 -¥1,000,000 プロフィットファクター 1.59 最大ドローダウン(簿価) -¥5,011,498 最大ドローダウン(時価) -¥59,445,060 ---------------------------------------- 現在進行中のトレード数 6 ---------------------------------------- 平均年利 25.21% 平均年利(直近5年) 4.25% 最大連勝 10回 最大連敗 14回 ---------------------------------------- [年度別レポート] 年度 取引回数 運用損益 年利 勝率 PF 最大DD 2019年 37回 ¥13,500円 0.18% 48.65% 1.01倍 -57.27% 2018年 87回 ¥1,308,216円 17.18% 43.68% 1.36倍 -38.76% 2017年 24回 -¥477,464円 -6.27% 45.83% 0.86倍 -68.18% 2016年 35回 -¥36,768円 -0.48% 42.86% 0.97倍 -16.45% 2015年 31回 ¥810,725円 10.65% 67.74% 2.00倍 -19.51% 2014年 37回 ¥2,046,800円 26.88% 72.97% 5.71倍 -9.09% 2013年 46回 ¥2,095,850円 27.53% 60.87% 1.99倍 -100.00% 2012年 56回 ¥788,400円 10.35% 41.07% 1.23倍 -50.00% 2011年 43回 -¥606,700円 -7.97% 48.84% 0.72倍 -40.63% 2010年 51回 ¥1,251,418円 16.44% 62.75% 1.42倍 -50.00% 2009年 141回 ¥3,931,624円 51.64% 55.32% 1.51倍 -45.35% 2008年 288回 ¥6,567,829円 86.26% 54.51% 1.41倍 -100.00% 2007年 93回 ¥1,331,300円 17.48% 54.84% 1.48倍 -29.72% 2006年 80回 ¥4,621,600円 60.70% 65.00% 3.87倍 -26.92% 2005年 16回 ¥491,200円 6.45% 50.00% 1.64倍 -22.44% 2004年 36回 ¥3,974,300円 52.20% 83.33% 9.78倍 -15.75% 2003年 49回 ¥3,591,500円 47.17% 77.55% 6.00倍 -23.37% 2002年 80回 ¥1,476,500円 19.39% 58.75% 1.36倍 -100.00% 2001年 79回 ¥1,070,400円 14.06% 59.49% 1.28倍 -100.00% 2000年 102回 ¥4,147,580円 54.47% 64.71% 1.83倍 -100.00% |
分かりにくいので整理してみました。
バックテスト | 取引回数 | 勝率 | 期待値 | 累積損益率 |
---|---|---|---|---|
ベース逆張り | 2148 | 48.56% | +1.56 | +56,410,080円 |
NYダウ利用 | 1411 | 50.74% | +1.59 | +38,397,810円 |
利益曲線は次のとおりです。
これだけ見ると、安定度が上がることで利益が下がった!!NYダウ平均役に立つ!!と思えてしまいます。
近年(5年)の利益率が極端に下がっており、相場状況が変わったのか既知の方法で使えなくなってきたのか利益曲線が寝る傾向があります。
まとめ
上記の利益曲線の「時価」は表示しないようにプログラム実装を変更しています。
実際に「時価」を表示すると次のようになります。
「時価」の計算がメチャクチャです・・・・。
ソースコードを眺めて調査していましたが、このような結果になる理由がよく分かっていません。
時価計算は廉価と異なり特殊な計算をしているように見えます。
このバグは開発者に直して欲しいです・・・。
【更新 2020.09.06】
私自身の問題だと判明。