El iceberg encargado - compras

El autor:No hay nada, Fecha: 2014-07-24 14:39:00
Las etiquetas:Ayudados en el comercioEl iceberg

Los encargos de la montaña de hielo se refieren a que los inversores, cuando realizan transacciones masivas, para evitar causar un impacto excesivo en el mercado, desglosan automáticamente el encargo de la orden grande en varios encargos, realizan automáticamente el encargo pequeño de acuerdo con el último precio de compra / venta actual y la estrategia de precios establecida por el cliente, y vuelven a realizar el encargo automáticamente cuando el último encargo se haya completado o el último precio se desvíe significativamente del precio del encargo actual. Ejemplos: Si el número de puntos flotantes de un solo promedio se establece en 10, entonces: El número de pedidos es del 90% al 110% de su promedio de pedidos únicos, el precio de compra más reciente es de 1* (aproximadamente 1-profundidad de pedido), se realiza un nuevo pedido después de que se haya completado todo el pedido anterior, se retira automáticamente y se vuelve a realizar el pedido cuando el precio de la última transacción excede la profundidad de pedido * 2; el pedido se detiene cuando el total de transacciones estratégicas es igual a su cantidad total de pedidos. El pedido se detiene cuando el precio de la última transacción en el mercado es mayor que su precio de compra más alto, y se reanuda después de que el precio de entrega más reciente sea inferior al precio de compra más alto.




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

Más.