CSN_1Cという戦略のバックテスト
追記)2020/5/17
コロナショックには対応できずx_x
追記終わり)
すみません ほぼ自分用記事です
CSN_1C という戦略
MAIN 000 ; -----市場---------------------- NotT1 ; ------------------------------- Var(ckc,22) Var(a1,29) ; ---------------- IntV(zd,5) IntV(mn,30) ; ---------------------- _ CK_CNT=Vckc CK_CNT 22 ; --------------------- DblD -Va1 d1 pAd(Dd1) ; --------------------- pD(Oku(1),Oku(500000)) _ Zday=Nzd Zday 5 _ MAXn=Nmn MAXn 30 dnl -------------------- YSN 360000 RKK 15 SSN 0
追記2019/6/29追記)
最新表記(内容は同じ)一部おかしくて使っていない
MAIN 000 ; -----市場---------------------- NotT1/sj ; ------------------------------- ##2008 +4 Vckc := 0 ##2008 +4 2019 +2 Va1 := 0 ; ---------------- ##使っていない IntV(mn,30) ## ; ---------------------- CK_CNT := 22+Vckc ; --------------------- Dd1 := -29-Va1 pA :< Dd1 ; --------------------- pD : 1/ok 500000/ok Zday 5 ; DEF DAIBUG ##おかしい ;_ MAXn=Nmn ##おかしい MAXn 30 dnl -------------------- YSN 360000 RKK 15 SSN 0
2014/10/28~2018/11/22の1000日データ
信用倍率2倍
DD:j=398:40,510( 0.36%) 資金=11,331,986 損益=8,563,989 (年2,492,061 年利 21.99%)
DD小さく年利20%以上
2012/11/28~2016/12/30の1000日データ
信用倍率2倍
DD:j=868:52,471( 0.44%) 資金=12,002,192 損益=13,228,006 (年3,849,258 年利 32.07%)
やはりDD小さく年利30%以上
2009/12/4~2013/12/30の1000日データ
信用倍率2倍
DD:j=866:736,321( 5.83%) 資金=12,637,529 損益=10,102,361 (年2,939,717 年利 23.26%)
DDがちょっと大きいが年利は20%以上
まあ、DDは耐えられるレベル
2007/1/5~2011/2/4の1000日データ
信用倍率2倍
DD:j=444:1,753,060(11.77%) 資金=14,890,615 損益=8,164,142 (年2,375,708 年利 15.95%)
DDはちょっと大きい 年利も15%
DD最大の444は2008/10/23
結論
- 基本ルール通り運用は可能
- 2008年レベルの暴落に対しては少しチューニングした方がいいかも
※パラメタもすべて晒してますが、パラメタの内容までは解説してないので詳細はわからないと思います
ですが、何かの参考になれば・・・・
Esgrsdnl マニュアル(MAIN メインCソース指定)
Esgrsdnl という自作DSL でシストレルールを記述しているのですが、そのマニュアル
特殊パラメタ MAIN
MAIN : メインCソース指定
記述例
MAIN 000
ベースとなるCソースを指定
今のところ、./suQ2/main/main_000.c
がメインCソースなので、000を指定
もしこの記述がないと、./suQ2/main/simxp8trsu_nobug2.c
が、メインCソースとなる
これは、メインCソースを改良して、互換性が失われるような際に、新たなメインCソースを新たに作り、Esgrsdnl上で指定することで、過去の資産がそのまま動くことを保証するための工夫(のつもり)
Esgrsdnl マニュアル(特殊パラメタ CK_CNT)
Esgrsdnl という自作DSL でシストレルールを記述しているのですが、そのマニュアル
特殊パラメタ CK_CNT
CK_CNT : シグナル数フィルタ閾値
監視銘柄数1000に対して、この設定値以上の数シグナルが出て初めてシグナルとする
(CNTはカウントですが、CKの意味が今となっては不明w)
記述例
CK_CNT 22
ただ、半角スペースまたはタブで区切って直接数値を指定すればよい
変数で書き換える場合
Var(ckc,22) _ CK_CNT=Vckc
CK_CNT 22
のように記述
注意として
- CK_CNTはdoubleなのでIntV()ではなくVar()を使う
- 先頭の"_"が必要で、かつ、"="で繋ぐ必要あり
- CK_CNTはコンパイル時にfilter実現ソースを準備するので
- ダミーで直接数値指定が必要
2019/6/29追記)最新表記だと
Vckc := 0 CK_CNT := 22+Vckc
といった表記も可能に
ダミーで直接数値指定は不要
Esgrsdnl マニュアル(特殊パラメタ Zday MAXn)
Esgrsdnl という自作DSL でシストレルールを記述しているのですが、そのマニュアル
特殊パラメタ Zday と MAXn
Zday : 何日保持するか? 省略時5
MAXn : 最大シグナル数(銘柄数) 省略時5
記述例
Zday 10 MAXn 30
ただ、半角スペースまたはタブで区切って直接数値を指定すればよい
変数で書き換える場合
IntV(zd,10) _ Zday=Nzd IntV(mn,20) _ MAXn=Nmn MAXn 30
のように記述
注意として
- ZdayもMAXnもintなので、IntV()を使う
- 先頭の"_"が必要で、かつ、"="で繋ぐ必要あり
- MAXnはコンパイル時に配列確保するので
- デフォルトの5より大きくなる場合は
- 直接数値指定が必要
ProtraのデータDL先URL変更に対応してみた
株価情報のサイトが
ということらしいので・・・
Protraのソースを弄って対応させてみる
protra-protra_trunk-r534\trunk\Protra.Lib\Update\KabukaJohoUpdator.cs
52行目あたり
protected override string DownloadUrl(DateTime date) { return "http://www.edatalab.net/kabu/data" + date.ToString((date.Year < 2006) ? "yyyy/yyyyMMdd" : "yyyy/DyyMMdd") + ".LZH"; }
を
protected override string DownloadUrl(DateTime date) { return "http://www.edatalab.sakura.ne.jp/data" + date.ToString((date.Year < 2006) ? "yyyy/yyyyMMdd" : "yyyy/DyyMMdd") + ".LZH"; }
に書き換え再ビルド
で、今のところちゃんと動いている
注意)実施は自己責任でお願いします 私はprotraの中の人ではないので、正式対応ではありませんので・・・・
「awkでデータ処理する際、空白判定はNULLによってできます」は罠
フィールドに何もない時、処理を変えたいとき、いろいろググると
このようなので、
if ($2==NULL) とか
if ($2!=NULL) とか
$3!=NULL {
とかやって一見うまく動くのですが・・・・
フィールドが空白ではなく、0 が書かれていても 0==NULL なので、期待通りには動かない(これで嵌って悩んだ)
空白判定は
$2==NULLではなく $2=="" でやる方が安全です