Perintah gunung ais merujuk kepada pelabur yang melakukan transaksi besar, untuk mengelakkan kejutan yang berlebihan kepada pasaran, untuk menugaskan pesanan besar secara automatik untuk dipecah menjadi beberapa pesanan, dengan harga jual beli terkini dan strategi harga yang ditetapkan oleh pelanggan, dengan pesanan kecil secara automatik, jika pesanan sebelumnya diselesaikan sepenuhnya atau harga terkini jelas menyimpang dari harga pesanan semasa, pesanan semula secara automatik. Contoh: Jika bilangan titik terapung rata-rata tunggal ditetapkan kepada 10, maka: Jumlah setiap pesanan adalah 90% - 110% daripada purata pesanan tunggalnya, harga pesanan adalah 1 jual terakhir * ((1 + kedalaman pesanan), satu pesanan baru akan dibuat selepas semua pesanan terakhir selesai, pesanan akan ditarik balik dan diarahkan semula secara automatik apabila harga transaksi terbaru melebihi kedalaman pesanan * 2; pesanan akan dihentikan apabila jumlah keseluruhan transaksi strategi sama dengan jumlah pesanan keseluruhan; pesanan akan dihentikan apabila harga transaksi terbaru di pasaran berada di bawah harga jual terendahnya, dan pesanan akan disambung semula selepas harga transaksi terbaru berada di atas penjualan terendah;
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 LastSellPrice = 0; var InitAccount = null; function dispatch() { var account = null; var ticker = _C(exchange.GetTicker); // 在最新成交价格距离该笔委托超过委托深度*2时自动撤单并重新进行委托 if (LastSellPrice > 0) { // 订单没有完成 if (_C(exchange.GetOrders).length > 0) { if (ticker.Last < LastSellPrice && ((LastSellPrice - ticker.Last) / ticker.Last) > (2*(EntrustDepth/100))) { Log('偏离过多, 最新成交价:', ticker.Last, '委托价', LastSellPrice); CancelPendingOrders(); } else { return true; } } else { account = _C(exchange.GetAccount); Log("卖单完成, 累计卖出:", _N(InitAccount.Stocks - account.Stocks), "平均卖出价:", _N((account.Balance - InitAccount.Balance) / (InitAccount.Stocks - account.Stocks))); } LastSellPrice = 0; } // 委托价格为最新卖1价*(1+委托深度) var SellPrice = _N(ticker.Sell * (1 + EntrustDepth/100)); if (SellPrice < MinSellPrice) { return true; } if (!account) { account = _C(exchange.GetAccount); } if ((InitAccount.Stocks - account.Stocks) >= TotalSellStocks) { return false; } var RandomAvgSellOnce = (AvgSellOnce * ((100 - FloatPoint) / 100)) + (((FloatPoint * 2) / 100) * AvgSellOnce * Math.random()); var SellAmount = Math.min(TotalSellStocks - (InitAccount.Stocks - account.Stocks), RandomAvgSellOnce); if (SellAmount < MinStock) { return false; } LastSellPrice = SellPrice; exchange.Sell(SellPrice, SellAmount, '上次成交价', ticker.Last); return true; } function main() { if (exchange.GetName().indexOf('Futures_') != -1) { throw "只支持现货"; } CancelPendingOrders(); InitAccount = _C(exchange.GetAccount); Log(InitAccount); if (InitAccount.Stocks < TotalSellStocks) { throw "账户币数不足"; } LoopInterval = Math.max(LoopInterval, 1); while (dispatch()) { Sleep(LoopInterval); } Log("委托全部完成", _C(exchange.GetAccount)); }