Iceberg Beli Perintah

Penulis:Rumput, Tarikh: 2018-07-04 15:07:54
Tag:Dibantu Perdagangan

Perintah gunung ais merujuk kepada pelabur yang melakukan perdagangan besar, untuk mengelakkan kejutan yang berlebihan kepada pasaran, untuk menugaskan pesanan besar secara automatik untuk dipecah menjadi beberapa pesanan, dengan harga beli / jual terkini dan strategi harga yang ditetapkan oleh pelanggan, 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 harga pembelian terbaru * ((1- kedalaman pesanan), satu pesanan baru akan dibuat selepas semua pesanan terakhir selesai, pesanan akan ditarik balik 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 lebih tinggi daripada harga pembelian tertinggi, dan pesanan akan disambung semula apabila harga pesanan terbaru diserahkan semula di bawah harga pembelian tertinggi.


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


Berkaitan

Lebih lanjut