Commande de glace - mise en vente

Auteur:Nul, Date: 25 juillet 2014 13:31:18
Les étiquettes:Aides au commerceUn iceberg

Les mandats de montagne de glace sont des mandats que les investisseurs décomposent automatiquement en plusieurs mandats pour éviter de provoquer un choc excessif sur le marché, en fonction du dernier prix d'achat / vente et de la stratégie de prix définie par le client. Exemple: Si le nombre de points flottants de la moyenne unique est de 10, alors: Le nombre de commandes est de 90% à 110% de la moyenne de ses commandes uniques, le prix de vente est le prix de vente le plus récent* ((1+ profondeur de commande), un nouvel ordre est lancé après que le dernier ordre a été entièrement transait, le dernier prix de transaction est automatiquement retiré et réengagé lorsque le dernier prix dépasse la profondeur de commande*2; le mandat est arrêté lorsque le total des transactions stratégiques est égal à son nombre total d'ordres; le mandat est arrêté lorsque le prix de la dernière transaction sur le marché est inférieur à son prix de vente le plus bas, et le mandat est rétabli lorsque le dernier prix de transaction est supérieur au minimum de vente;




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



Relationnée

Plus de