You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
4.0 KiB
109 lines
4.0 KiB
8 years ago
|
/******************************************************************************
|
||
|
* Copyright © 2014-2017 The SuperNET Developers. *
|
||
|
* *
|
||
|
* See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at *
|
||
|
* the top-level directory of this distribution for the individual copyright *
|
||
|
* holder information and the developer policies on copyright and licensing. *
|
||
|
* *
|
||
|
* Unless otherwise agreed in a custom licensing agreement, no part of the *
|
||
|
* SuperNET software, including this file may be copied, modified, propagated *
|
||
|
* or distributed except according to the terms contained in the LICENSE file *
|
||
|
* *
|
||
|
* Removal or modification of this copyright notice is prohibited. *
|
||
|
* *
|
||
|
******************************************************************************/
|
||
|
|
||
|
// included from basilisk.c
|
||
|
|
||
|
// "currency":{"value":%.8f, "pending":%.8f}
|
||
|
|
||
|
cJSON *tradebot_balancediff(cJSON *item,cJSON *anchoritem) // only item might be null
|
||
|
{
|
||
|
double current[2],past[2]; int32_t i; cJSON *diffitem = jduplicate(anchoritem);
|
||
|
memset(current,0,sizeof(current));
|
||
|
memset(past,0,sizeof(past));
|
||
|
if ( jobj(diffitem,"value") != 0 )
|
||
|
jdelete(diffitem,"value");
|
||
|
if ( jobj(diffitem,"pending") != 0 )
|
||
|
jdelete(diffitem,"pending");
|
||
|
for (i=0; i<2; i++)
|
||
|
{
|
||
|
if ( current[i] != 0. || past[i] != 0. )
|
||
|
jaddnum(diffitem,i == 0 ? "value" : "pending",current[i] - past[i]);
|
||
|
}
|
||
|
return(diffitem);
|
||
|
}
|
||
|
|
||
|
cJSON *tradebot_balancesdiff(struct supernet_info *myinfo,cJSON *current,cJSON *anchor)
|
||
|
{
|
||
|
cJSON *item,*anchoritem,*diffitem,*array; int32_t i,n; char *field;
|
||
|
if ( anchor == 0 )
|
||
|
return(jduplicate(current));
|
||
|
array = cJSON_CreateObject();
|
||
|
n = cJSON_GetArraySize(current);
|
||
|
for (i=0; i<n; i++)
|
||
|
{
|
||
|
item = jitem(current,i);
|
||
|
field = jfieldname(item);
|
||
|
if ( (anchoritem= jobj(anchor,field)) != 0 )
|
||
|
diffitem = tradebot_balancediff(item,anchoritem);
|
||
|
else diffitem = jduplicate(item);
|
||
|
jadd(array,field,diffitem);
|
||
|
}
|
||
|
n = cJSON_GetArraySize(anchor);
|
||
|
for (i=0; i<n; i++)
|
||
|
{
|
||
|
item = jitem(current,i);
|
||
|
field = jfieldname(item);
|
||
|
if ( jobj(array,field) == 0 )
|
||
|
jadd(array,field,tradebot_balancediff(0,item));
|
||
|
}
|
||
|
return(array);
|
||
|
}
|
||
|
|
||
|
// get balances from all exchanges, wallets, pending
|
||
|
double tradebot_balance(struct supernet_info *myinfo,char *base)
|
||
|
{
|
||
|
cJSON *json; double value = 0.; int32_t i; struct iguana_info *coin = iguana_coinfind(base);
|
||
|
if ( coin != 0 && (json= iguana_getinfo(myinfo,coin)) != 0 )
|
||
|
{
|
||
|
value = jdouble(json,"balance");
|
||
|
free_json(json);
|
||
|
}
|
||
|
for (i=0; i<myinfo->numexchanges; i++)
|
||
|
{
|
||
|
value += 0;//InstantDEX_balance(myinfo,0,0,0,exchange,base);
|
||
|
}
|
||
|
return(value);
|
||
|
}
|
||
|
|
||
|
void tradebot_pendingadd(struct supernet_info *myinfo,cJSON *tradejson,char *base,double basevolume,char *rel,double relvolume)
|
||
|
{
|
||
|
portable_mutex_lock(&myinfo->pending_mutex);
|
||
|
// add to myinfo->trades
|
||
|
portable_mutex_unlock(&myinfo->pending_mutex);
|
||
|
}
|
||
|
|
||
|
void tradebot_pendingremove(struct supernet_info *myinfo,char *base,double basevolume,char *rel,double relvolume)
|
||
|
{
|
||
|
portable_mutex_lock(&myinfo->pending_mutex);
|
||
|
// remove from myinfo->trades
|
||
|
portable_mutex_unlock(&myinfo->pending_mutex);
|
||
|
}
|
||
|
|
||
|
double tradebot_pending(struct supernet_info *myinfo,char *base)
|
||
|
{
|
||
|
double pending = 0.; struct pending_trade *tp,*tmp;
|
||
|
portable_mutex_lock(&myinfo->pending_mutex);
|
||
|
HASH_ITER(hh,myinfo->trades,tp,tmp)
|
||
|
{
|
||
|
if ( strcmp(base,tp->base) == 0 )
|
||
|
pending += tp->dir * tp->basevolume;
|
||
|
else if ( strcmp(base,tp->rel) == 0 )
|
||
|
pending -= tp->dir * tp->relvolume;
|
||
|
}
|
||
|
portable_mutex_unlock(&myinfo->pending_mutex);
|
||
|
return(pending);
|
||
|
}
|
||
|
|