برفانی پہاڑ کا حوالہ دیتا ہے کہ سرمایہ کار بڑے پیمانے پر تجارت کرتے وقت ، مارکیٹ میں زیادہ سے زیادہ جھٹکے سے بچنے کے لئے ، بڑے آرڈر کو خود بخود متعدد آرڈرز میں تقسیم کرنے کے لئے ، موجودہ تازہ ترین خرید / فروخت کی قیمت اور کسٹمر کی مقرر کردہ قیمت کی حکمت عملی کے مطابق خود بخود چھوٹے آرڈر کو خود بخود دوبارہ ترتیب دینے کے لئے ، جب پچھلے آرڈر کو مکمل طور پر پورا کیا گیا ہو یا تازہ ترین قیمت موجودہ آرڈر کی قیمت سے نمایاں طور پر انحراف کرے۔ مثال: اگر ایک بار کا اوسط فلوٹنگ پوائنٹ نمبر 10 پر مقرر کیا گیا ہے تو: ہر آرڈر کی تعداد اس کی ایک بار کی اوسط آرڈر کی 90٪ سے 110٪ تک ہوتی ہے ، آرڈر کی قیمت تازہ ترین خریداری کی قیمت 1 * ((1-آرڈر کی گہرائی) ہے ، پچھلے آرڈر کے بعد ایک نیا آرڈر مکمل طور پر مکمل ہوجاتا ہے ، جب تازہ ترین ٹرانزیکشن کی قیمت اس آرڈر سے زیادہ ہوتی ہے تو یہ خود بخود منسوخ ہوجاتا ہے اور دوبارہ آرڈر کیا جاتا ہے۔ جب اسٹریٹجک مجموعی ٹرانزیکشن کی تعداد اس کی مجموعی آرڈر کی تعداد کے برابر ہوتی ہے تو آرڈر کو روک دیا جاتا ہے۔ جب مارکیٹ میں تازہ ترین ٹرانزیکشن کی قیمت اس کی سب سے زیادہ خریداری کی قیمت سے زیادہ ہوتی ہے تو آرڈر کو روک دیا جاتا ہے ، اور جب تازہ ترین ٹرانزیکشن کی قیمت سب سے زیادہ خریداری کی قیمت سے کم ہوجاتی ہے تو دوبارہ آرڈر شروع ہوتا ہے۔
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)); }