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

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

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

f:id:sucar:20150414193802p:plain

自作システム詳細目次

7 プログラムメイン部分現状

11ヶ月ぶりに記事書いてますw

ほぼ自分用の記事

現在の自作シストレC言語ソースのメイン部分

suQ2/main/simxp8trsu_nobug2.c

    
/*
 * 業種別を取り込む準備⇒廃止
 * 分割処理 1/500まで拡張
 * 分割時の代金バグを修正
 * mt_rule対応
 * 表示用dispda[][]
 * 2016/6/25 出力をdispda[][]⇒owa[][]
 * simxp7->8
 * 出力を根本的に変える(一つずれる)
 *
 * 2016/8/11 
 *	char* c_cfg=".\\code\\code.cfg"; を
 *  SHIJOUが定義されていたら変更する
 *
 * 2016/09/10
 * Zday=\t%d\t Yson=\t%5.2f
 *
 * 2016/11/05
 * msys2 移行
 * UTF-8 LF
 
 * 2017/1/17
 * daiの出力+-
 *
 * 2017/1/22 BUG定義時の修正
 * 2017/2/5 DAYSON 定義の廃止
 * 2017/2/11 分割の正規対応try開始
 * 2017/3/19 平均乖離率の平均を計算 hei75
 */
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>


#include "sub/env.h"
#include "sub/check0.h"
#include "sub/read_kd2.h"
#include "sub/matome.h"
#include "sub/sngrx.h"
#include "sub/common_y.h"
#include "sub/output.h"
#include "sub/bnkt.h"

uint8_t dt[DATEMAX][11]; //use output
uint8_t code[DATAMAX][8]; //use output main
int gys[DATAMAX]; //read_kd2
double hjm[DATAMAX][DATEMAX]; //use output
double tak[DATAMAX][DATEMAX]; //use output
double yas[DATAMAX][DATEMAX]; //use output
double owa[DATAMAX][DATEMAX]; //use output
double da[DATAMAX][DATEMAX];//daiから変更
int bnk[DATAMAX]; //株式分割
double dispda[DATAMAX][DATEMAX];//表示用のdaikin(分割バグ無関係)// output //で使用

double suii[DATEMAX][XDAYMAX2]; //購入後の損益推移(安値→高値) // use output
double pfm[100];
double pfmmax;
double pfmson;
double pfmm[50];
double pfmall[100][100];
double dispda[DATAMAX][DATEMAX];//表示用のdaikin(分割バグ無関係)

int ck[DATAMAX][DATEMAX];        //フラグ 1
int CodeMax;
int DtMax;

int Jkc=0;

double Pmax[PM];
int Lr[PM];
int Ms[PM];

int fm=0; //output format 0 or 1

//int bncode[BNKTMAX]; //分割データcode
//int bnj[BNKTMAX]; //分割データj
//double bnkt[BNKTMAX]; //分割データ分割比率

//////
#include "mt/mt_rule.c"
//////

#ifndef _YSON_
double Yson=-70.0; //損切% 必要に応じて変える
#endif
#ifndef _ZDAY_
int Zday=5; //損切ライン 必要に応じて変える
#endif

int main (void) {
	//2016/8/11 市場切り替え対応
#ifdef SHIJOU
	uint8_t* c_cfg=SHIJOU;
#else
	uint8_t* c_cfg="./code/code.cfg"; 
#endif
	//
	uint8_t* d_cfg="data.cfg";
	uint8_t* rksg="./output/rksg.txt"; //利確損切を別ファイルに
	uint8_t  filename[40];
	uint8_t buf[40];
	double brk;
	double pmax;
	int i,k,n;
	//2017/1/22 add
	int bug=0;
	//int lr,ms;

	//2017/2/11 add
	int bncnt; //読み込んだ分割データの総数
	int bnflg=0;//0なら今までの分割チェックをしない

	FILE *fp;
	//code fileの読み込み
	fp = fopen(c_cfg, "rt");
	if ( fp ){
		i=0;
		while ( fgets(buf,40,fp)!=NULL) { 
			n=check0(buf);
			if (n!=0) {
				strcpy(code[i],buf);
				//printf("%d %s \n",i,code[i]);
				i++;
			}
		}
		CodeMax=i;
	
	}
	fclose(fp);
	fprintf(stderr,"read code file\n");
	
#ifdef BUG
				bug=1;
#endif

	//data file の読み込み
	fp = fopen(d_cfg, "rt");
	if ( fp ){
	//  d_cfg   data読込作業
		i=0;
		while ( fgets(filename,40,fp)!=NULL) { 
			n=check0(filename);
			if (n!=0) {             //#コメント以外 @は除外
			//2017/1/22

				read_kd2(filename,i,bug,bnflg);
				//
				i++;
			}
		}
		DtMax=i;
		fclose(fp);
	}
#ifdef _DEBUG_
	for (k=0;k<CodeMax;k++) {if(strncmp(code[k],"9830",5)==0)break;} //j=29
	fprintf(stderr,"test %s %d %f %f\n",code[k],k,hjm[k][29],hjm[k][30]);
#endif
	fprintf(stderr,"\nread data file\n");
	//分割データ読み込み
	if (bnflg==0){
		bncnt=bnkt_read(bug);
		fprintf(stderr,"read bnkt.dat %d\n",bncnt);
	}
#ifdef _DEBUG_
	fprintf(stderr,"test %s %d %f %f\n",code[k],k,hjm[k][29],hjm[k][30]);
#endif
	maxxday();
	minxday();
	
	//calc25();
	calc();
	check();
#ifdef _OUTPUT_FMT_
	fm=_OUTPUT_FMT_;
#endif
	output(fm);
	
	fp=fopen(rksg,"w");
	fprintf(fp,"----\tXd0\t%d\t----\tXdd\t%d\t-----\t%d\t---------------------------\n",Xd0,Xdd,DtMax);
	fprintf(fp,"利確\t損切\n");
	matome();
	pmax=-100.0;
	for (k=0;k<PM;k++) {
		if (Pmax[k]!=pmax && Lr[k]!=0){
			fprintf(fp,"%d\t%d\t%6.3lf\t%8.2lf\n",Lr[k]+1,-Ms[k]-1,Pmax[k],Pmax[k]*Jkc);
			pmax=Pmax[k];
		}
	}
	fclose(fp);

}

 

現在はこんな感じ

ビルド前に定義する部分だけ抜き出すと

#ifndef _YSON_
double Yson=-30.0; //損切% 必要に応じて変える
#endif
簡易損切:_YSON_ を明示的に定義しなかった場合のデフォルト設定が-30%


#ifndef _ZDAY_
int Zday=5; //損切ライン 必要に応じて変える
#endif
時間切れ損切:_ZDAY_を明示的に定義しなかった場合のデフォルト設定が5日


#ifdef SHIJOU
uint8_t* c_cfg=SHIJOU;
#else
uint8_t* c_cfg="./code/code.cfg";
#endif
市場ファイル:銘柄コード群が記載されたファイルを指定

 

#ifdef BUG
bug=1;
#endif
read_kd2(filename,i,bug,bnflg);
かつてデータ読み込みにbugがあったのだが、その方が成績良かったのでそのbugを残す際に定義

 

#ifdef _DEBUG_
デバッグ用にデータをプリント

 

#ifdef _OUTPUT_FMT_
fm=_OUTPUT_FMT_;
#endif
output(fm);
出力フォーマットを指定

 

あと気づいたけど

int bnflg=0;//0なら今までの分割チェックをしない

で固定になってる

もしProtraが使えなくなって元の簡易分割推定処理に戻すならここを弄ること