O iceberg foi contratado - comprado

Autora:Zero., Data: 2014-07-24 14:39:00
Tags:Ajudados no comércioIceberg

O mandato do iceberg refere-se ao fato de que os investidores, quando realizam grandes transações, para evitar causar um impacto excessivo no mercado, dividem automaticamente o grande pedido em vários pedidos, executam automaticamente pequenos pedidos de acordo com o preço de compra/venda mais recente atual e a estratégia de preço definida pelo cliente, e reiniciam automaticamente os pedidos quando o último pedido é totalmente transacionado ou o último preço se desvia significativamente do preço atual do pedido. Exemplos: Se o número de pontos flutuantes de uma única média for definido como 10, então: O volume de cada encomenda é de 90% a 110% da sua média de encomendas únicas. O preço de encomenda é o preço de compra mais recente de 1 * (<1-profundidade de encomenda), um novo encomenda é executado após a transação completa do último encomenda, é automaticamente cancelado e re-encomendado quando o preço da última transação excede a profundidade de encomenda * 2. O encomenda é interrompida quando o total de transações estratégicas é igual ao seu número total de encomendas. O encomenda é interrompida quando o preço da última transação no mercado é maior do que seu preço de compra máximo, e o encomenda é reiniciada quando o preço da última transação é menor do que o preço de compra máximo.




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


Relacionados

Mais.