def getBalance(idName): API_KEY = configJson[idName]['bk_apiKey'] API_SECRET = configJson[idName]['bk_apiSecret'] if API_KEY == '' or API_SECRET == '': print('this user have no API KEY or API SECRET to send order') return None bitkub = Bitkub() bitkub.set_api_key(API_KEY) bitkub.set_api_secret(API_SECRET) balance = bitkub.balances() data = {} if balance['error'] == 0: for sym in balance['result']: if balance['result'][sym]['available'] > 0: available = balance['result'][sym]['available'] available_h = max([ available, configJson[idName]['available'], configJson[idName]['availableHigh'] ]) p_drawdown = (abs(available_h - available) / available_h) * 100 p_drawdown = round(p_drawdown, 2) data[sym] = { 'available': available, 'reserved': balance['result'][sym]['reserved'] } #update balance data sheet if sym == 'THB': gSheet.setValue('Config', findKey='idName', findValue=idName, key='available', value=available) gSheet.setValue('Config', findKey='idName', findValue=idName, key='availableHigh', value=available_h) gSheet.setValue('Config', findKey='idName', findValue=idName, key='percentageDrawdown', value=p_drawdown) return data
def getBalance(idName): API_KEY = configJson[idName]['bk_apiKey'] API_SECRET = configJson[idName]['bk_apiSecret'] if API_KEY == '' or API_SECRET == '': print('this user have no API KEY or API SECRET to send order') return None bitkub = Bitkub() bitkub.set_api_key(API_KEY) bitkub.set_api_secret(API_SECRET) balance = bitkub.balances() data = {} if balance['error'] == 0: for sym in balance['result']: if balance['result'][sym]['available'] > 0: data[sym] = { 'available': balance['result'][sym]['available'], 'reserved': balance['result'][sym]['reserved'] } return data
def CreateSellOrder(idName, symbol): if not symbol.__contains__('THB_'): print('symbol name need contains THB_') return None API_KEY = configJson[idName]['bk_apiKey'] API_SECRET = configJson[idName]['bk_apiSecret'] if API_KEY == '' or API_SECRET == '': print('this user have no API KEY or API SECRET to send order') return None bitkub = Bitkub() bitkub.set_api_key(API_KEY) bitkub.set_api_secret(API_SECRET) balance = getBalance(idName) sym = symbol.replace('THB_', '') if not sym in list(balance): print('not found [{}] in balance'.format(sym)) return None amount = balance[sym]['available'] result = bitkub.place_ask(sym=symbol, amt=amount, typ='market') print(result)
def CreateBuyOrder(idName, symbol, portfoiloList): if not symbol.__contains__('THB_'): print('symbol name need contains THB_') return None API_KEY = configJson[idName]['bk_apiKey'] API_SECRET = configJson[idName]['bk_apiSecret'] if API_KEY == '' or API_SECRET == '': print('this user have no API KEY or API SECRET to send order') return None bitkub = Bitkub() bitkub.set_api_key(API_KEY) bitkub.set_api_secret(API_SECRET) balance = getBalance(idName) percentageBalanceUsing = configJson[idName]['percentageBalanceUsing'] system = configJson[idName]['system'] size = int(systemJson[system]['size']) portSize = len(list(balance)) - 1 portSymList = [] for symbol in portfoiloList: # Chane Symbol to Sym q = symbol.replace('THB_', '') portSymList.append(q) if portSize >= size: #checking except symbol for sym in list(balance): if (not sym in portSymList) and (sym != 'THB'): CreateSellOrder(idName, 'THB_' + sym) time.sleep(5) balance = getBalance(idName) portSize = len(list(balance)) - 1 print('size {}'.format(size)) print('portSize {}'.format(portSize)) budget = balance['THB']['available'] sizedBudget = (budget / (size - portSize)) * (percentageBalanceUsing / 100) print(sizedBudget) result = bitkub.place_bid(sym=symbol, amt=sizedBudget, typ='market') print(result)
def CreateBuyOrder(idName, symbol, portfoiloList, countLeft): if countLeft <= 0: print('count left = 0') return None if not symbol.__contains__('THB_'): print('symbol name need contains THB_') return None API_KEY = configJson[idName]['bk_apiKey'] API_SECRET = configJson[idName]['bk_apiSecret'] if API_KEY == '' or API_SECRET == '': print('this user have no API KEY or API SECRET to send order') return None bitkub = Bitkub() bitkub.set_api_key(API_KEY) bitkub.set_api_secret(API_SECRET) balance = getBalance(idName) percentageBalanceUsing = configJson[idName]['percentageBalanceUsing'] system = configJson[idName]['system'] size = int(configJson[idName]['portSize']) portSize = len(list(balance)) - 1 #Real Port buySize = int(configJson[idName]['buySize']) portSymList = [] for symbol in portfoiloList: # Chane Symbol to Sym q = symbol.replace('THB_', '') portSymList.append(q) #print('size {}'.format(size)) #print('portSize {}'.format(portSize)) print('countLeft {}'.format(countLeft)) budget = balance['THB']['available'] #sizedBudget = ( (budget / (size-portSize)) /countLeft) * (percentageBalanceUsing/100) sizedBudget = (budget / countLeft) * (percentageBalanceUsing / 100) print('sizedBudget {}'.format(sizedBudget)) result = bitkub.place_bid(sym=symbol, amt=sizedBudget, typ='market') print(result)
def Reset(*_): print('---------------------\nReset\n---------------------') global mornitorFilePath global transacFilePath if not os.path.exists(mornitorFilePath): return None m_df = pd.read_csv(mornitorFilePath) t_df = pd.read_csv(transacFilePath) deleteList = [] m_user_list = m_df['User'].unique().tolist() t_user_list = t_df['User'].unique().tolist() for user in m_user_list: print('Checking User {} in Mornitor'.format(user)) if not user in list(configJson): deleteList.append(user) for user in t_user_list: print('Checking User {} in Transaction'.format(user)) if not user in list(configJson): deleteList.append(user) #Sending Restart for user in list(configJson): if bool(configJson[user]['reset']): text = '[ Reset Portfoilo ]\n' +\ 'User ID : {} \n'.format(user) +\ 'Preset ID : {} \n'.format(configJson[user]['preset']) +\ 'System ID : {} \n'.format(configJson[user]['system']) +\ 'Portfolio Size : {} \n'.format(configJson[user]['portSize']) +\ 'Position Size : {} \n'.format(configJson[user]['buySize']) +\ 'Target Profit : {}%'.format(configJson[user]['percentageProfitTarget']) lineNotify.sendNotifyMassage(configJson[user]['lineToken'], text) gSheet.setValue('Config', findKey='idName', findValue=user, key='reset', value=0) gSheet.setValue('Config', findKey='idName', findValue=user, key='lastReport', value=time.time()) print(text) #Clear all real portfolio API_KEY = configJson[user]['bk_apiKey'] API_SECRET = configJson[user]['bk_apiSecret'] bitkub = Bitkub() bitkub.set_api_key(API_KEY) bitkub.set_api_secret(API_SECRET) balance = getBalance(user) #print(balance) for sym in balance: if sym == 'THB': continue symbol = 'THB_{}'.format(sym) print(symbol) print('Sell {} {}'.format(balance[sym]['available'], sym)) CreateSellOrder(user, symbol, count=1) for user in deleteList: print('delete [ {} ]'.format(user)) m_df = m_df[m_df['User'] != user] t_df = t_df[t_df['User'] != user] m_df.to_csv(mornitorFilePath, index=False) t_df.to_csv(transacFilePath, index=False) print('User Reset')