আইসবার্গ ক্রয় আদেশ

লেখক:ঘাস, তারিখ: ২০১৮-০৭-০৪ ১৫ঃ০৭ঃ৫৪
ট্যাগঃবাণিজ্যিকভাবে সহায়ক

হিমশৈল অর্ডার বলতে বোঝায় যে বিনিয়োগকারীরা যখন বড় পরিমাণে লেনদেন করেন, তখন বাজারে অত্যধিক আঘাত এড়াতে, বড় অর্ডারটি স্বয়ংক্রিয়ভাবে একাধিক অর্ডারে বিভক্ত করে, বর্তমান সর্বশেষতম কিনুন / বিক্রয় একক মূল্য এবং গ্রাহকের সেট করা মূল্য কৌশল অনুসারে স্বয়ংক্রিয়ভাবে ছোট অর্ডারগুলি অর্ডার করে, যখন পূর্ববর্তী অর্ডারটি সম্পূর্ণরূপে সম্পন্ন হয় বা সর্বশেষ মূল্যটি বর্তমান অর্ডার মূল্য থেকে উল্লেখযোগ্যভাবে বিচ্যুত হয়, তখন স্বয়ংক্রিয়ভাবে পুনরায় অর্ডার করা হয়। উদাহরণঃ যদি একক গড় ভাসমান বিন্দু সংখ্যা 10 সেট করা হয়ঃ প্রতিটি অর্ডারের পরিমাণ তার একক অর্ডারের গড়ের ৯০% থেকে ১১০%। অর্ডারের দাম সর্বশেষ ক্রয়ের দামের জন্য ১* ((১-অর্ডারের গভীরতা) । পূর্ববর্তী অর্ডারটি সম্পূর্ণরূপে সম্পন্ন হওয়ার পরে একটি নতুন অর্ডার করা হয়, সর্বশেষ অর্ডারের দামটি অর্ডারের গভীরতা *২ এর চেয়ে বেশি হলে স্বয়ংক্রিয়ভাবে প্রত্যাহার করা হয় এবং পুনরায় অর্ডার করা হয়। যখন কৌশলগত মোট অর্ডারের পরিমাণ তার মোট অর্ডারের পরিমাণের সমান হয় তখন অর্ডারটি বন্ধ করা হয়। যখন বাজারে সর্বশেষ অর্ডারের দাম সর্বোচ্চ ক্রয়ের দামের চেয়ে বেশি হয় তখন অর্ডারটি বন্ধ করা হয় এবং সর্বশেষ অর্ডারের দাম সর্বোচ্চ ক্রয়ের দামের নীচে ফিরে আসার পরে অর্ডারটি পুনরায় শুরু করা হয়।


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));
}


সম্পর্কিত

আরো