리소스 로딩... 로딩...

아이스만 위탁 - 판매

저자:제로, 2014-07-25 13:31:18
태그:무역 지원빙산

아이스산 위탁은 투자자가 대규모 거래를 할 때 시장에 과도한 충격을 피하기 위해 큰 주문을 자동으로 여러 주문으로 분할하여 현재 최신 구매/판매 가격과 고객이 설정한 가격 전략에 따라 자동으로 소액 주문을 수행하고, 이전 주문이 완전히 거래되거나 최신 가격이 현재 주문 가격에서 크게 벗어나면 자동으로 다시 주문을 수행하는 것을 의미합니다. 예를 들어: 만약 단일 평균값의 부동 소수점이 10으로 설정되면: 각 위탁의 수는 단일 위탁 평균의 90%~110%에 해당한다. 위탁 가격은 가장 최근에 팔린 가격* ((1+ 위탁 깊숙이) 에 해당한다. 이전 위탁의 모든 거래가 완료된 후 새로운 위탁을 진행하고, 최신 거래 가격이 위탁의 위탁 깊숙이*2를 초과하면 자동으로 취소되고 재위탁된다. 전략 전체 거래량이 전체 위탁량과 같을 때 위탁을 중단한다. 시장에서 최신 거래 가격이 최저 판매 가격보다 낮을 때 위탁을 중단하고, 최신 거래 가격이 최저 판매 가격보다 높을 때 위탁을 재위탁한다.




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



관련

더 많은