From 4330f1e8e920669fb38657be0496bcf02b884257 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 6 Jan 2017 15:33:12 +0200 Subject: [PATCH] test --- basilisk/tradebots_SVM.h | 30 ++++++++----- basilisk/tradebots_liquidity.c | 82 +++++++++++++++++++++------------- iguana/dpow/dpow_network.c | 2 +- iguana/iguana777.h | 4 +- iguana/iguana_payments.c | 47 +++++++++++++++++++ iguana/m_notary | 8 ++-- 6 files changed, 125 insertions(+), 48 deletions(-) diff --git a/basilisk/tradebots_SVM.h b/basilisk/tradebots_SVM.h index dadda0b9d..3e7b566cd 100755 --- a/basilisk/tradebots_SVM.h +++ b/basilisk/tradebots_SVM.h @@ -257,10 +257,13 @@ static inline void STocas_calc_outputs(register struct ocas_vars *vars,register if ( 1 && isnan(output[i]) != 0 ) { svmtype *features = vars->features[weekinds[i]-vars->starti];//get_jfp_features(vars->selector,numfeatures,c,weekinds[i]); - for (j=0; janswers[(weekinds[i]-vars->starti)*TRADEBOTS_NUMANSWERS + answerind]) != 0.f ) { - answermag = 1.;//fabs(y); // 1.; + answermag = fabs(y); // 1.; if ( (old_output[i] * (1. - t2) + t2*output[i]) <= answermag ) //1. add_newcut_entry(vars,answerind,new_cut,i,weekinds[i],y); newoutput = (old_output[i] * (1. - t1)) + (t1 * output[i]); @@ -487,11 +490,14 @@ static inline void calc_ocas_strategy(register struct ocas_vars *vars,register i { double sum=W0; svmtype *features = vars->features[weekinds[i]-vars->starti];//get_jfp_features(vars->selector,numfeatures,vars->c,weekinds[i]); - for (j=0; j .0000001 ) - printf("numIt.%d docid.%-6d w%-6d sum %11.7f * y%2.0f %11.7f != %11.7f newoutput [%11.7f] W0 %11.7f oldW0 %11.7f\n",vars->numIt[answerind],i,weekinds[i],sum,y,sum*y,newoutput,newoutput-sum*y,W0,oldW0); - newoutput = sum*y; + if ( features != 0 ) + { + for (j=0; j .0000001 ) + printf("numIt.%d docid.%-6d w%-6d sum %11.7f * y%2.0f %11.7f != %11.7f newoutput [%11.7f] W0 %11.7f oldW0 %11.7f\n",vars->numIt[answerind],i,weekinds[i],sum,y,sum*y,newoutput,newoutput-sum*y,W0,oldW0); + newoutput = sum*y; + } } if ( newoutput <= answermag ) { @@ -881,7 +887,7 @@ static inline int ocas_iter(struct ocas_vars *vars,int max_nohwm) add_newcut_entry(vars,answerind,new_cut,i,weekinds[i],y); } } - fprintf(stderr,"skip %c.A%02d cuts +%d -%d, ",c_to_refc(vars->c),answerind,vars->numposcuts[answerind],vars->numnegcuts[answerind]); + fprintf(stderr,"skip %d.A%02d cuts +%d -%d, ",c_to_refc(vars->c),answerind,vars->numposcuts[answerind],vars->numnegcuts[answerind]); } else { @@ -1028,7 +1034,7 @@ void ocas_init(struct ocas_vars *vars,int32_t c,int32_t numfeatures,int32_t star //printf("finish A%d len.%d\n",answerind,vars->len[answerind]); lhs = vars->lhs[answerind]; ptr = vars->CLspaces[answerind]; - printf("%d.A%d call init ocas vars weekinds[0] %p numfeatures.%d (%p %p)\n",c_to_refc(vars->c),answerind,vars->weekinds[0],numfeatures,lhs,ptr); + //printf("%d.A%d call init ocas vars weekinds[0] %p numfeatures.%d (%p %p)\n",c_to_refc(vars->c),answerind,vars->weekinds[0],numfeatures,lhs,ptr); if ( lhs == 0 || ptr == 0 ) continue; vars->numlhs[answerind] = 0;//init_full_A(lhs->full_A,vars->numfeatures,c,answerind,models); diff --git a/basilisk/tradebots_liquidity.c b/basilisk/tradebots_liquidity.c index cb8f4e9f6..12fb15932 100755 --- a/basilisk/tradebots_liquidity.c +++ b/basilisk/tradebots_liquidity.c @@ -30,7 +30,7 @@ double OCAS_PLUS_INF,OCAS_NEG_INF; double Tradebots_decays[TRADEBOTS_NUMDECAYS] = { 0.5, 0.666, 0.8, 0.9, 0.95, 0.99, 0.995, 0.999 }; -int32_t Tradebots_answergaps[TRADEBOTS_NUMANSWERS] = { 5, 10, 15, 20, 30, 60, 120, 720 }; +int32_t Tradebots_answergaps[TRADEBOTS_NUMANSWERS] = { 60, 60, 120, 120, 240, 240, 720, 720 }; struct tradebot_arbentry { @@ -268,9 +268,11 @@ int32_t tradebots_calcsvmfeatures(double *svmfeatures,struct tradebot_arbpair *p printf("reftimestamp.%u is illegal\n",reftimestamp); return(-1); } - numpairfeatures = n = tradebots_expandrawfeatures(svmfeatures,rawfeatures,reftimestamp,prevrawfeatures); + numpairfeatures = n = tradebots_expandrawfeatures(svmfeatures,prevrawfeatures,reftimestamp,rawfeatures); + if ( n <= 0 ) + return(-1); for (i=0; i<60; i++,n+=numpairfeatures) - tradebots_expandrawfeatures(svmfeatures,rawfeatures,reftimestamp,&prevrawfeatures[i*72]); + tradebots_expandrawfeatures(&svmfeatures[n],&prevrawfeatures[i*72],reftimestamp,rawfeatures); if ( 0 && pair->numsvmfeatures != (1+pair->numpairs)*n ) { for (i=0; inumpairs; i++) // need to do lookups @@ -358,26 +360,30 @@ void tradebots_calcanswers(struct tradebot_arbpair *pair) ind = i + Tradebots_answergaps[j]; if ( ind < maxi ) { - futurebid = hblas[ind << 1]; - futureask = hblas[(ind << 1) + 1]; - minval = MIN(highbid,lowask); - maxval = MAX(highbid,lowask); - futuremin = MIN(futurebid,futureask); - futuremax = MAX(futurebid,futureask); - if ( futuremin > maxval ) + if ( (j & 1) != 0 ) + pair->answers[j] = _pairaved(futuremax,futuremin) - _pairaved(minval,maxval); + else { - if ( futuremax < minval ) - printf("%s/%s A%d: highly volatile minmax.(%f %f) -> (%f %f) %d of %d\n",pair->base,pair->rel,j,minval,maxval,futuremin,futuremax,i,maxi); - else + futurebid = hblas[ind << 1]; + futureask = hblas[(ind << 1) + 1]; + minval = MIN(highbid,lowask); + maxval = MAX(highbid,lowask); + futuremin = MIN(futurebid,futureask); + futuremax = MAX(futurebid,futureask); + if ( futuremin > maxval ) { - pair->answers[j] = (futuremin - maxval); - flag++; + if ( futuremax < minval ) + printf("%s/%s A%d: highly volatile minmax.(%f %f) -> (%f %f) %d of %d\n",pair->base,pair->rel,j,minval,maxval,futuremin,futuremax,i,maxi); + else + { + pair->answers[j] = (futuremin - maxval); + flag++; + } } + else if ( futuremax < minval ) + pair->answers[j] = (futuremax - minval), flag++; + //printf("i.%d j.%d gap.%d ind.%d answer %9.6f (%f %f) -> (%f %f)\n",i,j,Tradebots_answergaps[j],ind,pair->answers[j],minval,maxval,futuremin,futuremax); } - else if ( futuremax < minval ) - pair->answers[j] = (futuremax - minval), flag++; - //pair->answers[j] = _pairaved(futuremax,futuremin) - _pairaved(minval,maxval); - //printf("i.%d j.%d gap.%d ind.%d answer %9.6f (%f %f) -> (%f %f)\n",i,j,Tradebots_answergaps[j],ind,pair->answers[j],minval,maxval,futuremin,futuremax); } } if ( flag != 0 ) @@ -450,8 +456,8 @@ double get_yval(double *answerp,int32_t selector,int32_t ind,int32_t refc,int32_ *answerp = answer; */ if ( answer > 0. ) - answer = cbrt(answer); - else answer = -cbrt(-answer); + answer = sqrt(answer); + else answer = -sqrt(-answer); *answerp = answer; /*if ( answer > 0. ) return(1.); @@ -475,13 +481,16 @@ float *get_features(int32_t numfeatures,int32_t refc,int32_t ind) if ( fread(prevrawfeatures,60,sizeof(pair->rawfeatures),pair->fp) == sizeof(pair->rawfeatures) && fread(&rawfeatures,1,sizeof(pair->rawfeatures),pair->fp) == sizeof(pair->rawfeatures) ) { n = tradebots_calcsvmfeatures(svmfeatures,pair,rawfeatures,prevrawfeatures); - //for (i=0; i<72; i++) + //int32_t nonz; for (i=nonz=0; i %d\n",ind,n); if ( n != pair->numsvmfeatures ) { - printf("unexpected numsvmfeatures refc.%d ind.%d %d vs %d\n",refc,ind,n,pair->numsvmfeatures); - //return(-1); + //printf("unexpected numsvmfeatures refc.%d ind.%d %d vs %d\n",refc,ind,n,pair->numsvmfeatures); + return(0); } svmf = calloc(n,sizeof(*svmf)); for (i=0; inumexchanges > sizeof(pair->exchanges)/sizeof(*pair->exchanges) ) + { + printf("data corruption pair.%p %s %s/%s numexchanges.%d\n",pair,exchange,pair->base,pair->rel,pair->numexchanges); + return(0); + } for (i=0; inumexchanges; i++) if ( strcmp(pair->exchanges[i].name,exchange) == 0 ) return(&pair->exchanges[i]); @@ -571,7 +585,7 @@ struct tradebot_arbexchange *tradebots_arbexchange_create(struct tradebot_arbpai void tradebot_arbcandidate(struct supernet_info *myinfo,char *exchange,int32_t tradedir,char *base,char *rel,double price,double volume,uint32_t timestamp,double profitmargin) { - int32_t i,offset,flag; double highbid,lowask,lastbid,lastask,arbval; + int32_t i,offset,flag; double highbid,lowask,lastbid,lastask,arbval; uint32_t now; struct tradebot_arbentry *bid,*ask; struct tradebot_arbexchange *arbex; struct tradebot_arbpair *pair = 0; if ( strcmp(rel,"BTC") != 0 && strcmp(rel,"NXT") != 0 && strcmp(rel,"USD") != 0 && strcmp(rel,"CNY") != 0 ) { @@ -594,6 +608,7 @@ void tradebot_arbcandidate(struct supernet_info *myinfo,char *exchange,int32_t t tradebot_arbentry(&arbex->trades[offset],exchange,price,volume,timestamp,profitmargin); bid = ask = 0; pair->highbid = pair->lowask = highbid = lowask = 0.; + now = (uint32_t)time(NULL); //if ( pair->numexchanges >= 2 ) { for (i=0; inumexchanges; i++) @@ -602,12 +617,16 @@ void tradebot_arbcandidate(struct supernet_info *myinfo,char *exchange,int32_t t if ( arbex->trades[0].price != 0. && (highbid == 0. || arbex->trades[0].price >= highbid) ) { bid = &arbex->trades[0]; - highbid = bid->price; + if ( now > bid->timestamp+30 ) + bid->price = 0.; + else highbid = bid->price; } if ( arbex->trades[1].price != 0. && (lowask == 0. || arbex->trades[1].price <= lowask) ) { ask = &arbex->trades[1]; - lowask = ask->price; + if ( now > ask->timestamp+30 ) + ask->price = 0.; + else lowask = ask->price; } //printf("%p %s %s %f %f -> %p %p %f %f (%f %f)\n",pair,pair->base,arbex->name,arbex->trades[0].price,arbex->trades[1].price,bid,ask,highbid,lowask,pair->highbid,pair->lowask); } @@ -619,7 +638,7 @@ void tradebot_arbcandidate(struct supernet_info *myinfo,char *exchange,int32_t t if ( Pair_BTCCNY != 0 && pair->cnycounter != Pair_BTCCNY->counter ) flag |= 4; //printf("%s %s/%s flag.%d (%d %d) %p %p\n",exchange,base,rel,flag,pair->btccounter,Pair_NXTBTC!=0?Pair_NXTBTC->counter:-1,bid,ask); - if ( bid != 0 && ask != 0 && (fabs(bid->price - pair->highbid) > SMALLVAL || fabs(ask->price - pair->lowask) > SMALLVAL || (strcmp(pair->rel,"NXT") == 0 && flag != 0)) ) + if ( bid != 0 && ask != 0 && bid->price != 0. && ask->price != 0 && (now - bid->timestamp) < 30 && (now - ask->timestamp) < 30 && (fabs(bid->price - pair->highbid) > SMALLVAL || fabs(ask->price - pair->lowask) > SMALLVAL || (strcmp(pair->rel,"NXT") == 0 && flag != 0)) ) { pair->counter++; pair->hblavolume = volume = MIN(bid->volume,ask->volume); @@ -706,7 +725,7 @@ void tradebot_arbcandidate(struct supernet_info *myinfo,char *exchange,int32_t t if ( lowask != 0 ) pair->lowask = lowask; //printf(">>>>>>> %s (%s/%s) BTC %.8f %.8f v%f counter.%d btc.%d (%d)\n",exchange,pair->base,pair->rel,pair->btcbid,pair->btcask,pair->btcvol,pair->counter,pair->btccounter,Pair_NXTBTC!=0?Pair_NXTBTC->counter:-1); - if ( bid != 0 && ask != 0 && highbid > lowask && strcmp(bid->exchange,ask->exchange) != 0 && strcmp(rel,"BTC") == 0 ) + if ( bid != 0 && ask != 0 && highbid != 0. && lowask != 0. && highbid > lowask && strcmp(bid->exchange,ask->exchange) != 0 && strcmp(rel,"BTC") == 0 ) { volume = MIN(bid->volume,ask->volume); if ( volume*_pairaved(highbid,lowask) > 0.1 ) @@ -1007,7 +1026,8 @@ TWO_STRINGS(tradebots,gensvm,base,rel) #ifdef _WIN return(clonestr("{\"error\":\"windows doesnt support SVM\"}")); #else - int32_t numfeatures = 317*61; struct tradebot_arbpair *pair; + int32_t numfeatures = 317*61; + struct tradebot_arbpair *pair; if ( base[0] != 0 && rel[0] != 0 && (pair= tradebots_arbpair_find(base,rel)) != 0 && pair->fp != 0 ) { tradebots_calcanswers(pair); diff --git a/iguana/dpow/dpow_network.c b/iguana/dpow/dpow_network.c index 758e0125d..c40d7605f 100755 --- a/iguana/dpow/dpow_network.c +++ b/iguana/dpow/dpow_network.c @@ -163,7 +163,7 @@ char *dex_reqsend(struct supernet_info *myinfo,char *handler,uint8_t *data,int32 printf("%d: subscribe connect (%s)\n",myinfo->numdexipbits,str); } } -//nn_connect(myinfo->reqsock,nanomsg_tcpname(0,str,ipaddr,REP_SOCK)); + nn_connect(myinfo->reqsock,nanomsg_tcpname(0,str,ipaddr,REP_SOCK)); printf("%d: req connect (%s)\n",myinfo->numdexipbits,str); } } diff --git a/iguana/iguana777.h b/iguana/iguana777.h index cd2cdd931..6ce2429b9 100755 --- a/iguana/iguana777.h +++ b/iguana/iguana777.h @@ -51,7 +51,9 @@ #include "nn.h" #include "bus.h" #else*/ -#ifdef __APPLE__ +//#ifdef __APPLE__ +#if defined(__APPLE__) || defined(WIN32) + #include "../crypto777/nanosrc/nn.h" #include "../crypto777/nanosrc/bus.h" #include "../crypto777/nanosrc/pubsub.h" diff --git a/iguana/iguana_payments.c b/iguana/iguana_payments.c index 1d23f1a48..607ddb24d 100755 --- a/iguana/iguana_payments.c +++ b/iguana/iguana_payments.c @@ -334,6 +334,51 @@ bits256 iguana_sendrawtransaction(struct supernet_info *myinfo,struct iguana_inf return(txid); } +uint64_t iguana_interest(struct supernet_info *myinfo,struct iguana_info *coin,bits256 txid,int32_t vout) +{ + char *retstr; cJSON *retjson; uint64_t interest = 0; + if ( coin->FULLNODE < 0 ) // komodod is running + { + if ( (retjson= dpow_gettxout(myinfo,coin,txid,vout)) != 0 ) + { + interest = jdouble(retjson,"interest") * SATOSHIDEN; + free_json(retjson); + } + } + else if ( coin->FULLNODE == 0 ) // basilisk mode -> use DEX* API + { + if ( (retstr= _dex_gettxout(myinfo,coin->symbol,txid,vout)) != 0 ) + { + if ( (retjson= cJSON_Parse(retstr)) != 0 ) + { + interest = jdouble(retjson,"interest") * SATOSHIDEN; + free_json(retjson); + } + free(retstr); + } + } + else // we have it local + { + + } + char str[65]; printf("interest for %s.v%d %.8f\n",bits256_str(str,txid),vout,dstr(interest)); + return(interest); +} + +uint64_t iguana_interests(struct supernet_info *myinfo,struct iguana_info *coin,cJSON *vins) +{ + int32_t i,n; cJSON *item; uint64_t interest = 0; + if ( is_cJSON_Array(vins) != 0 && (n= cJSON_GetArraySize(vins)) > 0 ) + { + for (i=0; isymbol,"KMD") == 0 ) + total += iguana_interests(myinfo,coin,vins); if ( total < (satoshis + txfee) ) { free_json(vins); diff --git a/iguana/m_notary b/iguana/m_notary index dd0794507..cf6fdaaf0 100755 --- a/iguana/m_notary +++ b/iguana/m_notary @@ -4,9 +4,11 @@ rm -f ../agents/iguana *.o git pull cd secp256k1; ./m_unix; cd .. cd ../crypto777; ./m_LP; cd ../iguana -gcc -g -fno-aggressive-loop-optimizations -Wno-deprecated -c -O2 -DISNOTARYNODE=1 -DLIQUIDITY_PROVIDER=1 *.c ../basilisk/basilisk.c ../gecko/gecko.c ../datachain/datachain.c -gcc -g -fno-aggressive-loop-optimizations -Wno-deprecated -c -DISNOTARYNODE=1 -DLIQUIDITY_PROVIDER=1 main.c iguana777.c iguana_bundles.c ../basilisk/basilisk.c -gcc -g -o ../agents/iguana *.o ../agents/libcrypto777.a -lnanomsg -lcurl -lssl -lcrypto -lpthread -lz -lm +#gcc -g -fno-aggressive-loop-optimizations -Wno-deprecated -c -O2 -DISNOTARYNODE=1 -DLIQUIDITY_PROVIDER=1 *.c ../basilisk/basilisk.c ../gecko/gecko.c ../datachain/datachain.c +clang -g -Wno-deprecated -c -O2 -DISNOTARYNODE=1 -DLIQUIDITY_PROVIDER=1 *.c ../basilisk/basilisk.c ../gecko/gecko.c ../datachain/datachain.c +#gcc -g -fno-aggressive-loop-optimizations -Wno-deprecated -c -DISNOTARYNODE=1 -DLIQUIDITY_PROVIDER=1 main.c iguana777.c iguana_bundles.c ../basilisk/basilisk.c +clang -g -Wno-deprecated -c -DISNOTARYNODE=1 -DLIQUIDITY_PROVIDER=1 main.c iguana777.c iguana_bundles.c ../basilisk/basilisk.c +clang -g -o ../agents/iguana *.o ../agents/libcrypto777.a -lnanomsg -lcurl -lssl -lcrypto -lpthread -lz -lm ../agents/iguana notary & #> iguana.log 2> error.log &