Đề cập đến chính sách cân bằng nền tảng JavaScript
Điều này đòi hỏi phải xây dựng kho, ví dụ như tài khoản có 5.000 đô la, và một đồng xu, nếu giá trị của đồng xu lớn hơn số dư trong tài khoản là 5.000 và chênh lệch giá trị vượt quá mức định giá, ví dụ như đồng xu bây giờ có giá trị 6.000 đô la, bạn sẽ bán nó.
Địa chỉ của bài viết:https://www.fmz.com/bbs-topic/4986
'''backtest start: 2019-12-01 00:00:00 end: 2020-02-01 11:00:00 period: 1m exchanges: [{"eid":"OKEX","currency":"BTC_USDT","stocks":1}] ''' InitAccount = None def CancelPendingOrders(): ret = False while True: orders = _C(exchange.GetOrders) if len(orders) == 0 : return ret for j in range(len(orders)): exchange.CancelOrder(orders[j].Id) ret = True if j < len(orders) - 1: Sleep(Interval) return ret def onTick(): acc = _C(exchange.GetAccount) ticker = _C(exchange.GetTicker) spread = ticker.Sell - ticker.Buy diffAsset = (acc.Balance - (acc.Stocks * ticker.Sell)) / 2 ratio = diffAsset / acc.Balance LogStatus("ratio:", ratio, _D()) if abs(ratio) < threshold: return False if ratio > 0 : buyPrice = _N(ticker.Sell + spread, ZPrecision) buyAmount = _N(diffAsset / buyPrice, XPrecision) if buyAmount < MinStock: return False exchange.Buy(buyPrice, buyAmount, diffAsset, ratio) else : sellPrice = _N(ticker.Buy - spread, ZPrecision) sellAmount = _N(-diffAsset / sellPrice, XPrecision) if sellAmount < MinStock: return False exchange.Sell(sellPrice, sellAmount, diffAsset, ratio) return True def main(): global InitAccount, LoopInterval InitAccount = _C(exchange.GetAccount) LoopInterval = max(LoopInterval, 1) while True: if onTick(): Sleep(1000) CancelPendingOrders() Log(_C(exchange.GetAccount)) Sleep(LoopInterval * 1000)