def initAuto(exch, notional, batchSize, apiDict, ccys, isBuild, spotDict=None): cl.skipMinutes(SKIP_MINS) riskDfs = [] for i in range(SHARED_EXCH_DICT[exch]): if exch=='bbt': riskDfs.append(cl.bbtGetRiskDfs(i + 1, spotDict)) else: riskDfs.append(cl.kutGetRiskDfs(i + 1)) cl.parallelRun(riskDfs) ##### ccyData = [] for ccy in ccys: if exch=='bbt': ccyData.append(bbtGetCcyData(ccy, apiDict, riskDfs)) else: ccyData.append(kutGetCcyData(ccy, apiDict, riskDfs)) cl.parallelRun(ccyData) ##### sbList = [] for i in range(len(ccys)): paramSave('sb', ccys[i], ccyData[i].sb) paramSave('yld', ccys[i], ccyData[i].yld) sbList.append(ccyData[i].sb) ### sbRanks = list(scipy.stats.rankdata(sbList, method='ordinal')) for i in range(len(sbRanks)): sbRanks[i] = len(sbRanks) - sbRanks[i] + 1 ### chosenCcyData=None for i in range(len(ccys)): j = sbRanks.index(i + 1) adjNotional = notional if ccyData[j].ccy in AUTO_DICT['NOTIONAL_MULT'].keys(): adjNotional *= AUTO_DICT['NOTIONAL_MULT'][ccyData[j].ccy] if isBuild: ccyData[j].chosen = chooseBuild(ccyData[j].mvDict) isOk = isGT('sb',ccyData[j].ccy,NCONFIRMS,(AUTO_DICT['SB_SHIFT']+20)/10000) and isGT('yld',ccyData[j].ccy,NCONFIRMS,AUTO_DICT['YIELD_BORDER']) if exch=='kut': isOk = isOk and isSimBuildOk(adjNotional, batchSize, ccyData[j]) else: ccyData[j].chosen = chooseUnwind(ccyData[j].mvDict, adjNotional * batchSize) isOk = isLT('sb', ccyData[j].ccy, NCONFIRMS, AUTO_DICT['SB_SHIFT'] / 10000) and isLT('yld', ccyData[j].ccy, NCONFIRMS, AUTO_DICT['YIELD_BORDER']) and \ isSimUnwindOk(exch, adjNotional, batchSize, ccyData[j]) if isOk: chosenCcyData = ccyData[j] break return chosenCcyData, adjNotional
for i in range(-100, 100): additional = i * 5000 df['unrealised_pnl_sim'] = df['unrealised_pnl'] + df['delta_value'] * (tgtLiqH - 1) df['ab_delta'] = df['unrealised_pnl_sim'].clip(None, 0) - df['unrealised_pnl'].clip(None, 0) ab = availableBalance + additional + df['ab_delta'].sum() df['cushion'] = ab + df['im_value'] - df['mm_value'] + df['unrealised_pnl_sim'].clip(0, None) if df['cushion'].min() > 0: return additional # -ve = money can leave account return 0 ###### # Init ###### apiDict=cl.getApiDict() spotDict=dict() spotDict['USDT']=cl.ftxGetMid(apiDict['ftx'],'USDT/USD') ##### riskDfs = [] for i in range(SHARED_EXCH_DICT['bbt']): riskDfs.append(cl.bbtGetRiskDfs(i + 1, spotDict)) cl.parallelRun(riskDfs) ###### # Main ###### for i in range(SHARED_EXCH_DICT['bbt']): cl.printHeader('BBT' + str(i + 1)) usdtDict=cl.bbCCXTInit(i+1).v2_private_get_wallet_balance({'coin': 'USDT'})['result']['USDT'] print('Adjustment = ',str(bbtGetAdj(riskDfs[0].riskDf, float(usdtDict['available_balance']), tgtLiqH)))