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

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

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

f:id:sucar:20150414193802p:plain

自作システム詳細目次

9 パラメタ&ルール適用部分のC言語ソース

追記2018/3/9)mm_0,ml_0追加

追記2018/2/20)  check() calc() 以外の関数をfunction.hへ移動

追記2018/2/19)#define _HEI_P_ #define _HEI_M_ 追加

追記2018/2/18)Heihei25,75,125を先に計算する

最も重要なパラメタ&ルール適用部分のC言語ソース

suQ2/main/mt/mt_rule.c

    
///////////////////////////////////////////////////////////////////////////////
//function.h 共通化
//2015/10/11 パラメタ拡張対応(anaint06と同等)
//2017/2/5 #ifdef _CALC_125_ etc
//         _MAXn_ の定義
//2017/3/19 heikin75()だけ特別 平均を求める
//2018/2/18 ↑特別平均を事前に求める方式に変える
//2018/2/19 #define _HEI_P_ #define _HEI_M_
#define _HEI_P_ 100
#define _HEI_M_ -100
int rsk1[DATAMAX][DATEMAX]; int rsk2[DATAMAX][DATEMAX]; double rsk1d[DATAMAX][DATEMAX]; double rsk2d[DATAMAX][DATEMAX]; int Xso=90; //Max損切 int Xrk=100; //Max利確% //最適利確損切を算出する期間 //int Xdd=200; // int Xdd=100; // int Xd0=0; // //int Xd=35; //checkが遡るdetaの日数 毎回確認 25+10 int Xd=127; //checkが遡るdetaの日数 毎回確認 パラメタ拡張対応 //2017/3/19 double Heihei25[DATEMAX]; double Heihei75[DATEMAX]; double Heihei125[DATEMAX]; #include "mt_prm.h" #include "function.h" int calc(void) { int i,j; double rsk; int cnt25,cnt75,cnt125; double hei25s,hei75s,hei125s; heikin5(); fprintf(stderr,"+1"); dxheikin5(); fprintf(stderr,"+2"); dx2heikin5(); fprintf(stderr,"+3"); heikin25(); fprintf(stderr,"+4"); dxheikin25(); fprintf(stderr,"+5"); dxave3_25(); fprintf(stderr,"+6"); // dx2heikin25(); calhei5_25(); fprintf(stderr,"+7"); // calhei5_25_25(); // dxave2_5_25_25(); calm5(); fprintf(stderr,"+8"); calm25(); fprintf(stderr,"+9"); heikin75(); heikin125(); #ifdef _CALC_3_ heikin3(); dxheikin3(); calm3(); fprintf(stderr,"-3"); #endif #ifdef _CALC_15_ heikin15(); dxheikin15(); calm15(); fprintf(stderr,"-15"); #endif #ifdef _CALC_75_ dxheikin75(); calm75(); fprintf(stderr,"-75"); #endif #ifdef _CALC_125_ dxheikin125(); fprintf(stderr,"-125"); #endif #ifdef _CALC_DA_ da_heikin3(); da_heikin5(); fprintf(stderr,"da"); #endif //2018/2/18 i j 入れ替え Heihei 1回のみ初期化 for (j=0;j<DtMax-Xd;j++) { //2018/2/18 Heihei25[j]=0.0; Heihei75[j]=0.0; Heihei125[j]=0.0; //2018/2/18 cnt25=0; cnt75=0; cnt125=0; for (i=0;i<CodeMax;i++) { //ここのrskは整数 1 0 -1 Rと同じにするには支障あり? rsk=owa[i][j+1]-hjm[i][j+1]; rsk1d[i][j]=rsk; if (rsk<0.0) rsk1[i][j]=-1; else if (rsk==0.0) rsk1[i][j]=0; else rsk1[i][j]=1; rsk=owa[i][j+2]-hjm[i][j+2]; rsk2d[i][j]=rsk; if (rsk<0.0) rsk2[i][j]=-1; else if (rsk==0.0) rsk2[i][j]=0; else rsk2[i][j]=1; //2018/2/18 hei25s=-(hei25[i][j]-owa[i][j])/owa[i][j]*100; //a if ((_HEI_P_ >hei25s) && (hei25s> _HEI_M_)) { Heihei25[j]+=hei25s; cnt25++; } hei75s=-(hei75[i][j]-owa[i][j])/owa[i][j]*100; if ((_HEI_P_ >hei75s) && (hei75s > _HEI_M_)) { Heihei75[j]+=hei75s; cnt75++; } hei125s=-(hei125[i][j]-owa[i][j])/owa[i][j]*100; if ((_HEI_P_ >hei125s) && (hei125s > _HEI_M_)) { Heihei125[j]+=hei125s; cnt125++; } } //2018/2/18 Heihei25[j]/=(double)cnt25; Heihei75[j]/=(double)cnt75; Heihei125[j]/=(double)cnt125; fprintf(stderr,"%d:%8.2lf:%8.2lf:%8.2lf\n",j,Heihei25[j],Heihei75[j],Heihei125[j]); } } //代金maxだけが2 int check(void){ #ifndef _MAXn_ #define _MAXn_ 5 #endif int i,ii,ii1,ii2,ii3,ii4,j,k,l; //test int iin[_MAXn_]; // // int hit,sc; int hit,sc1,sc2,sc3,sc4,sc5; int m; int mm_0,mm_1,mm_2,mm_3,mm_4,mm_5,mm_6,mm_7,mm_8,mm_9,mm_10; int rsks1,rsks2; double rsks1d,rsks2d; double sp1,sp2,sp3,sp4,sp5; double pf1,pf2,pf3,pf4,pf5; double per1,per2,per3,per4,per5; double phit; double maxdai,maxdai1,maxdai2,maxdai3,maxdai4; //test double maxdain[_MAXn_]; // double hei5s,hei25s,hei5_25s,dxhei5s,dxave3hei25s,zrk; double dai; double data; double hei5s1; double hei25s1; double dxhei5s1; double dxhei25s1; double hei5_25s1; double dxave3hei25s1; //add 2015/09/23 double hei75s; double hei3s; double hei15s; double hei125s; //add 2015/09/27 double dxhei75s; double dxhei3s; double dxhei15s; double dxhei125s; //add 2015/12/06 double hei3_15s; //add 2016/07/10 double hei5s2; double hei25s2; double hei5_25s2; //add 2016/7/16 double dxhei5s2; double dxhei25s2; double zrk1; double zrk2; int ml; int ml_0,ml_1,ml_2,ml_3,ml_4,ml_5,ml_6,ml_7,ml_8,ml_9,ml_10; //2017/3/19 int cnt25,cnt75,cnt125; int FLT; #ifdef _CALC_DA_ double da_hei3s; double da_hei5s; #endif #ifdef Ex_para #include "ex_para.h" #endif for (j=0;j<DtMax-Xd;j++) { if (j%50==0) fputs(".",stderr); //2017/3/19 cnt25=0; cnt75=0; cnt125=0; for (i=0;i<CodeMax;i++) { hei5s=-(hei5[i][j]-owa[i][j])/owa[i][j]*100; //b hei25s=-(hei25[i][j]-owa[i][j])/owa[i][j]*100; //a hei5_25s=hei5_25[i][j]/owa[i][j]*100; //配列なくても計算できる //f dxhei5s=dxhei5[i][j]/owa[i][j]*100; dxave3hei25s=dxave3hei25[i][j]/owa[i][j]*100; zrk=(owa[i][j]-hjm[i][j+1])/hjm[i][j+1]*100;//多分間違いだがそのままにしとく //z hei5s1=-(hei5[i][j+1]-owa[i][j+1])/owa[i][j+1]*100; hei25s1=-(hei25[i][j+1]-owa[i][j+1])/owa[i][j+1]*100; dxhei5s1=dxhei5[i][j+1]/owa[i][j+1]*100; dxhei25s1=dxhei25[i][j+1]/owa[i][j+1]*100; hei5_25s1=hei5_25[i][j+1]/owa[i][j+1]*100; //配列なくても計算できる dxave3hei25s1=dxave3hei25[i][j+1]/owa[i][j+1]*100; hei75s=-(hei75[i][j]-owa[i][j])/owa[i][j]*100; hei125s=-(hei125[i][j]-owa[i][j])/owa[i][j]*100; #ifdef _CALC_3_ hei3s=-(hei3[i][j]-owa[i][j])/owa[i][j]*100; dxhei3s=dxhei3[i][j]/owa[i][j]*100; //g #ifdef _CALC_15_ hei3_15s=(hei3[i][j]-hei15[i][j])/owa[i][j]*100;//配列なくても計算できた ml=m3[i][j]+m15[i][j]*5; ml_0=m3[i][j]+m15[i][j]*5; ml_1=m3[i][j+1]+m15[i][j+1]*5; ml_2=m3[i][j+2]+m15[i][j+2]*5; ml_3=m3[i][j+3]+m15[i][j+3]*5; ml_4=m3[i][j+4]+m15[i][j+4]*5; ml_5=m3[i][j+5]+m15[i][j+5]*5; ml_6=m3[i][j+6]+m15[i][j+6]*5; ml_7=m3[i][j+7]+m15[i][j+7]*5; ml_8=m3[i][j+8]+m15[i][j+8]*5; ml_9=m3[i][j+9]+m15[i][j+9]*5; ml_10=m3[i][j+10]+m15[i][j+10]*5; #endif #endif #ifdef _CALC_15_ hei15s=-(hei15[i][j]-owa[i][j])/owa[i][j]*100; dxhei15s=dxhei15[i][j]/owa[i][j]*100; #endif #ifdef _CALC_75_ dxhei75s=dxhei75[i][j]/owa[i][j]*100; #endif #ifdef _CALC_125_ dxhei125s=dxhei125[i][j]/owa[i][j]*100; #endif #ifdef _CALC_DA_ da_hei3s=-(da_hei3[i][j]-dispda[i][j])/dispda[i][j]*100; da_hei5s=-(da_hei5[i][j]-dispda[i][j])/dispda[i][j]*100; #endif //add 2016/07/10 hei5s2=-(hei5[i][j+2]-owa[i][j+2])/owa[i][j+2]*100; //i hei25s2=-(hei25[i][j+2]-owa[i][j+2])/owa[i][j+2]*100; //j hei5_25s2=hei5_25[i][j+2]/owa[i][j+2]*100; //配列なくても計算できる //k //add 2016/07/16 dxhei5s2=dxhei5[i][j+2]/owa[i][j+2]*100; dxhei25s2=dxhei25[i][j+2]/owa[i][j+2]*100; zrk1=(owa[i][j+1]-hjm[i][j+2])/hjm[i][j+2]*100;//多分間違いだがそのままにしとく //z zrk2=(owa[i][j+2]-hjm[i][j+3])/hjm[i][j+3]*100;//多分間違いだがそのままにしとく //z //冗長だがRと同じ表記で条件が書けるように m=m5[i][j]+m25[i][j]*5; mm_0=m5[i][j]+m25[i][j]*5; mm_1=m5[i][j+1]+m25[i][j+1]*5; mm_2=m5[i][j+2]+m25[i][j+2]*5; mm_3=m5[i][j+3]+m25[i][j+3]*5; mm_4=m5[i][j+4]+m25[i][j+4]*5; mm_5=m5[i][j+5]+m25[i][j+5]*5; mm_6=m5[i][j+6]+m25[i][j+6]*5; mm_7=m5[i][j+7]+m25[i][j+7]*5; mm_8=m5[i][j+8]+m25[i][j+8]*5; mm_9=m5[i][j+9]+m25[i][j+9]*5; mm_10=m5[i][j+10]+m25[i][j+10]*5; //簡易資金考慮用(かつてのbugの再現も可能) dai=da[i][j]; rsks1=rsk1[i][j]; rsks2=rsk2[i][j]; rsks1d=rsk1d[i][j]; rsks2d=rsk2d[i][j]; //p1 <- subset(s , daikin1>dai & dai>daikin & a>hei25s & hei25s>aa) //p <- subset(p1 , m==(-24) & m5m(mm_5)<0 & zrkhei5s & hei5s>bb & c>dxave3hei25s & dxave3hei25s>cc & e>dxhei5s & dxhei5s>ee) #ifdef Ex_para #include "ex_para.mt" #endif if ( #include "rule.mt" 1 ) ck[i][j]=1; } } for (j=0;j<DtMax-Xd;j++) { maxdai=0.0; maxdai1=0.0; maxdai2=0.0; maxdai3=0.0; maxdai4=0.0; ii=-1; ii1=-1; ii2=-1; ii3=-1; ii4=-1; //test for (k=0;k<_MAXn_;k++) { maxdain[k]=0.0; iin[k]=-1; } // //2017/3/19 #ifndef _HH25_L #define _HH25_L -100 #endif #ifndef _HH75_L #define _HH75_L -100 #endif #ifndef _HH125_L #define _HH125_L -100 #endif #ifndef _HH25_H #define _HH25_H 100 #endif #ifndef _HH75_H #define _HH75_H 100 #endif #ifndef _HH125_H #define _HH125_H 100 #endif if ((_HH25_H >Heihei25[j]) && (Heihei25[j]>_HH25_L) && (_HH75_H >Heihei75[j]) && (Heihei75[j]>_HH75_L) && (_HH125_H >Heihei125[j]) &&(Heihei125[j]>_HH125_L)) FLT=1; else FLT=0; for (i=0;i<CodeMax;i++) { if(ck[i][j]==1) { perform(i,j,Xp,&hit,&sc1,&pf1,&sc2,&pf2,&sc3,&pf3,&sc4,&pf4,&sc5,&pf5); per1=(((double)sc1+0.62*2.0)/((double)hit+2.0))*100; per2=(((double)sc2+0.62*2.0)/((double)hit+2.0))*100; per3=(((double)sc3+0.62*2.0)/((double)hit+2.0))*100; per4=(((double)sc4+0.62*2.0)/((double)hit+2.0))*100; per5=(((double)sc5+0.62*2.0)/((double)hit+2.0))*100; sp1=((double)sc1/(double)hit)*100; sp2=((double)sc2/(double)hit)*100; sp3=((double)sc3/(double)hit)*100; sp4=((double)sc4/(double)hit)*100; sp5=((double)sc5/(double)hit)*100; phit=hit/(double)DtMax; pf1/=(double)hit; pf2/=(double)hit; pf3/=(double)hit; pf4/=(double)hit; pf5/=(double)hit; #ifdef FILTER if (((per1>Xper1 && pf1>Xpf1) ||(per2>Xper2 && pf2>Xpf2) || (per3>Xper3 && pf3>Xpf3) || (per4>Xper4 && pf4>Xpf4) || (per5>Xper5 && pf5>Xpf5)) && FLT) { #endif //printf("%s\t%d\t%5.2lf\t%5.2lf\t%5.2lf\t%5.2lf\n",code[i],j,per2,pf2,per3,pf3); //何もなければdaiで簡易資金考慮 data=dai; #ifdef MAX #include "max.mt" //max.mtでdataを差し替える #endif //test for (k=0;k<_MAXn_;k++) { if(data>maxdain[k]) { for(l=_MAXn_-1;l>k;l--) { maxdain[l]=maxdain[l-1]; iin[l]=iin[l-1]; } maxdain[l]=dai; iin[l]=i; break; } } // #ifdef FILTER } #endif } } for (k=0;k<_MAXn_;k++) { if (iin[k]!=-1) ck[iin[k]][j]=2; } //test //if (ii!=iin[0] || ii1!=iin[1] || maxdai!=maxdain[0] || maxdai1!=maxdain[1] ) fprintf(stderr,"error\n"); // } fputs("\n",stderr); } //////////////////////////////////////////////////////////////

 結構ごちゃごちゃしてて整理したいけど下手に弄って、現在の運用をおかしくしたくはない

それに、もっと機能を拡張したいけどさてどうするか?

とりあえず最新ソースとして記事にしといて、弄ったら更新していく

現在ストラテジーは外部に記述されていてインクルードされている

抜き出すと

 

通常パラメタのヘッダ
#include "mt_prm.h"

拡張パラメタのヘッダ
#ifdef Ex_para
#include "ex_para.h"
#endif

拡張パラメタの記述
#ifdef Ex_para
#include "ex_para.mt"
#endif

ここまででパラメタは準備できたので

ルールの記述
#include "rule.mt"

1

 ※最後の1は必要

このままで行くか、C言語の外で拡張するかまだ未定

追記)C言語ソース拡張は最小限にして、外部でm4を駆使して拡張することにしました

ちなみにストラテジーはcsvになってて

f:id:sucar:20180204095029p:plain

mt_mp20_0_1T1test

こんな感じに記述できる