Penghantaran Iceberg - Beli

Penulis:Sifar, Tarikh: 2014-07-24 14:39:00
Tag:Dibantu PerdaganganGunung ais

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);
    // 在最新成交价格距离该笔委托超过委托深度*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));
}


Berkaitan

Lebih lanjut