계단 아래서 주문, 구매 또는 판매, 프로그램은 순차적으로 클릭 한 단기 간격으로 구매 또는 판매 주문을 지정 할 수 있습니다. 만약 구매라면, 가장 높은 가격으로 첫 번째单单, 다음单单 순차적으로 가격이 감소하고, 가장 저렴한 가격으로 판매单, 다음 가격 순차적으로 증가합니다.
function adjustFloat(v) { return Math.floor(parseFloat(v.toFixed(10))*1000)/1000; } function GetAccount(e) { var account; while (!(account = exchange.GetAccount())) { Sleep(Interval); } return account; } function GetTicker() { var ticker; while (!(ticker = exchange.GetTicker())) { Sleep(1000); } return ticker; } function main() { var ticker = GetTicker(); var InitPrice = ticker.Last; if (EnableTrigger) { Log('当前价格: ', InitPrice, InitPrice > TriggerPrice ? '价格跌破' : '价格涨超', TriggerPrice, '时触发阶梯下单'); while (true) { if (InitPrice > TriggerPrice && ticker.Last < TriggerPrice) { Log('当前价格', ticker.Last, '价格跌破 ', TriggerPrice, '元, 开始下单'); break; } else if (InitPrice < TriggerPrice && ticker.Last > TriggerPrice) { Log('当前价格', ticker.Last, '价格涨超 ', TriggerPrice, '元, 开始下单'); break; } ticker = GetTicker(); Sleep(1000); } } var account = GetAccount(); var needMoney = 0; var needStocks = 0; for (var i = 0; i < OrderNum; i++) { needMoney += (StartPrice - (i * PriceDiff)) * Amount; needStocks += Amount; } if (OpType == 0) { if (needMoney > account.Balance) { throw "没有足够的钱下单"; } for (var i = 0; i < OrderNum; i++) { exchange.Buy(adjustFloat(StartPrice - (i * PriceDiff)), Amount); } } else { if (needStocks > account.Stocks) { throw "没有足够的币下单"; } for (var i = 0; i < OrderNum; i++) { exchange.Sell(adjustFloat(StartPrice + (i * PriceDiff)), Amount); } } Log("全部委托完成"); }