La stratégie de la commission de l'iceberg

Auteur:La bonté, Créé: 2018-08-29 10:37:14, Mis à jour: 2019-12-03 17:29:30

La stratégie de la commission de l'icebergwww.fmz.comLa commission de l'iceberg se réfère à la transaction à grande échelle de l'investisseur, afin d'éviter un impact excessif sur le marché, la grande commission unique est automatiquement divisée en plusieurs petites commandes, en fonction du dernier prix d'achat/vente actuel et du prix fixé par le client.

Exemple: Si le point flottant de la moyenne unique est défini sur 10, alors:

Le nombre de chaque placement est de 90%~110% de la valeur moyenne du placement unique, et le prix de placement est le dernier prix d'achat disons 1 fois (moins 1 profondeur de délégation), et un nouveau placement est effectué après le dernier placement est terminé. retirer automatiquement l'ordre et le re-placement lorsque le dernier prix de transaction est supérieur à la profondeur de placement *2.

Le placement est arrêté lorsque le volume total de la stratégie est égal à son nombre total d'ordres. Lorsque le dernier prix de transaction du marché est supérieur à son prix d'achat maximum, la commission est arrêtée et la commission est reprise après que le dernier prix de transaction soit inférieur au prix d'achat le plus élevé.

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);
    if (LastBuyPrice > 0) {
        if (_C(exchange.GetOrders).length > 0) {
            if (ticker.Last > LastBuyPrice && ((ticker.Last - LastBuyPrice) / LastBuyPrice) > (2*(EntrustDepth/100))) {
                Log('deviate to much, newest last price:', ticker.Last, 'order buy price', LastBuyPrice);
                CancelPendingOrders();
            } else {
                return true;
            }
        } else {
            account = _C(exchange.GetAccount);
            Log("order finised, total cost:", _N(InitAccount.Balance - account.Balance), "avg buy price:", _N((InitAccount.Balance - account.Balance) / (account.Stocks - InitAccount.Stocks)));
        }
        LastBuyPrice = 0;
    }
    
    var BuyPrice = _N(ticker.Buy * (1 - EntrustDepth/100),PricePerision);
    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, 3);
    if (BuyAmount < MinStock) {
        return false;
    }
    LastBuyPrice = BuyPrice;
    exchange.Buy(BuyPrice, BuyAmount, 'Cost: ', _N(UsedMoney), 'last price', ticker.Last);
    return true;
}

function main() {
    CancelPendingOrders();
    InitAccount = _C(exchange.GetAccount);
    Log(InitAccount);
    if (InitAccount.Balance < TotalBuyNet) {
        throw "balance not enough";
    }
    LoopInterval = Math.max(LoopInterval, 1);
    while (dispatch()) {
        Sleep(LoopInterval * 1000);
    }
    Log("All Done", _C(exchange.GetAccount));
}

Plus de

Le petit rêveC'est très bien!