A estratégia mais básica de fazer o mercado é comprar e vender, comprar e vender a diferença de preço.
function CancelPendingOrders(orderType) { while (true) { var orders = _C(exchange.GetOrders); var count = 0; if (typeof(orderType) != 'undefined') { for (var i = 0; i < orders.length; i++) { if (orders[i].Type == orderType) { count++; } } } else { count = orders.length; } if (count == 0) { return; } for (var j = 0; j < orders.length; j++) { if (typeof(orderType) == 'undefined' || (orderType == orders[j].Type)) { exchange.CancelOrder(orders[j].Id, orders[j]); if (j < (orders.length-1)) { Sleep(Interval); } } } } } function updateProfit(accountInit, accountNow, ticker) { var netNow = accountNow.Balance + accountNow.FrozenBalance + ((accountNow.Stocks + accountNow.FrozenStocks) * ticker.Buy); var netInit = accountInit.Balance + accountInit.FrozenBalance + ((accountInit.Stocks + accountInit.FrozenStocks) * ticker.Buy); LogProfit(netNow - netInit); } var InitAccount = null; var LastBuyPrice = 0; var LastSellPrice = 0; function onTick() { var ticker = _C(exchange.GetTicker); var BuyPrice = ticker.Buy + SlidePrice; var SellPrice = ticker.Sell - SlidePrice; // 利润消失 if ((SellPrice - BuyPrice) <= MaxDiff) { CancelPendingOrders(); return; } var cancelType = null; if (LastBuyPrice > 0 && (ticker.Buy - LastBuyPrice) > SlidePrice) { cancelType = ORDER_TYPE_BUY; } if (LastSellPrice > 0 && (LastSellPrice - ticker.Sell) > SlidePrice) { if (cancelType == null) { cancelType = ORDER_TYPE_SELL; } else { cancelType = -1; } } if (cancelType == -1) { CancelPendingOrders(); } else if (cancelType != null) { CancelPendingOrders(cancelType); } var orders = _C(exchange.GetOrders); if (orders.length == 2) { return; } var account = _C(exchange.GetAccount); var amountBuy = _N(Math.min(account.Balance / BuyPrice, Lot)); var amountSell = Math.min(account.Stocks, Lot); if (amountBuy >= MinStock) { if (orders.length == 0 || orders[0].Type == ORDER_TYPE_SELL) { if (orders.length > 0) { updateProfit(InitAccount, account, ticker); } exchange.Buy(BuyPrice, amountBuy); LastBuyPrice = BuyPrice; } } if (amountSell >= MinStock) { if (orders.length == 0 || orders[0].Type == ORDER_TYPE_BUY) { if (orders.length > 0) { updateProfit(InitAccount, account, ticker); } exchange.Sell(SellPrice, amountSell); LastSellPrice = SellPrice; } } } function onexit() { CancelPendingOrders(); } function main() { InitAccount = _C(exchange.GetAccount); Log(InitAccount); SetErrorFilter("502:|503:|unexpected|network|timeout|WSARecv|Connect|GetAddr|no such|reset|received|EOF"); exchange.SetRate(1); LoopInterval = Math.max(LoopInterval, 1); Lot = Math.max(MinStock, Lot); while (true) { onTick(); Sleep(LoopInterval * 1000); } }
Hans0621Como é que a moeda é determinada?
bbObrigada por compartilhar, tentei ler, algumas partes ainda não entendi muito, fiz algumas observações, obrigado por compartilhar. https://dn-filebox.qbox.me/ae3dba6b345db61fdb04694f11f5a089969c523f.png https://dn-filebox.qbox.me/7425baf156815b000d4aeb26c74669b8f08dff04.png https://dn-filebox.qbox.me/ad115b10c27f20434f27f8eaa4dd319341abdbf3.png
Rustypengse (orders.length == 0 ordres[0].Type == ORDER_TYPE_SELL) { Por favor, por que é necessário julgar este order [0].Type == ORDER_TYPE_SELL?
DaniaorenObrigado pela observação.