L' ordre d' achat de l' iceberg

Auteur:Le foin, Date: 2018-07-04 15:07:54 Il a été mis en ligne le 15 juillet 2018.
Les étiquettes:Aides au commerce

Les mandats glaciaires sont des mandats que les investisseurs décomposent automatiquement en plusieurs commandes 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. Les mandats sont automatiquement réinitialisés lorsque le dernier ordre est entièrement transait ou lorsque le dernier prix s'écarte nettement du prix actuel. 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 la commande est le prix d'achat le plus récent de 1* (depth de commande 1) et une nouvelle commande est passée après que la dernière commande a été entièrement passée. La commande est automatiquement retirée et récompensée lorsque le prix de la dernière transaction dépasse la profondeur de la commande (2). La commande est arrêtée lorsque le total des transactions stratégiques est égal à son nombre total de commandes.


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


Relationnée

Plus de