53歳限界プログラマの憂鬱

SU/CAR-ST-APplication-cellsから派生したプログラマのブログ

来訪ありがとうございます
シストレツールを自作してました
自分用の記事が多いのであまり役には立たないブログでした

f:id:sucar:20150414193802p:plain

自作システム詳細目次

CSN_1Cという戦略のバックテスト

追記)2020/5/17

f:id:sucar:20200517143449p:plain


コロナショックには対応できず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日データ

f:id:sucar:20181124143007p:plain

信用倍率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日データ

f:id:sucar:20181124143455p:plain

信用倍率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日データ

f:id:sucar:20181124144229p:plain

信用倍率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日データ

f:id:sucar:20181124145019p:plain

信用倍率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変更に対応してみた

株価情報のサイトが

f:id:sucar:20181020131832p:plain

ということらしいので・・・

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によってできます」は罠

awkスクリプト書いてて嵌ったので簡単に記事を書く

フィールドに何もない時、処理を変えたいとき、いろいろググる

d.hatena.ne.jp

このようなので、

if ($2==NULL) とか

if ($2!=NULL) とか

$3!=NULL {

とかやって一見うまく動くのですが・・・・

フィールドが空白ではなく、0 が書かれていても 0==NULL なので、期待通りには動かない(これで嵌って悩んだ)

空白判定は

$2==NULLではなく $2=="" でやる方が安全です