diff --git a/crypto777/cJSON.c b/crypto777/cJSON.c index e5eade4a4..3e5377dcb 100755 --- a/crypto777/cJSON.c +++ b/crypto777/cJSON.c @@ -1062,9 +1062,9 @@ uint64_t calc_nxt64bits(const char *NXTaddr) { printf("calc_nxt64bits: illegal char.(%c %d) in (%s).%d\n",c,c,NXTaddr,(int32_t)i); #ifdef __APPLE__ - while ( 1 ) + //while ( 1 ) { - sleep(60); + //sleep(60); printf("calc_nxt64bits: illegal char.(%c %d) in (%s).%d\n",c,c,NXTaddr,(int32_t)i); } #endif diff --git a/iguana/exchanges/fxcm.c b/iguana/exchanges/fxcm.c index b369f0751..02e98fea1 100755 --- a/iguana/exchanges/fxcm.c +++ b/iguana/exchanges/fxcm.c @@ -206,20 +206,12 @@ int32_t SUPPORTS(struct exchange_info *exchange,char *_base,char *_rel,cJSON *ar void prices777_fxcm(double bids[64],double asks[64],double highs[64],double lows[64]) { - static char *xmlstr; static uint32_t lasttime; - char name[64],*str; cJSON *json,*obj; int32_t i,c,flag,n = 0; double bid,ask,high,low; struct destbuf numstr; + char name[64],*str,*xmlstr; cJSON *json,*obj; int32_t i,c,flag,n = 0; double bid,ask,high,low; struct destbuf numstr; memset(bids,0,sizeof(*bids) * 64), memset(asks,0,sizeof(*asks) * 64); memset(highs,0,sizeof(*highs) * 64), memset(lows,0,sizeof(*lows) * 64); if ( fxcm_ensure() < 0 ) return; - if ( time(NULL) > lasttime ) - { - if ( xmlstr != 0 ) - free(xmlstr); - xmlstr = fxcm_xmlstr(); - lasttime = (uint32_t)time(NULL); - } - if ( xmlstr != 0 ) + if ( (xmlstr= fxcm_xmlstr()) != 0 ) { if ( (json= cJSON_Parse(xmlstr)) != 0 ) { @@ -252,6 +244,7 @@ void prices777_fxcm(double bids[64],double asks[64],double highs[64],double lows } free_json(json); } else printf("couldnt parse.(%s)\n",xmlstr); + free(xmlstr); } } diff --git a/iguana/exchanges/instaforex.c b/iguana/exchanges/instaforex.c index 00605e9ea..4a5ba5c0f 100755 --- a/iguana/exchanges/instaforex.c +++ b/iguana/exchanges/instaforex.c @@ -36,19 +36,12 @@ static char *BASERELS[][2] = { {"NZD","USD"},{"NZD","CHF"},{"NZD","CAD"},{"NZD", void prices777_instaforex(uint32_t timestamps[NUM_INSTAFOREX],double bids[NUM_INSTAFOREX],double asks[NUM_INSTAFOREX]) { - static uint32_t lasttime; static char *jsonstr; //{"NZDUSD":{"symbol":"NZDUSD","lasttime":1437580206,"digits":4,"change":"-0.0001","bid":"0.6590","ask":"0.6593"}, - char contract[32]; cJSON *json,*item; int32_t i; + char contract[32],*jsonstr; cJSON *json,*item; int32_t i; memset(timestamps,0,sizeof(*timestamps) * NUM_INSTAFOREX); memset(bids,0,sizeof(*bids) * NUM_INSTAFOREX); memset(asks,0,sizeof(*asks) * NUM_INSTAFOREX); - if ( time(NULL) > lasttime ) - { - if ( jsonstr != 0 ) - free(jsonstr); - jsonstr = issue_curl("https://quotes.instaforex.com/get_quotes.php?q=NZDUSD,NZDCHF,NZDCAD,NZDJPY,GBPNZD,EURNZD,AUDNZD,CADJPY,CADCHF,USDCAD,EURCAD,GBPCAD,AUDCAD,USDCHF,CHFJPY,EURCHF,GBPCHF,AUDCHF,EURUSD,EURAUD,EURJPY,EURGBP,GBPUSD,GBPJPY,GBPAUD,USDJPY,AUDJPY,AUDUSD,XAUUSD&m=json"); - lasttime = (uint32_t)time(NULL); - } + jsonstr = issue_curl("https://quotes.instaforex.com/get_quotes.php?q=NZDUSD,NZDCHF,NZDCAD,NZDJPY,GBPNZD,EURNZD,AUDNZD,CADJPY,CADCHF,USDCAD,EURCAD,GBPCAD,AUDCAD,USDCHF,CHFJPY,EURCHF,GBPCHF,AUDCHF,EURUSD,EURAUD,EURJPY,EURGBP,GBPUSD,GBPJPY,GBPAUD,USDJPY,AUDJPY,AUDUSD,XAUUSD&m=json"); if ( jsonstr != 0 ) { // printf("(%s)\n",jsonstr); @@ -66,6 +59,7 @@ void prices777_instaforex(uint32_t timestamps[NUM_INSTAFOREX],double bids[NUM_IN } free_json(json); } + free(jsonstr); } } diff --git a/iguana/exchanges/nxtae.c b/iguana/exchanges/nxtae.c index 5661a6b65..429bce7b4 100755 --- a/iguana/exchanges/nxtae.c +++ b/iguana/exchanges/nxtae.c @@ -140,7 +140,9 @@ uint64_t NXT_assetid(char *name) uint64_t assetid; if ( (assetid= is_MGWcoin(name)) != 0 ) return(assetid); - else return(calc_nxt64bits(name)); + else if ( is_decimalstr(name) > 0 ) + return(calc_nxt64bits(name)); + else return(0); } double NXT_price_volume(double *volumep,uint64_t baseamount,uint64_t relamount) @@ -180,7 +182,7 @@ int32_t get_assettype(struct supernet_info *myinfo,int32_t *numdecimalsp,char *a *numdecimalsp = 8; return(0); } - if ( (assetid= calc_nxt64bits(assetidstr)) == NXT_ASSETID ) + if ( is_decimalstr(assetidstr) > 0 && (assetid= calc_nxt64bits(assetidstr)) == NXT_ASSETID ) { //printf("found NXT_ASSETID.(%s)\n",assetidstr); ap_type = 0; @@ -298,8 +300,11 @@ double get_minvolume(struct supernet_info *myinfo,uint64_t assetid) int64_t get_asset_quantity(struct supernet_info *myinfo,int64_t *unconfirmedp,char *NXTaddr,char *assetidstr) { char cmd[2*MAX_JSON_FIELD],*jsonstr; struct destbuf assetid; int32_t i,n,iter; cJSON *array,*item,*obj,*json; int64_t quantity,qty = 0; - uint64_t assetidbits = calc_nxt64bits(assetidstr); - quantity = *unconfirmedp = 0; + uint64_t assetidbits; + quantity = *unconfirmedp = 0; + if ( is_decimalstr(assetidstr) > 0 ) + assetidbits = calc_nxt64bits(assetidstr); + else return(0); if ( assetidbits == NXT_ASSETID ) { sprintf(cmd,"requestType=getBalance&account=%s",NXTaddr); @@ -428,9 +433,9 @@ int32_t SUPPORTS(struct exchange_info *exchange,char *base,char *rel,cJSON *argj int32_t polarity; struct supernet_info *myinfo = SuperNET_MYINFO(0); if ( (polarity= baserel_polarity(BASERELS,(int32_t)(sizeof(BASERELS)/sizeof(*BASERELS)),base,rel)) == 0 ) { - if ( strcmp(rel,"NXT") == 0 || strcmp(rel,"nxt") == 0 || calc_nxt64bits(rel) == NXT_ASSETID ) + if ( strcmp(rel,"NXT") == 0 || strcmp(rel,"nxt") == 0 || (is_decimalstr(rel) != 0 && calc_nxt64bits(rel) == NXT_ASSETID) ) return(NXT_assetpolarity(myinfo,base)); - else if ( strcmp(base,"NXT") == 0 || strcmp(base,"nxt") == 0 || calc_nxt64bits(base) == NXT_ASSETID ) + else if ( strcmp(base,"NXT") == 0 || strcmp(base,"nxt") == 0 || (is_decimalstr(base) != 0 && calc_nxt64bits(rel) == NXT_ASSETID) ) return(-NXT_assetpolarity(myinfo,rel)); } return(polarity); @@ -703,7 +708,7 @@ char *CANCELORDER(struct exchange_info *exchange,uint64_t orderid,cJSON *argjson uint64_t nxt64bits; char cmd[4096],secret[8192],*str = "Bid",*retstr = 0; struct supernet_info *myinfo = SuperNET_MYINFO(0); if ( (nxt64bits= _get_AEquote(myinfo,str,orderid)) == 0 ) str = "Ask", nxt64bits = _get_AEquote(myinfo,str,orderid); - if ( nxt64bits == calc_nxt64bits(myinfo->myaddr.NXTADDR) ) + if ( nxt64bits == myinfo->myaddr.nxt64bits ) { escape_code(secret,myinfo->secret); sprintf(cmd,"requestType=cancel%sOrder&secretPhrase=%s&feeNQT=%d&deadline=%d&order=%llu",str,secret,0,DEFAULT_NXT_DEADLINE,(long long)orderid); diff --git a/iguana/exchanges/truefx.c b/iguana/exchanges/truefx.c index 03af6de98..8b04ec6df 100755 --- a/iguana/exchanges/truefx.c +++ b/iguana/exchanges/truefx.c @@ -35,7 +35,7 @@ static char *BASERELS[][2] = { {"EUR","USD"},{"USD","JPY"},{"GBP","USD"},{"EUR", uint64_t prices777_truefx(char *reqbase,char *reqrel,uint64_t *millistampp,double *bidp,double *askp,double *openp,double *highp,double *lowp,double *closep,char *username,char *password,uint64_t sessionid) { - static uint32_t lasttime; static char *laststr; + // static uint32_t lasttime; static char *laststr; char *truefxfmt = "http://webrates.truefx.com/rates/connect.html?f=csv&id=%s:%s:poll:%llu&c=EUR/USD,USD/JPY,GBP/USD,EUR/GBP,USD/CHF,AUD/NZD,CAD/CHF,CHF/JPY,EUR/AUD,EUR/CAD,EUR/JPY,EUR/CHF,USD/CAD,AUD/USD,GBP/JPY,AUD/CAD,AUD/CHF,AUD/JPY,EUR/NOK,EUR/NZD,GBP/CAD,GBP/CHF,NZD/JPY,NZD/USD,USD/NOK,USD/SEK"; // EUR/USD,1437569931314,1.09,034,1.09,038,1.08922,1.09673,1.09384 USD/JPY,1437569932078,123.,778,123.,781,123.569,123.903,123.860 GBP/USD,1437569929008,1.56,332,1.56,337,1.55458,1.56482,1.55538 EUR/GBP,1437569931291,0.69,742,0.69,750,0.69710,0.70383,0.70338 USD/CHF,1437569932237,0.96,142,0.96,153,0.95608,0.96234,0.95748 EUR/JPY,1437569932237,134.,960,134.,972,134.842,135.640,135.476 EUR/CHF,1437569930233,1.04,827,1.04,839,1.04698,1.04945,1.04843 USD/CAD,1437569929721,1.30,231,1.30,241,1.29367,1.30340,1.29466 AUD/USD,1437569931700,0.73,884,0.73,890,0.73721,0.74395,0.74200 GBP/JPY,1437569931924,193.,500,193.,520,192.298,193.670,192.649 char url[1024],userpass[1024],buf[128],base[64],rel[64],*str=0; cJSON *array; @@ -63,7 +63,7 @@ uint64_t prices777_truefx(char *reqbase,char *reqrel,uint64_t *millistampp,doubl } if ( url[0] == 0 ) sprintf(url,"http://webrates.truefx.com/rates/connect.html?f=csv&s=y"); - if ( laststr != 0 && time(NULL) > lasttime ) + /*if ( laststr != 0 && time(NULL) > lasttime ) { //printf("free laststr.%p lag.%d\n",laststr,(int32_t)(time(NULL) - lasttime)); free(laststr); @@ -74,10 +74,11 @@ uint64_t prices777_truefx(char *reqbase,char *reqrel,uint64_t *millistampp,doubl str = issue_curl(url); lasttime = (uint32_t)time(NULL); laststr = str; - } + }*/ + str = issue_curl(url); if ( str != 0 ) { - printf("(%s) -> (%s)\n",url,str); + //printf("(%s) -> (%s)\n",url,str); /*EUR/USD,1454354222037,1.08,997,1.09,000,1.08142,1.09130,1.08333 USD/JPY,1454354221120,121.,049,121.,053,120.676,121.496,121.289 GBP/USD,1454354221048,1.44,242,1.44,254,1.42280,1.44305,1.42483 @@ -106,8 +107,8 @@ uint64_t prices777_truefx(char *reqbase,char *reqrel,uint64_t *millistampp,doubl memcpy(base,str+n,3), base[3] = 0; memcpy(rel,str+n+4,3), rel[3] = 0; str[n + i] = 0; - printf("str.(%s) (%s/%s) %d n.%d i.%d\n",str+n,base,rel,str[n],n,i); sprintf(buf,"[%s]",str+n+7+1); + //printf("str.(%s) (%s/%s) %d n.%d i.%d |%s|\n",str+n,base,rel,str[n],n,i,buf); n += i + 1; if ( (array= cJSON_Parse(buf)) != 0 ) { @@ -129,12 +130,14 @@ uint64_t prices777_truefx(char *reqbase,char *reqrel,uint64_t *millistampp,doubl *bidp = bid, *askp = ask, *openp = openval, *highp = high, *lowp = low; *closep = 0; *millistampp = millistamp; + //printf("(%f %f)\n ",bid,ask); break; } } free_json(array); } else printf("cant parse.(%s)\n",buf); } + free(str); } return(sessionid); } diff --git a/iguana/peggy_update.c b/iguana/peggy_update.c index dcf342ec3..22deba85c 100755 --- a/iguana/peggy_update.c +++ b/iguana/peggy_update.c @@ -186,7 +186,7 @@ double PAX_yahoo(char *metal) } free(jsonstr); } - //if ( Debuglevel > 2 ) + if ( Debuglevel > 2 ) printf("(%s %f) ",metal,price); return(price); } @@ -233,13 +233,13 @@ void PAX_btcprices(struct peggy_info *PEGS,int32_t enddatenum,int32_t numdates) // ["Date","24h Average","Ask","Bid","Last","Total Volume"] // ["2015-07-25",289.27,288.84,288.68,288.87,44978.61] item = jitem(array,i); - //if ( Debuglevel > 2 ) + if ( Debuglevel > 2 ) printf("(%s) ",cJSON_Print(item)); if ( (dstr= jstr(jitem(item,0),0)) != 0 && (datenum= conv_date(&seconds,dstr)) > 0 ) { price = jdouble(jitem(item,1),0), ask = jdouble(jitem(item,2),0), bid = jdouble(jitem(item,3),0); close = jdouble(jitem(item,4),0), vol = jdouble(jitem(item,5),0); - //if ( Debuglevel > 2 ) + if ( Debuglevel > 2 ) fprintf(stderr,"%d.[%d %f %f %f %f %f].%d ",i,datenum,price,ask,bid,close,vol,n); utc32[numdates - 1 - i] = OS_conv_datenum(datenum,12,0,0), qdaily[numdates - 1 - i] = price * .001; } @@ -258,11 +258,11 @@ void PAX_btcprices(struct peggy_info *PEGS,int32_t enddatenum,int32_t numdates) timestamp = juint(item,"date"), high = jdouble(item,"high"), low = jdouble(item,"low"), open = jdouble(item,"open"); close = jdouble(item,"close"), vol = jdouble(item,"volume"), quotevol = jdouble(item,"quoteVolume"), price = jdouble(item,"weightedAverage"); //printf("[%u %f %f %f %f %f %f %f]",timestamp,high,low,open,close,vol,quotevol,price); - //if ( Debuglevel > 2 ) + if ( Debuglevel > 2 ) printf("[%u %d %f]",timestamp,OS_conv_unixtime(&t,&seconds,timestamp),price); utc32[i] = timestamp - 12*3600, btcddaily[i] = price * 100.; } - //if ( Debuglevel > 2 ) + if ( Debuglevel > 2 ) printf("poloniex.%d\n",n); PAX_genspline(&PEGS->splines[MAX_CURRENCIES+2],MAX_CURRENCIES+2,"btcdhist",utc32,btcddaily,n 2 ) - printf("(%s)\n",jsonstr); + if ( Debuglevel > 2 ) + printf("(%s)\n",jsonstr); if ( (json= cJSON_Parse(jsonstr)) != 0 ) { copy_cJSON(&tmp,jobj(json,"date")), safecopy(date,tmp.buf,64); @@ -292,8 +292,8 @@ int32_t PAX_ecbparse(char *date,double *prices,char *url,int32_t basenum) // else if ( relnum == JPYNUM ) // prices[i] /= 100.; count++; - //if ( Debuglevel > 2 ) - printf("(%02d:%02d %f) ",basenum,relnum,prices[i]); + if ( Debuglevel > 2 ) + printf("(%02d:%02d %f) ",basenum,relnum,prices[i]); } else printf("cant find.(%s)\n",relstr);//, getchar(); item = item->next; } @@ -344,11 +344,11 @@ int32_t PAX_ecbprices(char *date,double *prices,int32_t year,int32_t month,int32 break; if ( prices[MAX_CURRENCIES*basenum + i] != 0. ) nonz++; - //if ( Debuglevel > 2 ) - printf("%8.5f ",prices[MAX_CURRENCIES*basenum + i]); + if ( Debuglevel > 2 ) + printf("%8.5f ",prices[MAX_CURRENCIES*basenum + i]); } - //if ( Debuglevel > 2 ) - printf("%s.%d %d\n",CURRENCIES[basenum],basenum,nonz); + if ( Debuglevel > 2 ) + printf("%s.%d %d\n",CURRENCIES[basenum],basenum,nonz); } } } @@ -573,7 +573,7 @@ void _crypto_update(struct peggy_info *PEGS,double cryptovols[2][8][2],struct PA } cryptovols[0][i][iter] = _pairaved(cryptovols[0][i][iter],prices[i][iter]); cryptovols[1][i][iter] = _pairaved(cryptovols[1][i][iter],volumes[i][iter]); - //if ( Debuglevel > 2 ) + if ( Debuglevel > 2 ) printf("(%f %f).%d:%d ",cryptovols[0][i][iter],cryptovols[1][i][iter],i,iter); //if ( cnyusd < SMALLVAL || btcusd < SMALLVAL ) // break; @@ -619,19 +619,19 @@ void PAX_RTupdate(struct peggy_info *PEGS,double cryptovols[2][8][2],double RTme if ( (vol= volumes[i][0]+volumes[i][1]) > SMALLVAL ) { price = ((prices[i][0] * volumes[i][0]) + (prices[i][1] * volumes[i][1])) / vol; - //if ( Debuglevel > 2 ) + if ( Debuglevel > 2 ) printf("%s %f v%f + %f v%f -> %f %f\n",cryptostrs[i],prices[i][0],volumes[i][0],prices[i][1],volumes[i][1],price,dp->cryptos[i]); dxblend(&dp->cryptos[i],price,.995); } } btcusd = PEGS->btcusd; btcdbtc = PEGS->btcdbtc; - //if ( Debuglevel > 2 ) + if ( Debuglevel > 2 ) printf(" update with btcusd %f btcd %f\n",btcusd,btcdbtc); if ( btcusd < SMALLVAL || btcdbtc < SMALLVAL ) { PAX_update(PEGS,&btcusd,&btcdbtc); - //if ( Debuglevel > 2 ) + if ( Debuglevel > 2 ) printf(" price777_update with btcusd %f btcd %f\n",btcusd,btcdbtc); } else PEGS->btcusd = btcusd, PEGS->btcdbtc = btcdbtc; for (c=0; c SMALLVAL ) { - //if ( Debuglevel > 2 ) + if ( Debuglevel > 2 ) printf("%.6f ",price); dxblend(&RTprices[c],price,.995); if ( 0 && (baserel= PAX_ispair(base,rel,CONTRACTS[c])) >= 0 ) @@ -676,7 +676,7 @@ void PAX_bidask(struct exchange_info *exchange,uint32_t *timestamps,double *bids bids[contractnum] = bidasks[0].price; asks[contractnum] = bidasks[1].price; timestamps[contractnum] = bidasks[0].timestamp; - printf("%.6f ",_pairaved(bids[contractnum],asks[contractnum])); + printf("(%d %.6f) ",contractnum,_pairaved(bids[contractnum],asks[contractnum])); } struct exchange_info *PAX_bidasks(char *exchangestr,uint32_t *timestamps,double *bids,double *asks)