Comisionado por la montaña de hielo - Vendiendo

El autor:No hay nada, Fecha: 2014-07-25 13:31:18
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 un gran pedido en varios encargos, realizan automáticamente pequeños encargos de acuerdo con el último precio de compra / venta actual y la estrategia de precios establecida por el cliente, y vuelven a realizar los encargos automáticamente cuando el último encargo se haya completado o el último precio se desvíe significativamente del precio actual del encargo. 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 la comisión es el precio de venta más reciente de 1 * ((1 + profundidad de la comisión), se realiza una nueva orden después de que la última orden haya sido completada, se retira automáticamente y se vuelve a realizar la comisión cuando el precio de la última transacción exceda la profundidad de la comisión * 2; la comisión se detiene cuando el total de transacciones estratégicas es igual a su cantidad total de órdenes. La comisión se detiene cuando el precio de la última transacción en el mercado es inferior a su precio de venta más bajo y se reanuda después de que la última transacción sea más alta que la venta más baja.




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 LastSellPrice = 0;
var InitAccount = null;

function dispatch() {
    var account = null;
    var ticker = _C(exchange.GetTicker);
    // 在最新成交价格距离该笔委托超过委托深度*2时自动撤单并重新进行委托
    if (LastSellPrice > 0) {
        // 订单没有完成
        if (_C(exchange.GetOrders).length > 0) {
            if (ticker.Last < LastSellPrice && ((LastSellPrice - ticker.Last) / ticker.Last) > (2*(EntrustDepth/100))) {
                Log('偏离过多, 最新成交价:', ticker.Last, '委托价', LastSellPrice);
                CancelPendingOrders();
            } else {
                return true;
            }
        } else {
            account = _C(exchange.GetAccount);
            Log("卖单完成, 累计卖出:", _N(InitAccount.Stocks - account.Stocks), "平均卖出价:", _N((account.Balance - InitAccount.Balance) / (InitAccount.Stocks - account.Stocks))); }
            LastSellPrice = 0;
    }

    // 委托价格为最新卖1价*(1+委托深度)
    var SellPrice = _N(ticker.Sell * (1 + EntrustDepth/100));
    if (SellPrice < MinSellPrice) {
        return true;
    }

    if (!account) {
        account = _C(exchange.GetAccount);
    }


    if ((InitAccount.Stocks - account.Stocks) >= TotalSellStocks) {
        return false;
    }

    var RandomAvgSellOnce = (AvgSellOnce * ((100 - FloatPoint) / 100)) + (((FloatPoint * 2) / 100) * AvgSellOnce * Math.random());
    var SellAmount = Math.min(TotalSellStocks - (InitAccount.Stocks - account.Stocks), RandomAvgSellOnce);
    if (SellAmount < MinStock) {
        return false;
    }
    LastSellPrice = SellPrice;
    exchange.Sell(SellPrice, SellAmount, '上次成交价', ticker.Last);
    return true;
}

function main() {
    if (exchange.GetName().indexOf('Futures_') != -1) {
        throw "只支持现货";
    }
    CancelPendingOrders();
    InitAccount = _C(exchange.GetAccount);
    Log(InitAccount);
    if (InitAccount.Stocks < TotalSellStocks) {
        throw "账户币数不足";
    }
    LoopInterval = Math.max(LoopInterval, 1);
    while (dispatch()) {
        Sleep(LoopInterval);
    }
    Log("委托全部完成", _C(exchange.GetAccount));
}



Relacionados

Más.