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

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

本家はこちら↓
f:id:sucar:20151115183011p:plain

SU/CAR-ST-APplication-cellsのmix of AB(安倍野ミックス)と申します
来訪ありがとうございます
シストレツールを自作してます
自分用の記事が多いのであまり役には立たないブログでしたが
2018/10月以降、多少は役立つブログになるかもしれません
と思いましたが、しばらくは自分用記事が多いかも・・・

f:id:sucar:20150414193802p:plain

自作システム詳細目次

自作システムのC言語sub以下をライブラリ化

自作システムのエンジン部分はC言語で分割ファイル活用してちょっとだけ本格的に構築してる(グダグダですが)

で個別のsubファイルは

suQ2/main/sub に入ってて、そのフォルダでmake一発でオブジェクトファイルにコンパイルできる

しかし、機能UPよりオブジェクトが増えてくるとそれをmainコンパイルshellスクリプトコンパイルするんだが、増えたオブジェクトファイル名をいちいち書き足さないといけなかった

折角なので ar を使ってライブラリ化してみた

suQ2/main/sub/makefile

# Makefile_other
# プログラム名とオブジェクトファイル名
PROGRAM = main
OBJS = read_kd.o read_kd0.o check0.o read_kd2.o matome.o sngrx.o common_y.o output.o bnkt.o dump.o import.o

# 定義済みマクロの再定義
CC = gcc
#CFLAGS = -Wall -O2
CFLAGS =  -O2
AR = ar
ARFLAG = crsv
LFILE = libSucar.a
# サフィックスルール適用対象の拡張子の定義
.SUFFIXES: .c .o

# プライマリターゲット
$(PROGRAM): $(OBJS)
	#$(CC) -o $(PROGRAM) $^
	ls -l  $(OBJS)
	$(AR) $(ARFLAG) $(LFILE) $(OBJS)
	@echo "libSucar.a make success"


# サフィックスルール
.c.o:
	$(CC) $(CFLAGS) -c $<

# ファイル削除用ターゲット
.PHONY: clean
clean:
	$(RM) $(OBJS)

# ヘッダファイルの依存関係
read_kd.o: check0.h read_kd.h env.h
read_kd0.o: check0.h read_kd0.h env.h
read_kd2.o: check0.h read_kd2.h env.h
cheack0.o: check0.h env.h
matome.o: matome.h env.h
sngrx.o: sngrx.h env.h
common_y.o: sngrx.h env.h common_y.h
output.o: sngrx.h env.h common_y.h output.h
bnkt.o: env.h bnkt.h
dump.o: env.h dump.h
import.o: env.h import.h

ここを参考にさせていただきました

programmer-toy-box.sblo.jp

コンパイルスクリプトの方は

suQ2/main/mk_MAIN_

MAIN=`cat _MAIN_`
echo mk_MAIN_  '('${MAIN}')'
gcc -c ${MAIN}.c -o simxp8trsu_nobug2.o

echo compile and link Sucar.a
gcc  simxp8trsu_nobug2.o -L./sub -lSucar -o simxp8trsu_nobug2.exe
exit

でうまく行った

signal import の拡張

suQ2/main/main_000.c

double *V[100];
char *imfn;
char *imdir;

char *imdir;を追加して

#ifdef _SG_IMPORT_
	//ここにsignal import処理
	//ck[i][j]==0 だとシグナルになる
	//つまり何もしないとすべてにシグナルが立っている
	imfn=_SG_IMPORT_;
#ifndef _SG_IMP_DIR_
	import(imfn);
#else
	imdir=_SG_IMP_DIR_;
	import2(imfn,imdir);
#endif
#endif

 _SG_IMP_DIR_が定義されていると import2()を呼ぶ

suQ2/main/sub/import.h

int import(char *);
int import2(char *,char *);

suQ2/main/sub/import.c

int import2(char *imfn,char *imdir) {
	int i,j,n;
	char buf[40];
	char impfilename[100];
	char Dt[11];
	int date,jdate;
	uint8_t imCode[8];
	FILE *fp;
	sprintf(impfilename,"./import/%s/signal%s.txt",imdir,imfn);
	for (j=0;j<DtMax;j++){
		for (i=0;i<CodeMax;i++){
			ck[i][j]=-1;
		}
	}
	fp=fopen(impfilename, "rt");
	if (fp) {
		fprintf(stderr,"%s import\n",impfilename);
		j=0;
		while ( fgets(buf,40,fp)!=NULL) { 
			n=check0(buf);
			if (n!=0) {
				sscanf(buf,"%s %s",Dt,imCode);
				date=dt2int(Dt);
				for (;j<DtMax;j++) {
					jdate=dt2int(dt[j]);
					if (date==jdate) break;
				}
				if (j==DtMax) break;
				if (date==jdate){ //念のため
					for (i=0;i<CodeMax;i++) {
						if (strcmp(imCode,code[i])==0) {
							ck[i][j]=0;
							//debug
							//fprintf(stderr,"%s:: %s %d %d\n",code[i],imCord,i,j);
							break;
						}
					}
				}
				
			}
		}
		fclose(fp);
	}
	else fprintf(stderr,"cannot open import%s\n",imfn);
	return 0;
}

 

 import2()を追加

awk/mt_h_2.awk

$1=="_SG_IMP_" || $1=="SG_IMP" {
	printf("#define _SG_IMPORT_ \"%s\"\n",$2)
	if ($3!="") {
		printf("#define _SG_IMP_DIR_ \"%s\"\n",$3)
	}
	}

_SG_IMP_に処理追加

これで

	_SG_IMP_	ALL	subdir

とやるとimportするsub dir を指定できる

 

 

R_NOW_IMP.m4にexportされるrule(9-12)

suR1/rule9.R

2019/7/27追加)

 

#暫定1号
#25日移動平均乖離率が小さい順の下から0.1%
#
if (lmt==0) {lmt<-10}
#
s$h25<-hei25(s) ans<-tapply(s$h25,s$j,quantile,0.001,na.rm=TRUE) ans0<-hei(ans,10) q <- subset(s , #M525 s5m(sp0m)+5*s25m(sp0m)<(-10) & # h25<ans0[j+1]& ##h25< (-20)& h25< (-20)& dai>100000000& TRUE ) #ソートしていないので猿ダーツ index<-tapply(-q$dai,q$j,order) ans<-NULL for (i in 1:length(index)) { ans<-c(ans,index[ [i] ]) } q$ord<-ans p<-subset(q,ord<=lmt) #p<-q rm(q) #-5%で指値5日後引け成り売り kai_k<- 5.0 uri_k<- 6.0 kai<-0 uri<-3 kap<- abs((p$owa0-p$h10j0)/p$h10j0*100.0*0.8) urp<- abs((p$owa0-p$h10j0)/p$h10j0*100.0*0.8)

となってる

無駄な部分もあるが、壊すといけないので整理はせずこのまま

 バックテスト

f:id:sucar:20190629135521p:plain

最近好調!

 suR1/rule10.R

#暫定2号
#75日移動平均乖離率が小さい順の下から0.1%
#
if (lmt==0) {lmt<-10}
#
s$h75<-hei75(s) ans<-tapply(s$h75,s$j,quantile,0.001,na.rm=TRUE) ans0<-hei(ans,10) q <- subset(s , #M575 s5m(sp0m)+5*s75m(sp0m)<(10) & # h75<ans0[j+1]& h75< (-30)& ##h75< (-25)& dai>100000000& TRUE ) #ソートしていないので猿ダーツ index<-tapply(-q$dai,q$j,order) ans<-NULL for (i in 1:length(index)) { ans<-c(ans,index[ [i] ]) } q$ord<-ans p<-subset(q,ord<=lmt) #p<-q rm(q) #-5%で指値5日後引け成り売り kai_k<- 5.0 uri_k<- 6.0 kai<-0 uri<-3 kap<- abs((p$owa0-p$h10j0)/p$h10j0*100.0*0.8) urp<- abs((p$owa0-p$h10j0)/p$h10j0*100.0*0.8)

バックテスト

f:id:sucar:20190629135843p:plain

これもいい感じ

 suR1/rule11.R

#暫定3号
#125日移動平均乖離率が小さい順の下から0.1%
#
if (lmt==0) {lmt<-10}
#
s$h125<-hei125(s) ans<-tapply(s$h125,s$j,quantile,0.001,na.rm=TRUE) ans0<-hei(ans,10) q <- subset(s , #M5125 s5m(sp0m)+5*s125m(sp0m)<(-10) & # h125<ans0[j+1]& ##h125< (-25)& h125< (-30)& dai>100000000& TRUE ) #ソートしていないので猿ダーツ index<-tapply(-q$dai,q$j,order) ans<-NULL for (i in 1:length(index)) { ans<-c(ans,index[ [i] ]) } q$ord<-ans p<-subset(q,ord<=lmt) #p<-q rm(q) #-5%で指値5日後引け成り売り kai_k<- 5.0 uri_k<- 6.0 kai<-0 uri<-3 kap<- abs((p$owa0-p$h10j0)/p$h10j0*100.0*0.8) urp<- abs((p$owa0-p$h10j0)/p$h10j0*100.0*0.8)

バックテスト

f:id:sucar:20190629140024p:plain

これもいい感じ

 suR1/rule12.R

#暫定4号
#15日移動平均乖離率が小さい順の下から0.1%
#
if (lmt==0) {lmt<-10}
#
s$h15<-hei15(s) ans<-tapply(s$h15,s$j,quantile,0.001,na.rm=TRUE) ans0<-hei(ans,10) q <- subset(s , #M515 s5m(sp0m)+5*s15m(sp0m)<(-10) & # h15<ans0[j+1]& ##h15< (-15)& h15< (-15)& dai>100000000& TRUE ) #ソートしていないので猿ダーツ index<-tapply(-q$dai,q$j,order) ans<-NULL for (i in 1:length(index)) { ans<-c(ans,index[ [i] ]) } q$ord<-ans p<-subset(q,ord<=lmt) #p<-q rm(q) #-5%で指値5日後引け成り売り kai_k<- 5.0 uri_k<- 6.0 kai<-0 uri<-3 kap<- abs((p$owa0-p$h10j0)/p$h10j0*100.0*0.8) urp<- abs((p$owa0-p$h10j0)/p$h10j0*100.0*0.8)

バックテスト

f:id:sucar:20190629140251p: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/