हिमस्खलन असाइनमेंट का तात्पर्य यह है कि निवेशक जब बड़े पैमाने पर लेनदेन करते हैं, तो बाजार पर बहुत अधिक झटके से बचने के लिए, बड़े आदेश को स्वचालित रूप से कई आदेशों में विभाजित करने के लिए, वर्तमान नवीनतम खरीद / बिक्री मूल्य और ग्राहक द्वारा निर्धारित मूल्य रणनीति के अनुसार स्वचालित रूप से छोटे आदेशों को स्वचालित रूप से फिर से शुरू करने के लिए, जब पिछले आदेश को पूरी तरह से पूरा किया जाता है या नवीनतम मूल्य वर्तमान आदेश मूल्य से स्पष्ट रूप से विचलित होता है। उदाहरण: यदि एकल औसत मूल्य फ्लोटिंग बिंदुओं की संख्या 10 पर सेट है, तोः प्रत्येक ऑर्डर की मात्रा उसके एकल ऑर्डर औसत का 90% से 110% है, ऑर्डर की कीमत नवीनतम खरीद मूल्य * ((1-ऑर्डर गहराई) के लिए 1 है, एक नया ऑर्डर पिछले ऑर्डर के सभी लेनदेन के बाद किया जाता है, स्वचालित रूप से रद्द कर दिया जाता है और फिर से ऑर्डर किया जाता है जब नवीनतम लेनदेन की कीमत उस ऑर्डर से ऑर्डर गहराई * 2 से अधिक हो जाती है। ऑर्डर बंद कर दिया जाता है जब रणनीतिक कुल लेनदेन की मात्रा इसकी कुल ऑर्डर की मात्रा के बराबर होती है। ऑर्डर बंद कर दिया जाता है जब बाजार में नवीनतम लेनदेन की कीमत सबसे अधिक खरीद मूल्य से अधिक होती है, और ऑर्डर फिर से शुरू हो जाती है जब नवीनतम लेनदेन की कीमत सबसे कम खरीद मूल्य से कम होती है।
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); if (LastBuyPrice > 0) { if (_C(exchange.GetOrders).length > 0) { if (ticker.Last > LastBuyPrice && ((ticker.Last - LastBuyPrice) / LastBuyPrice) > (2*(EntrustDepth/100))) { Log('deviate to much, newest last price:', ticker.Last, 'order buy price', LastBuyPrice); CancelPendingOrders(); } else { return true; } } else { account = _C(exchange.GetAccount); Log("order finised, total cost:", _N(InitAccount.Balance - account.Balance), "avg buy price:", _N((InitAccount.Balance - account.Balance) / (account.Stocks - InitAccount.Stocks))); } LastBuyPrice = 0; } var BuyPrice = _N(ticker.Buy * (1 - EntrustDepth/100),PricePerision); 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, 3); if (BuyAmount < MinStock) { return false; } LastBuyPrice = BuyPrice; exchange.Buy(BuyPrice, BuyAmount, 'Cost: ', _N(UsedMoney), 'last price', ticker.Last); return true; } function main() { CancelPendingOrders(); InitAccount = _C(exchange.GetAccount); Log(InitAccount); if (InitAccount.Balance < TotalBuyNet) { throw "balance not enough"; } LoopInterval = Math.max(LoopInterval, 1); while (dispatch()) { Sleep(LoopInterval * 1000); } Log("All Done", _C(exchange.GetAccount)); }