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

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

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

f:id:sucar:20150414193802p:plain

自作システム詳細目次

R_NOW_IMP.m4 2019/6/29現在(追記2020/6/22)

R_NOW_IMP.m4 2019/6/29現在

	MAIN	000
; ----------------------
dnl	暫定
_PC_BEGIN
	pAd(-16)
_PC_END
	DblD	CpCnt{0}	c0
	DblD	CpCnt{2}	c2
dnl ?	Dc0>(Dc2+10)
dnl ?	Dc0>24
dnl	?	Dc2<88
dnl	暫定
; ----------------------
	_SG_IMP_	ALL
#	d	Oku(1)	Oku(500)
#	pD(Oku(1),Oku(500))
	pD : 1/ok 500/ok
;	pOWu(99)
	DEF	DAIBUG
	MAXn	30
; ----------------------
	YSN	400000
dnl	RKK	1.5
;2018/9/30
	RKK	8
dnl	SSN	6.5
	SSN	7

整理しておく

	MAIN	000
; ----------------------
	_SG_IMP_	ALL
	pD : 1/ok 500/ok
	DEF	DAIBUG
	MAXn	30
; ----------------------
	YSN	400000
	RKK	8
	SSN	7
   

バックテストグラフ

f:id:sucar:20190629084714p:plain

ちなみに戦略(ルール)本体は

suR1/R/R07/now.R

にて

2019/7/27追加)

#2019/7/27追加
lmt<-10 (略) ##################### source("./rule8.R") #ordでsortするランダム? sindex<-order(p$j,p$ord) p<-p[sindex,] write.csv(p, "./output/now8.csv", quote=FALSE, row.names=FALSE) ##################### source("./rule9.R") #ordでsortするランダム? sindex<-order(p$j,p$ord) p<-p[sindex,] write.csv(p, "./output/now9.csv", quote=FALSE, row.names=FALSE) ##################### source("./rule10.R") #ordでsortするランダム? sindex<-order(p$j,p$ord) p<-p[sindex,] write.csv(p, "./output/now10.csv", quote=FALSE, row.names=FALSE) ##################### source("./rule11.R") #ordでsortするランダム? sindex<-order(p$j,p$ord) p<-p[sindex,] write.csv(p, "./output/now11.csv", quote=FALSE, row.names=FALSE) ##################### source("./rule12.R") #ordでsortするランダム? sindex<-order(p$j,p$ord) p<-p[sindex,] write.csv(p, "./output/now12.csv", quote=FALSE, row.names=FALSE) ##################### source("./rule13.R") #ordでsortするランダム? sindex<-order(p$j,p$ord) p<-p[sindex,] write.csv(p, "./output/now13.csv", quote=FALSE, row.names=FALSE)

となっており

2020/2/22追加)

suR1/output0

#!/bin/bash
echo cd `dirname $0`
cd `dirname $0`
echo systemR >./output/output_0.csv
echo rule,code,j,date,owa0 .>>./output/output_0.csv
cat ./output/now9.csv | awk -f ./awk/output_0.awk rule=109 >./output/output_tmp.csv
cat ./output/now10.csv | awk -f ./awk/output_0.awk rule=110 >>./output/output_tmp.csv
cat ./output/now11.csv | awk -f ./awk/output_0.awk rule=111 >>./output/output_tmp.csv
cat ./output/now12.csv | awk -f ./awk/output_0.awk rule=112 >>./output/output_tmp.csv
cat ./output/now13.csv | awk -f ./awk/output_0.awk rule=113 >>./output/output_tmp.csv
cat ./output/output_tmp.csv | sort -n -t, -k 2 >> ./output/output_0.csv

#start ./output/output_0.csv

cat ./output/now9.csv | awk -f ./awk/output_0.awk rule=100 >./output/output_tmp.csv
cat ./output/now10.csv | awk -f ./awk/output_0.awk rule=100 >>./output/output_tmp.csv
cat ./output/now11.csv | awk -f ./awk/output_0.awk rule=100 >>./output/output_tmp.csv
cat ./output/now12.csv | awk -f ./awk/output_0.awk rule=100 >>./output/output_tmp.csv
cat ./output/now13.csv | awk -f ./awk/output_0.awk rule=100 >>./output/output_tmp.csv
cat ./output/output_tmp.csv | sort -n -t, -k 2 |uniq -c |sed -e 's/^[ ]*//g' |tr ' ' ','  > ./output/output_buy.csv

#start ./output/output_buy.csv

cat ./output/output_buy.csv | awk 'BEGIN {FS=","} {print $3}'  >./output/chart.txt
cat ./output/chart.txt |  awk -f ./awk/chart.awk >./output/chart.html
start ./output/chart.html

#import test
cat ./output/now8.csv | awk 'BEGIN { FS="," ; OFS="\t" } NR>1{print $3,$1}' >../suQ2/import/8_13/signal8.txt
cat ./output/now9.csv | awk 'BEGIN { FS="," ; OFS="\t" } NR>1{print $3,$1}' >../suQ2/import/signal9.txt
cat ./output/now10.csv | awk 'BEGIN { FS="," ; OFS="\t" } NR>1{print $3,$1}' >../suQ2/import/signal10.txt
cat ./output/now11.csv | awk 'BEGIN { FS="," ; OFS="\t" } NR>1{print $3,$1}' >../suQ2/import/signal11.txt
cat ./output/now12.csv | awk 'BEGIN { FS="," ; OFS="\t" } NR>1{print $3,$1}' >../suQ2/import/signal12.txt
cat ./output/now13.csv | awk 'BEGIN { FS="," ; OFS="\t" } NR>1{print $3,$1}' >../suQ2/import/8_13/signal13.txt
rm ../suQ2/import/signalALL.txt
cat ../suQ2/import/signal* | sort -r | uniq >../suQ2/import/signalALL.txt
cat ../suQ2/import/signal9* ../suQ2/import/signal10* ../suQ2/import/signal11* | sort -r | uniq >../suQ2/import/sgnl/signal9-11.txt
rm ../suQ2/import/8_13/signal8_13.txt
cat ../suQ2/import/8_13/signal* | sort -r | uniq >../suQ2/import/8_13/signal8_13.txt

と なっているのでrule9,10,11,12が運用されている状態(ALL)

2020/6/22追加)rule8,13も運用(8_13)

 結構ややこしい

広大なインターネットの中に「あるブログを見つけたら4桁万円あげますよ」というサイトがあることに気づきました

追記)

答えを書いときます

株式市場というインチキ商材業者の利用規約に5000万うんぬんの記載があります

ランキングサイトで探せばその業者のサクラブログが見つかりますので、過去記事を探すとシグナルを配信(来週この銘柄を買います)している記事があり、これが5000万の価値があると言えます(まあ実際には無理ですけどね)

何とか詐欺告発ができないか? との考えての記事でした

追記終わり)

 

さて、2019/4/7 午前0時です

広大なインターネットの中に

あるブログを見つけたら4桁万円*1あげますよ

というサイトがあることに気づきました

ただ、向こうが気づくと消されてしまうかもしれません

なので、こそっとここで告知していきます

ちょっとづつヒントを出していきますので、探してね♪

 

ヒント

  1. そのブログは****って名乗ってたけど
  2. 今は自己紹介が消されているよ(2019/4/6現在)
    2019/6現在「かぶ」と名乗っています
  3. そのブログはある情報商材で株トレードにて大儲けしてるよ
  4. そのブログにはその情報商材屋へのリンクがあるよ
  5. 嘘くさいけど、一応、そのブログの内容は本当だとしてみるよ
  6. ブログのリンクからその情報商材屋のサイトに行ってみよう
  7. 嘘くさいけど何かを報告すると4桁万円*2あげるよ、って書いてあるよ
  8. ブログに戻って過去記事を確認してみると・・・・
  9. わかったかな? わかったら早速・・・

今日はここまでにするよ

探すの大変だけど、今後ヒントはどんどん追加してくよ

次は、google検索のヒントも出していくつもりだよ

(疲れたので止めます)

ただ、向こうもいろいろ書き換えてるから早く気づいてね

早いものがちだよ

情報拡散希望だよ

 ※詐欺師に約束守らせ大金を請求しましょう

※騙された人もこれで逆襲可能です

 次のヒントへのリンク

 http://supercar.hatenablog.com/archive/category/%E3%83%9F%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3

*1:4万円じゃないですよ 1000~9999万円のどれか

*2:4万円じゃないですよ 1000~9999万円のどれか

2019/4/7午前0時に楽しいミッションが発動します

2019/4/7午前0時に楽しいミッションが発動します

abenomix.hatenablog.com

流石に一気には無理で、徐々になりますが・・・

要は詐欺師を論破して、約束は守ってもらいましょう

というミッションです

さあ、今のうちにスクショして準備しておきましょう!

向こうが気づいて書き換えてもよいように・・・

 

現在ある詐欺グループと水面下で戦っております

現在ある詐欺グループと水面下で戦っております

本家ブログ 特にカテゴリ「怪しいブログ」を中心に見てもらうとわかると思うのですが・・・・

そのためこのブログもその戦いのために記事書きます

敵はGANTZぬらりひょんのように、叩いても叩いても名前やアドレスを変え再生を繰り返します

非常に厄介ですが、ちょっと面白いこと考えました

うまくいくかはあなた次第です

このミッションは4/7午前0時に発動します

本家ブログはこちら

http://supercar.hatenablog.com/

 

systemQ と systemR

自作システムはsystemQ と systemR という2つのシステムを備えています

https://cdn-ak.f.st-hatena.com/images/fotolife/s/sucar/20190302/20190302071844.png

systemQ

  • 現在はsystemQ2となってて
  • 基本的にC言語で書かれていて
  • 毎日のシグナル出しと
  • 最大1000日でのバックテストグラフを出力できます
  • 戦略はEsgrsdnl という自作DSLで記述できます
  • msys2上でmingw(64bit)で開発しました

https://cdn-ak.f.st-hatena.com/images/fotolife/s/sucar/20190316/20190316195419.png

systemQ2でのバックテストグラフ

 

systemR

  • 現在はsystemR1となってて
  • C言語で書いた自作コマンド(C言語パート)で事前処理したデータを
  • R言語環境(R言語パート)で読み込んで処理して
  • 簡易的なバックテストとシグナル出しができます
  • ただ、systemRで一番活用してるのはgr125255と名付けたグラフです
  • 戦略はR言語で記述します
  • C言語パートとR言語スクリプトはmsys2上で動かしてますが
  • C言語コマンドはmingwコンパイルされており32bitです
  • この辺は早くmingw(64bit)に移行したいのですが現在動作がおかしいです

https://cdn-ak.f.st-hatena.com/images/fotolife/s/sucar/20190303/20190303105025.png

systemR1でのバックテストグラフ

https://cdn-ak.f.st-hatena.com/images/fotolife/s/sucar/20190320/20190320192920.png

gr125255グラフ

 

systemRでは運用資金を設定したバックテストができないのですが、systemRで出したシグナルをsystemQにimportすることで、資金設定をした形でのバックテスト及びシグナル出しが可能です

 

とまあこんな感じになってますw

 

株価データcsvフォーマット変換

追記)フォーマット変換が複雑になってるので、整理予定

株価データを準備して所定のフォルダに置いて

f:id:sucar:20190321105900p:plain

をクリックすると

tcltk2/scr2.tcl に

.m.m1 add command -label "HenkanDauto" -underline 0 -command {exec bash -c ./henkanDauto &}

 と記述されてるので、

henkanDauto

#!/bin/bash
for var in `ls ./henkan/before/D*csv`
do
	year=`echo $var | cut -c 18-19`
	month=`echo $var | cut -c 20-21`
	day=`echo $var | cut -c 22-23`
	stocks=./henkan/stocks/stocks_20${year}-${month}-${day}.csv
	cat $var | awk -f ./awk/henkanD2new.awk > $stocks
	echo mv -f $var ./henkan
	mv -f $var ./henkan
	echo cp $stocks ./stocksnew
	cp $stocks ./stocksnew
done
exit

 というshell script が実行され、入手データのフォーマットを変換してくれます

実際に変換を行っているのは

awk/henkanD2new.awk

#!/bin/awk
BEGIN { 
	FS=","
	#print "henkanD2new"
	print "コード,銘柄名,市場,始値,高値,安値,終値,出来高,売買代金,henkanD2new"
 }
# 1,2行目を無視
NR>2 {
	printf("%s-T,",$2)
	printf("dummy,")
	printf("dummy,")
	if ($4==0) {printf(",")}
	else {printf("%s,",$4)}
	if ($5==0) {printf(",")}
	else {printf("%s,",$5)}
	if ($6==0) {printf(",")}
	else {printf("%s,",$6)}
	if ($7==0) {printf(",")}
	else {printf("%s,",$7)}
	printf("%s,",$8)
	printf("%d\n",($4+$7)*$8/2) #売買代金=(始値+終値)*出来高/2で代用
}

END {}

 です(ちなみに日本語シフトJIS LF(UNIX)となってますね)

 もし、入手するデータフォーマットが変わったら、このあたりを変更することになります

 更にちなみに変換後のcsvデータは シフトJIS CRLF になってます

 これで1回目の変換が実行され、前に入手していた新しいタイプのcsvフォーマットに変換されてます

で、あと2回変換が行われることになります

この辺は何とか簡潔にしたいのですが、動いているからまあいいか状態ですw