Komitmen gunung es mengacu pada investor ketika melakukan transaksi besar, untuk menghindari dampak yang terlalu besar pada pasar, untuk mengkomitmen pesanan besar secara otomatis dipecah menjadi beberapa pesanan, berdasarkan harga beli / jual terbaru saat ini dan strategi harga yang ditetapkan pelanggan, untuk mengkomitmen ulang secara otomatis jika pesanan sebelumnya dieksekusi sepenuhnya atau harga terbaru jelas menyimpang dari harga pesanan saat ini. Contoh: Jika nilai rata-rata floating point tunggal disetel menjadi 10, maka: Jumlah setiap order adalah 90% - 110% dari rata-rata pesanan tunggalnya. Harga pesanan adalah harga pembelian terbaru 1 * (dalam-dalam pesanan), sebuah pesanan baru dilakukan setelah pesanan sebelumnya telah selesai, pesanan akan dibatalkan secara otomatis jika harga transaksi terbaru melebihi kedalaman pesanan * 2 dari pesanan tersebut.
function CancelPendingOrders() { while (true) { var orders = _C(exchange.GetOrders); if (orders.length == 0) { return; } for (var j = 0; j < orders.length; j++) { exchange.CancelOrder(orders[j].Id); if (j < (orders.length-1)) { Sleep(Interval); } } } } var LastBuyPrice = 0; var InitAccount = null; function dispatch() { var account = null; var ticker = _C(exchange.GetTicker); // 在最新成交价格距离该笔委托超过委托深度*2时自动撤单并重新进行委托 if (LastBuyPrice > 0) { // 订单没有完成 if (_C(exchange.GetOrders).length > 0) { if (ticker.Last > LastBuyPrice && ((ticker.Last - LastBuyPrice) / LastBuyPrice) > (2*(EntrustDepth/100))) { Log('偏离过多, 最新成交价:', ticker.Last, '委托价', LastBuyPrice); CancelPendingOrders(); } else { return true; } } else { account = _C(exchange.GetAccount); Log("买单完成, 累计花费:", _N(InitAccount.Balance - account.Balance), "平均买入价:", _N((InitAccount.Balance - account.Balance) / (account.Stocks - InitAccount.Stocks))); } LastBuyPrice = 0; } // 委托价格为最新买1价*(1-委托深度) var BuyPrice = _N(ticker.Buy * (1 - EntrustDepth/100)); if (BuyPrice > MaxBuyPrice) { return true; } if (!account) { account = _C(exchange.GetAccount); } if ((InitAccount.Balance - account.Balance) >= TotalBuyNet) { return false; } var RandomAvgBuyOnce = (AvgBuyOnce * ((100 - FloatPoint) / 100)) + (((FloatPoint * 2) / 100) * AvgBuyOnce * Math.random()); var UsedMoney = Math.min(account.Balance, RandomAvgBuyOnce, TotalBuyNet - (InitAccount.Balance - account.Balance)); var BuyAmount = _N(UsedMoney / BuyPrice); if (BuyAmount < MinStock) { return false; } LastBuyPrice = BuyPrice; exchange.Buy(BuyPrice, BuyAmount, '花费: ', _N(UsedMoney), '上次成交价', ticker.Last); return true; } function main() { if (exchange.GetName().indexOf('Futures_') != -1) { throw "只支持现货"; } CancelPendingOrders(); InitAccount = _C(exchange.GetAccount); Log(InitAccount); if (InitAccount.Balance < TotalBuyNet) { throw "账户余额不足"; } LoopInterval = Math.max(LoopInterval, 1); while (dispatch()) { Sleep(LoopInterval * 1000); } Log("委托全部完成", _C(exchange.GetAccount)); }