آپ کو منتخب کر سکتے ہیں چند پوائنٹس میں داخلہ، چند پوائنٹس چھوڑنے، سسٹم کو مجبور کرنے کی تعمیر، مجبور کرنے کی تعمیر، مسلسل کوشش کریں گے 0 پوائنٹس میں داخلہ خرید، 8 پوائنٹس میں فروخت، داخلہ 23 کے طور پر مقرر کریں، باہر نکلیں 8 کا مطلب ہے کہ 23 بجے داخلہ، اگلے دن 8 پوائنٹس میں باہر نکلیں، اگر 8.5 بھی 8.5 ہے تو 8.5 کا مطلب ہے، 8.6 کے طور پر مقرر کیا جاتا ہے تو 836 پوائنٹس، چھوٹا سا نقطہ ضرب 6 ہے منٹ کا تعین، سٹاپ نقصان پر پابندی عائد کی جا سکتی ہے اگر کھولنے کے لئے سٹاپ نقصان، سٹاپ نقصان نقطہ 0.1 کے طور پر ظاہر ہوتا ہے تو 0.1 فیصد گرنے پر جبری فروخت؛ سٹاپ نقصان کی قیمت سب سے زیادہ حوالہ قیمت، مثال کے طور پر 1000 میں داخل ہونے کا مطلب ہے، 2000 تک حاصل کیا، اگر 2000 میں 0.1 فیصد گر گیا تو نقصان، اگر سب سے زیادہ حوالہ قیمت نہیں ہے، تو اوسط میں 0.1٪ خریدنے کا نقصان.
// 0 means wait buy, 1 means wait sell var state = 0; var lastBuyAmount = 0; var lastHighPrice = 0; var lastBuyPrice = 0; var initBalance = 0; function cancelAllOrders() { var orders = null; while (!(orders = exchange.GetOrders())) { Sleep(2000); } if (orders.length > 0) { for (var j = 0; j < orders.length; j++) { exchange.CancelOrder(orders[j].Id); if (j < (orders.length-1)) { Sleep(2000); } } } } function MustBuy() { var buyAmount = 0; var initAccount = _C(exchange.GetAccount); if (initBalance == 0) { initBalance = initAccount.Balance; if (initAccount.Balance < UsedFund) { throw "账户余额不足,少于设定值 " + UsedFund; } } UsedFund = Math.min(initAccount.Balance, UsedFund); var spend = 0; var buyAmount = 0; while (spend < UsedFund) { var ticker = _C(exchange.GetTicker); var amount = _N((UsedFund - spend) / (ticker.Last + SlidePrice)); if (amount < 0.001) { break; } exchange.Buy(ticker.Last + SlidePrice, amount); Sleep(RetryInterval * 1000); cancelAllOrders(); var account = _C(exchange.GetAccount); spend = initAccount.Balance - account.Balance; buyAmount = account.Stocks - initAccount.Stocks; } if (buyAmount > 0) { lastBuyPrice = lastHighPrice = (spend / buyAmount); Log("平均买入价", _N(lastHighPrice)); } return buyAmount; } function MustSell(sellAmount) { var remaind = sellAmount; var initAccount = _C(exchange.GetAccount); while (remaind >= 0.001) { var ticker = _C(exchange.GetTicker); exchange.Sell(ticker.Last - SlidePrice, remaind); Sleep(RetryInterval * 1000); cancelAllOrders(); var newAccount = _C(exchange.GetAccount); remaind -= (initAccount.Stocks - newAccount.Stocks); initAccount = newAccount; } LogProfit(initAccount.Balance - initBalance); } function onTick() { var now = new Date(); var h = now.getHours() + (now.getMinutes() / 60); if (state == 0 && ( (EnterHour < LeaveHour && h >= EnterHour && h < LeaveHour) || (EnterHour > LeaveHour && (h >= EnterHour || h < LeaveHour)) )) { lastBuyAmount = MustBuy(); state = 1; } else if (state == 1 && ( (EnterHour < LeaveHour && (h >= LeaveHour || h < EnterHour)) || (EnterHour > LeaveHour && (h >= LeaveHour && h < EnterHour)) )) { if (lastBuyAmount > 0) { MustSell(lastBuyAmount); lastBuyAmount = 0; } state = 0; } else if ((EnableStopProfit || EnableStopLoss) && lastBuyAmount > 0) { var ticker = _C(exchange.GetTicker); if (RefHigh) { lastHighPrice = Math.max(lastHighPrice, ticker.Last); } var ratioStopLoss = Math.abs((lastHighPrice - ticker.Last) / lastHighPrice); var ratioStopProfit = Math.abs((lastBuyPrice - ticker.Last) / lastBuyPrice); var shouldSell = false; if (EnableStopLoss && ticker.Last < lastHighPrice && (ratioStopLoss >= (StopLoss/100))) { // Stop loss Log("开始止损, 当前跌价点数:", _N(ratioStopLoss*100), "当前价格", ticker.Last, "对比价格", _N(lastHighPrice)); shouldSell = true; } else if (EnableStopProfit && ticker.Last > lastBuyPrice && (ratioStopProfit >= (StopProfit/100))) { // Stop loss Log("开始止赢, 当前涨价点数:", _N(ratioStopProfit*100), "当前价格", ticker.Last, "对比价格", _N(lastBuyPrice)); shouldSell = true; } if (shouldSell) { MustSell(lastBuyAmount); lastBuyAmount = 0; } } } function main() { if (EnterHour == LeaveHour) { throw "进场时间跟离场时间不能相等!"; } Log(_C(exchange.GetAccount)); while(true) { onTick(); Sleep(60000); } }