|
|
@ -30,16 +30,65 @@ |
|
|
|
#define FUNCS instaforex ## _funcs |
|
|
|
#define BASERELS instaforex ## _baserels |
|
|
|
|
|
|
|
static char *BASERELS[][2] = { {"btc","nxt"}, {"btc","btcd"}, {"btc","ltc"}, {"btc","vrc"}, {"btc","doge"} }; |
|
|
|
static char *BASERELS[][2] = { {"NZD","USD"},{"NZD","CHF"},{"NZD","CAD"},{"NZD","JPY"},{"GBP","NZD"},{"EUR","NZD"},{"AUD","NZD"},{"CAD","JPY"},{"CAD","CHF"},{"USD","CAD"},{"EUR","CAD"},{"GBP","CAD"},{"AUD","CAD"},{"USD","CHF"},{"CHF","JPY"},{"EUR","CHF"},{"GBP","CHF"},{"AUD","CHF"},{"EUR","USD"},{"EUR","AUD"},{"EUR","JPY"},{"EUR","GBP"},{"GBP","USD"},{"GBP","JPY"},{"GBP","AUD"},{"USD","JPY"},{"AUD","JPY"},{"AUD","USD"},{"XAU","USD"} }; |
|
|
|
#include "exchange_supports.h" |
|
|
|
#define NUM_INSTAFOREX ((int32_t)(sizeof(BASERELS)/sizeof(*BASERELS))) |
|
|
|
|
|
|
|
double UPDATE(struct exchange_info *exchange,char *base,char *rel,struct exchange_quote *quotes,int32_t maxdepth,double commission,cJSON *argjson,int32_t invert) |
|
|
|
void prices777_instaforex(uint32_t timestamps[NUM_INSTAFOREX],double bids[NUM_INSTAFOREX],double asks[NUM_INSTAFOREX]) |
|
|
|
{ |
|
|
|
char url[1024],lrel[16],lbase[16]; |
|
|
|
strcpy(lrel,rel), strcpy(lbase,base); |
|
|
|
tolowercase(lrel), tolowercase(lbase); |
|
|
|
sprintf(url,"http://api.quadrigacx.com/v2/order_book?book=%s_%s",lbase,lrel); |
|
|
|
return(exchanges777_standardprices(exchange,commission,base,rel,url,quotes,0,0,maxdepth,0,invert)); |
|
|
|
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; |
|
|
|
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); |
|
|
|
} |
|
|
|
if ( jsonstr != 0 ) |
|
|
|
{ |
|
|
|
// printf("(%s)\n",jsonstr);
|
|
|
|
if ( (json= cJSON_Parse(jsonstr)) != 0 ) |
|
|
|
{ |
|
|
|
for (i=0; i<NUM_INSTAFOREX; i++) |
|
|
|
{ |
|
|
|
sprintf(contract,"%s%s",BASERELS[i][0],BASERELS[i][1]); |
|
|
|
if ( (item= jobj(json,contract)) != 0 ) |
|
|
|
{ |
|
|
|
timestamps[i] = juint(item,"lasttime"); |
|
|
|
bids[i] = jdouble(item,"bid"); |
|
|
|
asks[i] = jdouble(item,"ask"); |
|
|
|
} |
|
|
|
} |
|
|
|
free_json(json); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
double UPDATE(struct exchange_info *exchange,char *_base,char *_rel,struct exchange_quote *bidasks,int32_t maxdepth,double commission,cJSON *argjson,int32_t invert) |
|
|
|
{ |
|
|
|
uint32_t timestamps[NUM_INSTAFOREX]; double bids[NUM_INSTAFOREX],asks[NUM_INSTAFOREX]; |
|
|
|
char base[32],rel[32]; int32_t numbids,numasks,i; double bid,ask; |
|
|
|
strcpy(base,_base), touppercase(base); |
|
|
|
strcpy(rel,_rel), touppercase(rel); |
|
|
|
for (i=0; i<NUM_INSTAFOREX; i++) |
|
|
|
{ |
|
|
|
if ( strcmp(base,BASERELS[i][0]) == 0 && strcmp(rel,BASERELS[i][1]) == 0 ) |
|
|
|
{ |
|
|
|
prices777_instaforex(timestamps,bids,asks); |
|
|
|
numbids = numasks = 0; |
|
|
|
bid = exchange_setquote(bidasks,&numbids,&numasks,0,invert,bids[i],1,commission,0,timestamps[i],0); |
|
|
|
ask = exchange_setquote(bidasks,&numbids,&numasks,1,invert,asks[i],1,commission,0,timestamps[i],0); |
|
|
|
if ( bid > SMALLVAL && ask > SMALLVAL ) |
|
|
|
return((bid + ask) * .5); |
|
|
|
else return(0.); |
|
|
|
} |
|
|
|
} |
|
|
|
return(0); |
|
|
|
} |
|
|
|
|
|
|
|
cJSON *SIGNPOST(void **cHandlep,int32_t dotrade,char **retstrp,struct exchange_info *exchange,char *payload,char *path) |
|
|
|