diff --git a/iguana/exchanges/mm.c b/iguana/exchanges/mm.c index a90bbef8a..18925951f 100644 --- a/iguana/exchanges/mm.c +++ b/iguana/exchanges/mm.c @@ -40,6 +40,7 @@ char CURRENCIES[][8] = { "USD", "EUR", "JPY", "GBP", "AUD", "CAD", "CHF", "NZD", "CNY", "RUB", "MXN", "BRL", "INR", "HKD", "TRY", "ZAR", "PLN", "NOK", "SEK", "DKK", "CZK", "HUF", "ILS", "KRW", "MYR", "PHP", "RON", "SGD", "THB", "BGN", "IDR", "HRK", // end of currencies }; double PAXPRICES[sizeof(CURRENCIES)/sizeof(*CURRENCIES)]; +uint32_t PAXACTIVE; char *DEX_amlp(char *blocktrail) { @@ -505,7 +506,7 @@ int32_t marketmaker_spread(char *exchange,char *base,char *rel,double bid,double jaddnum(vals,"minvol",vol*0.1 > 100 ? 100 : vol * 0.1); sprintf(url,"%s/?",IGUANA_URL); sprintf(postdata,"{\"agent\":\"tradebot\",\"method\":\"liquidity\",\"targetcoin\":\"%s\",\"vals\":%s}",base,jprint(vals,1)); - printf("(%s)\n",postdata); + //printf("(%s)\n",postdata); if ( (retstr= bitcoind_RPC(0,"tradebot",url,0,"liqudity",postdata)) != 0 ) { //printf("(%s) -> (%s)\n",postdata,retstr); @@ -514,6 +515,8 @@ int32_t marketmaker_spread(char *exchange,char *base,char *rel,double bid,double spread_ratio = .5 * ((ask - bid) / (bid + ask)); for (i=0; i SMALLVAL ) { vals = cJSON_CreateObject(); @@ -530,7 +533,7 @@ int32_t marketmaker_spread(char *exchange,char *base,char *rel,double bid,double free(retstr); } } -break; +//break; } } else printf("unsupported ask only for DEX %s/%s\n",base,rel); } @@ -571,7 +574,7 @@ void marketmaker(double minask,double maxbid,char *baseaddr,char *reladdr,double start_DEXrel = dex_balance(rel,reladdr); while ( 1 ) { - if ( time(NULL) > lasttime+10 ) + if ( time(NULL) > lasttime+60 ) { if ( (val= get_theoretical(&avebid,&aveask,&highbid,&lowask,&CMC_average,changes,name,base,rel,&USD_average)) != 0. ) { @@ -630,7 +633,7 @@ void marketmaker(double minask,double maxbid,char *baseaddr,char *reladdr,double marketmaker_prune(exchange,base,rel,1,mmbid - theoretical*profitmargin,mmask + theoretical*profitmargin,0.); // if new prices crosses existing order, cancel old order first marketmaker_prune(exchange,base,rel,-1,mmbid,mmask,0.); - printf("(%.8f %.8f) ",mmbid,mmask); + //printf("(%.8f %.8f) ",mmbid,mmask); if ( (1) ) { if ( mmbid >= lowask || (maxbid > SMALLVAL && mmbid > maxbid) ) //mmbid < highbid || @@ -642,7 +645,7 @@ void marketmaker(double minask,double maxbid,char *baseaddr,char *reladdr,double mmask = 0.; } marketmaker_volumeset(&bidincr,&askincr,incr,buyvol,pendingbids,sellvol,pendingasks,maxexposure); - printf("AVE.(%.8f %.8f) hbla %.8f %.8f bid %.8f ask %.8f theory %.8f buys.(%.6f %.6f) sells.(%.6f %.6f) incr.(%.6f %.6f) balances.(%.8f + %.8f, %.8f + %.8f) test %f\n",avebid,aveask,highbid,lowask,mmbid,mmask,theoretical,buyvol,pendingbids,sellvol,pendingasks,bidincr,askincr,balance_base,DEX_base,balance_rel,DEX_rel,(aveask - avebid)/aveprice); + //printf("AVE.(%.8f %.8f) hbla %.8f %.8f bid %.8f ask %.8f theory %.8f buys.(%.6f %.6f) sells.(%.6f %.6f) incr.(%.6f %.6f) balances.(%.8f + %.8f, %.8f + %.8f) test %f\n",avebid,aveask,highbid,lowask,mmbid,mmask,theoretical,buyvol,pendingbids,sellvol,pendingasks,bidincr,askincr,balance_base,DEX_base,balance_rel,DEX_rel,(aveask - avebid)/aveprice); if ( (aveask - avebid)/aveprice > profitmargin ) bid = highbid * (1 - profitmargin), ask = lowask * (1 + profitmargin); else bid = avebid - profitmargin*aveprice, ask = avebid + profitmargin*aveprice; @@ -664,7 +667,7 @@ void marketmaker(double minask,double maxbid,char *baseaddr,char *reladdr,double if ( askincr > 1. ) askincr = (int32_t)askincr + 0.777; } - printf("mmbid %.8f %.6f, mmask %.8f %.6f\n",mmbid,bidincr,mmask,askincr); + //printf("mmbid %.8f %.6f, mmask %.8f %.6f\n",mmbid,bidincr,mmask,askincr); marketmaker_spread(exchange,base,rel,mmbid,bidincr,mmask,askincr,profitmargin*aveprice*0.5); sleep(60); } @@ -673,9 +676,9 @@ void marketmaker(double minask,double maxbid,char *baseaddr,char *reladdr,double int main(int argc, const char * argv[]) { - char *base,*rel,*name,*exchange,*apikey,*apisecret,*blocktrail; + char *base,*rel,*name,*exchange,*apikey,*apisecret,*blocktrail,*retstr,*baseaddr,*reladdr,*passphrase; double profitmargin,maxexposure,incrratio,start_rel,start_base,minask,maxbid; - cJSON *retjson,*addrjson; char *retstr,*baseaddr,*reladdr,*passphrase; + cJSON *retjson,*loginjson; int32_t i; if ( argc > 1 && (retjson= cJSON_Parse(argv[1])) != 0 ) { minask = jdouble(retjson,"minask"); @@ -693,34 +696,50 @@ int main(int argc, const char * argv[]) rel = jstr(retjson,"rel"); blocktrail = jstr(retjson,"blocktrail"); exchange = jstr(retjson,"exchange"); + PAXACTIVE = juint(retjson,"paxactive"); if ( profitmargin < 0. || maxexposure <= 0. || incrratio <= 0. || apikey == 0 || apisecret == 0 || base == 0 || name == 0 || rel == 0 || exchange == 0 || blocktrail == 0 ) { printf("illegal parameter (%s)\n",jprint(retjson,0)); exit(-1); } + free_json(retjson); if ( (retstr= iguana_walletpassphrase(passphrase,999999)) != 0 ) { - printf("%s\n",DEX_apikeypair(exchange,apikey,apisecret)); - printf("%s %s\n",base,DEX_balance(exchange,base,"")); - printf("%s %s\n",rel,DEX_balance(exchange,rel,"")); - marketmaker_pendinginit(exchange,base,rel); - if ( (addrjson= cJSON_Parse(retstr)) != 0 ) + //printf("login.(%s)\n",retstr); + if ( (loginjson= cJSON_Parse(retstr)) != 0 ) { - baseaddr = jstr(addrjson,base); - reladdr = jstr(addrjson,rel); + if ( PAXACTIVE != 0 ) + { + for (i=0; i<32; i++) + { + if ( ((1<