Strategi Komisi Iceberg

Penulis:Kebaikan, Dibuat: 2018-08-29 10:37:14, Diperbarui: 2019-12-03 17:29:30

Strategi Komisi Icebergwww.fmz.comKomisi gunung es mengacu pada transaksi skala besar investor, untuk menghindari dampak yang berlebihan pada pasar, komisi tunggal besar secara otomatis membagi satu pesanan besar menjadi beberapa pesanan kecil, sesuai dengan harga beli / jual terbaru saat ini dan harga pengaturan pelanggan. Strategi ini secara otomatis melakukan delegasi pesanan kecil, dan secara otomatis menempatkan kembali pesanan ketika pesanan sebelumnya sepenuhnya terjual atau harga terbaru menyimpang secara signifikan dari harga penempatan saat ini.

Contoh: Jika titik mengambang rata-rata tunggal ditetapkan menjadi 10, maka:

Jumlah setiap penempatan adalah 90% ~ 110% dari nilai rata-rata penempatan tunggal, dan harga penempatan adalah harga beli terbaru mari kita katakan 1 kali (minus 1 kedalaman delegasi), dan penempatan baru dibuat setelah penempatan terakhir selesai. secara otomatis menarik pesanan dan penempatan kembali ketika harga transaksi terbaru lebih dari kedalaman penempatan * 2.

Penempatan dihentikan ketika total volume strategi sama dengan jumlah total order. Ketika harga transaksi terakhir pasar lebih tinggi dari harga pembelian maksimumnya, komisi dihentikan, dan komisi dilanjutkan setelah harga transaksi terakhir lebih rendah dari 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));
}

Lebih banyak

Mimpi kecilBagus sekali!