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=="" でやる方が安全です
awk sed を駆使してm4マクロを自動生成
2020/6/22改定版)
自作システムのストラテジー記述でマクロが使えるようにしている(m4マクロ)
で・・・
マクロを記述するのが結構面倒
そこで、マクロのテンプレートファイルを準備して
./m4_XX2.m4
define(`ExXXp',`_xx_')dnl dnl pXX pXX(N) pXX(d,u) pXX(d,u,N) pXX(d,u,N,s),pXX(d,u,N,s,name) define(`pXX',`ifelse(`$#', `0',`_P_ dmy dmy ExXX ExXXp(0) dmy$0 ',`$#', `1',`_P_ dmy dmy ExXX$1 ExXXp($1) dmy$0 ',`$#', `2',`_P_ $1 $2 ExXX ExXXp(0) dmy$0 ',`$#', `3',`_P_ $1 $2 ExXX$3 ExXXp($3) dmy$0 ',`$#', `4',`_P_ $1 $2 ExXX$3$4 ExXXp($3) dmy$0 ', `_P_ $1 $2 $5 ExXXp($3) dmy$0 ')')dnl dnl pXXd=pXX pXXd(d) pXXd(d,N) pXXd(d,N,s) define(`pXXd',`ifelse(`$#', `0',`_P_ dmy dmy ExXX ExXXp(0) dmy$0 ',`$#', `1',`_P_ _min_ $1 ExXX ExXXp(0) dmy$0 ' ,`_P_ _min_ $1 ExXX$2$3 ExXXp($2) dmy$0 ')')dnl dnl pXXu=pXX pXXu(u) pXXu(u,N) pXXu(u,N,s) define(`pXXu',`ifelse(`$#', `0',`_P_ dmy dmy ExXX ExXXp(0) dmy$0 ',`$#', `1',`_P_ $1 _max_ ExXX ExXXp(0) dmy$0 ' ,`_P_ $1 _max_ ExXX$2$3 ExXXp($2) dmy$0 ')')dnl dnl sXX sXX(N) sXX(d,u) sXX(d,u,N) sXX(d,u,N,s),sXX(d,u,N,s,name) define(`sXX',`ifelse(`$#', `0',`_S_ dmy dmy ExsXX ExXXp(0) dmy$0 ',`$#', `1',`_S_ dmy dmy ExsXX$1 ExXXp($1) dmy$0 ',`$#', `2',`_S_ $1 $2 ExsXX ExXXp(0) dmy$0 ',`$#', `3',`_S_ $1 $2 ExsXX$3 ExXXp($3) dmy$0 ',`$#', `4',`_S_ $1 $2 ExsXX$3$4 ExXXp($3) dmy$0 ' ,`_S_ $1 $2 $5 ExXXp($3) dmy$0 ')')dnl dnl sXXd=sXX sXXd(d) sXXd(d,N) sXXd(d,N,s) define(`sXXd',`ifelse(`$#', `0',`_S_ dmy dmy ExsXX ExXXp(0) dmy$0 ',`$#', `1',`_S_ _min_ $1 ExsXX ExXXp(0) dmy$0 ' ,`_S_ _min_ $1 ExsXX$2$3 ExXXp($2) dmy$0 ')')dnl dnl sXXu=sXX sXXu(u) sXXu(u,N) sXXu(u,N,s) define(`sXXu',`ifelse(`$#', `0',`_S_ dmy dmy ExsXX ExXXp(0) dmy$0 ',`$#', `1',`_S_ $1 _max_ ExsXX ExXXp(0) dmy$0 ' ,`_S_ $1 _max_ ExsXX$2$3 ExXXp($2) dmy$0 ')')dnl
これの
- XXをパラメタ名に
- _xx_をパラメタの式表現に
- _min_をデフォルト時のminの値に
- _max_をデフォルト時のmaxの値に
置換すれば、マクロが自動生成される仕組み
置換にはsedを使うが、sedスクリプトをawkで生成する(ややこしい)
$1!=NULL && $2!=NULL { if ($3=="") MIN="-80" else MIN=$3+"" if ($4=="") MAX="80" else MAX=$4+"" printf("cat ./m4_XX2.m4 |sed -e 's/XX/%s/g;s:_xx_:%s:g;s/_min_/%s/g;s/_max_/%s/g' >./m4/m4_%s.m4\n",$1,$2,MIN,MAX,$1) }
./mkm4
echo cd `dirname $0` cd `dirname $0` pwd cat <<EOF |sed -e 's/\[N/\[\$1/g;s/{N/{\$1/g' |awk -f ../awk/mkm4_2.awk | bash A -(hei25[N]-owa[N])/owa[N]*100 A125A -(hei125[N]-owa[N])/owa[N]*100 A75A -(hei75[N]-owa[N])/owa[N]*100 B -(hei5[N]-owa[N])/owa[N]*100 E dxhei5[N]/owa[N]*100 F hei5_25[N]/owa[N]*100 R (owa[N]-hjm[N])/hjm[N]*100 RT (tak[N]-hjm[N])/hjm[N]*100 RY (yas[N]-hjm[N])/hjm[N]*100 Z (owa[N]-hjm[N+1])/hjm[N+1]*100 ZT (tak[N]-hjm[N+1])/hjm[N+1]*100 ZY (yas[N]-hjm[N+1])/hjm[N+1]*100 DPD da[N]/da[N+1] 0 1000000 OW owa[N] 1 1000000 THG (tak[N]-owa[N])/owa[N]*100 D da[N] 0 1000000000000 C0C owa[N]-owa[N] -10000 10000 H75I Heihei75{N}-Heihei75{N+1} H75_2I Heihei75{N}-(Heihei75{N+1}+Heihei75{N+2})/2 M5M m5[N] -5 5 M25M m25[N] -5 5 M 5*m25[N]+m5[N] -25 25 EOF echo m4f... cat ./m4/* | m4 -F ./esgrs/esgrs.m4f
というshell scriptを走らせるとマクロを自動生成する(ややこしい)
here documents を活用して、パラメタをズラズラ直接記述すれば、パラメタ追加が簡単
便利になったけど、ややこしい・・・・