自作DSL(Esgrsdnl)で株シストレ

株シストレ用の自作DSLの概要

自作シストレツールにて5年以上日本株のシストレを実施していましたが今はやってません

Esgrsdnl と名付けた自作DSLで戦略(ルール)を記述し、コンパイルすることでバックテスト及びシグナル出しが実行できるシステムが動いているので、その概要をこちらに纏めていくつもりでしたが頓挫してます

kabu.comでDLできるcsvを処理してexitツールを作りたい(未完成):自分用記事

すぐに忘れてしまうので・・・自分用記事です・・・

kabu.comでDLできる2つのCSV

f:id:sucar:20200724080359p:plain

Account.csv

f:id:sucar:20200724080802p:plain

保有の一覧

TradeMargin.csv

f:id:sucar:20200724081248p:plain

売買記録

これらをDLし

シグナル出しを行ったあとTradeする戦略のシグナル(csv)を所定のフォルダに移動させたのち・・・

$  ./bysl 2020/07/22 2020/07/27

を実行すると・・・

 ※2020/07/22は今日の日付(株価データの日付) 2020/07/27は明日の日付(entryする日付)

  • buy.csv 今日買ったリスト
  • sel.csv 今日売ったリスト
  • ac_buyQ 保有リスト(ダブりなし)
  • ac_buyQ2 保有リスト(ダブりあり)
  • 20200722.csv (今日の日付) 明日のためのデータ

を作成

日付を自分でタイプしないといけないのが情けないが、休日処理は無理なので・・・

20200722.csv (今日の日付)は日付間違いなければ明日以降のために所定のフォルダに移動させておく

※ワンクッションおくのは日付を間違えると上書きする可能性があるので

あとはできたcsvをエクセルに張り付けて料理する

要は保有銘柄がどのルールで購入したかcsvに纏めておくという処理(初めてjoinコマンドを使った)

ダブル仕掛けになるとルール完全に特定できないがまあそれは仕方ない

少なくとも今は「どのルールで購入したか?」を人力で調べているので、その部分は楽になるはず

 

 

include機能とC言語で直接記述できる機能を追加

include機能とC言語で直接記述できる機能を追加してます

digraph graphname {
	graph [rankdir = TB];
    subgraph cluster0 {
        label="Compile";
         b0 [label="car_m4(sed (include))" shape="rectangle"]
         b [label="car_m4(sed (here doc))" shape="rectangle"]
         c0 [label="m4 macro set" shape="box3d"]
         cc [label="tmpinc.m4"]
         c [label="tmp.m4"]
        
         d [label="car_m4(m4)" shape="rectangle"]
         e [label="mtASM src"]
         b -> c -> d;
         c0 -> d -> e;
         b0 -> cc ->b;
         {rank = same;c0;d;}
     }
    subgraph cluster1 {
         label="Assemble";
         e0 [label="awk src1" shape="box3d"]
         f [label="car_mt(awk)" shape="rectangle"]
         f0 [label="C src"]
         ff [label="tmp C src"]
         f1 [label="template C src" shape="box3d"]
         g [label="car_mt(gcc)" shape="rectangle"]
         
         f1 -> g;
         ff ->g;
         e0 -> f;
        
         f -> f0 -> g;
         {rank = same; e0;f;} 
     }

     a [label="Esgrsdnl src" shape="note"];
     a0 [label="Esgrsdnl include src" shape="note"];
     a1 [label="mtASM include src" shape="note"];
     h [label="exe file" shape="Msquare"]
     i [label="bet file"]
     b -> ff;
     f ->i;
     a -> b0;
     a0 -> b0;
     a1 -> d;
     e -> f;
     g -> h;
     {rank = same; i;h;}
 }

こんな流れ

 

f:id:sucar:20200716210855p:plain

 

abenomix.hatenablog.com

abenomix.hatenablog.com

SU/CAR-ST-APplication-cells 操作例:戦略の実行=シグナル出し(自分用記事)

自作したシステムは公開してないので自分用記事になりますが・・・・

メインパネルは2020/6/14現在

f:id:sucar:20200614132050p:plain

こうなっています

登録した戦略の実行=シグナル出し ですが・・・

f:id:sucar:20200620090429p:plain

〇のボタンをクリックするだけです

となりの半分薄くなったボタンは最初の株データセットせずにいきなりシグナル出しルーチンを実行するので、もしシグナル出しをやり直す場合、若干のスピードUPになります

処理が終わると

f:id:sucar:20200620090908p:plain

所定のフォルダにシグナルファイルができるので

f:id:sucar:20200620091210p:plain

systemRentry簡易支援2020a.xlsx タグ[Rbuy]

所定のエクセルシートの所定のタグに貼り付け

f:id:sucar:20200620091521p:plain

systemRentry簡易支援2020a.xlsx タグ[入力]

日の設定をし

f:id:sucar:20200620091926p:plain

systemRentry簡易支援2020a.xlsx タグ[katalon]

katalon用タグをコピー

f:id:sucar:20200620092333p:plain

systemRentry簡易支援2020a.xlsx タグ[katalon処理]

いろいろ調整して・・・

f:id:sucar:20200620092625p:plain

Selenium -> OpenkbcmR0

katalon(selenium)用の設定ファイルを開き

f:id:sucar:20200620092945p:plain

kbcmR0.csv

貼り付けて保存

f:id:sucar:20200620093218p:plain

Selenium -> kbcmR0

処理コマンドをメニューから実行

kabu.com のHPにログインし

katalonを開く

f:id:sucar:20200620093604p:plain

katalon recorder

KbcmR0を開く

f:id:sucar:20200620093852p:plain

katalon recorder

あとはPlay Suite をクリック

以上は寄成戦略の場合で指値戦略の場合は

kbcmRsn の方を使います

 

手作業がかなり入っていて自動売買とはいいがたいですが・・・

いろいろ調整できるのでこのままでいいかな と・・・

 

SU/CAR-ST-APplication-cells 操作例:戦略の登録(自分用記事)

自作したシステムは公開してないので自分用記事になりますが・・・・

メインパネルは2020/6/14現在

f:id:sucar:20200614132050p:plain

こうなっています

順序が逆ですが

0~59の60個の戦略(ルール)を登録でき、番号で呼び出せますが、戦略の登録は・・・

f:id:sucar:20200613193911p:plain

メニューから[systemQ2]->[Edit buyjcl]を選びます

f:id:sucar:20200613194203p:plain

エディタが設定ファイルを開くので登録していきます

#はコメントですので古い設定をコメントアウトしてます

コメントを消してみるとこうなってますが、

D	0	05C_OR_0	asis
I	8	05C_OR_0NF	asis
I	5	CSN_1C		asis
I	7	CSN_1A		asis
I	9	CSN_1S		asis
I	14	AsCMav_0	asis
I	15	AsCMav_0C	asis
Y	1	m5_2m_1		asis
I	13	m5_2m_2		asis
Y	2	m5_2m_1SN	asis
I	10	05C9y0_NotT1	asis
I	12	05C9y0CNotT1	asis
W	3	05C_9y_0T1	asis
I	18	05C_9y_0CKT1	asis
I	6	05C_9y_0NFT1	asis
I	11	mp16_3_0T2	asis
I	16	AsCMav_0T1	asis
I	17	AsCMav_0CT1	asis
G	19	U07A_0		asis
G	20	U05A_0		10	40	0	15
G	4	R_NOW_IMP	asis
  1. コマンド
  2. 番号
  3. 戦略(ルール)名
  4. asis

の順にtabで区切って書きます

asis と書くと、戦略(ルール)に設定したままの設定になりますが

  1. コマンド
  2. 番号
  3. 戦略(ルール)名
  4. 保持日数
  5. 1銘柄投入金額(万円)
  6. entry
  7. exit

と自由に設定できます

番号20だけその設定になってます

ただ、この設定はバックテストには反映されず、シグナル出しの時だけなので通常はasisと書いときます

ついでにいうと今のところ[a-zA-Z]+ つまりアルファベットで始まる単語なら何でもいいです(将来asis以外に何かする場合は対処予定)

 

コマンドですが

  • Gコマンド Go   普通に実行
  • Vコマンド Variable  変数を弄って実行
  • Dコマンド Dump 実行時株データをダンプ
  • Iコマンド Import ダンプデータを読み込んで実行
  • Wコマンド D+V でW 
  • Yコマンド I+Vで Y

の6個を使用できます(Kコマンドは登録できない)

簡単には全部GコマンドかVコマンドで登録すればいいのですが、毎日のシグナル出しの際、先頭から実行するので

  • 最初はDコマンドかWコマンドで株データをダンプする
  • 以降はIコマンドかYコマンドでダンプ株データをインポートする

とやると、処理速度が大幅にUPします

同じ株データを使う戦略を纏めて順番に登録するのが速度UPのコツです

バックテストだと関係ありません

f:id:sucar:20200613200450p:plain

エディタで保存したらメニューから[systemQ2]->[Mkmtrules2]を実行すれば登録完了です

 

SU/CAR-ST-APplication-cells 操作例:登録戦略の確認(自分用記事)

自作したシステムは公開してないので自分用記事になりますが・・・・

メインパネルは2020/6/14現在

f:id:sucar:20200614132050p:plain
こうなっています

0~59の60個の戦略(ルール)を登録でき、番号で呼び出せますが、まずは登録戦略の確認から・・・

f:id:sucar:20200614132159p:plain

[S] ボタンをクリックすると

=================== SU/CAR-ST-AP-Cells =====================
D       0       05C_OR_0        7       60      0       0 D
Y       1       m5_2m_1         4       120     0       11 Y
Y       2       m5_2m_1SN       6       120     4       8 Y
W       3       05C_9y_0T1      4       24      0       11 W
G       4       R_NOW_IMP       10      40      7       15 G
I       5       CSN_1C          5       36      0       15 I
I       6       05C_9y_0NFT1    8       24      3       8 I
I       7       CSN_1A          10      36      5       10 I
I       8       05C_OR_0NF      10      60      6       8 I
I       9       CSN_1S          10      36      7       12 I
I       10      05C9y0_NotT1    8       24      0       11 I
I       11      mp16_3_0T2      5       40      0       5 I
I       12      05C9y0CNotT1    8       24      0       11 I
I       13      m5_2m_2         3       60      0       11 I
I       14      AsCMav_0        10      20      0       15 I
I       15      AsCMav_0C       10      20      0       15 I
I       16      AsCMav_0T1      10      20      0       15 I
I       17      AsCMav_0CT1     10      20      0       15 I
I       18      05C_9y_0CKT1    8       24      0       11 I
G       19      U07A_0          2       60      0       10 G
G       20      U05A_0          10      40      0       15

と登録された戦略(ルール)の一覧が表示されます

  1. コマンド
  2. 番号
  3. 戦略(ルール)名
  4. 保持日数
  5. 1銘柄投入金額(万円)
  6. entry
  7. exit
  8. おまけ(意味なし)

となってます

どの戦略(ルール)がどの番号に登録されているか?

また 保持日数がどうなっているのか?

を確認できます

[S]ボタンのSはsort の意味で、表示は番号順にソートされます

ここはあくまで登録内容の表示で登録自体は別の操作で行いますが

登録は番号順ではない順番で登録する必要があります

コマンドと関係ありますが

  • Gコマンド Go   普通に実行
  • Vコマンド Variable  変数を弄って実行
  • Dコマンド Dump 実行時株データをダンプ
  • Iコマンド Import ダンプデータを読み込んで実行
  • Wコマンド D+V でW 
  • Yコマンド I+Vで Y

の6個を使用できます(Kコマンドは登録できない)

実運用を考えてこうなってます

 

にほんブログ村より人気ブログランキングの方が信用できる

にほんブログ村より人気ブログランキングの方が信用できる

という記事を本家ブログに書きましたのでリンク張っときます

supercar.hatenablog.com

人気ブログランキングへの登録はそろそろ元に戻します

こちらのブログは技術的なことをメインに書いて行きます

 

**一時的に人気ブログランキングに**

本家ブログをhttp⇒https移行作業をするので、リンク切れその他の副作用確認が済むまで、代わりにこちらのブログを登録します

一時的なもので、いずれ元に戻します

http://supercar.hatenablog.com/

 

https://supercar.hatenablog.com/

に変更するだけですが・・・

多分リンク切れ等副作用があるので、一応確認が終わるまでの措置です