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

시장 전략으로 횡령 - 맞아요

저자:제로, 날짜: 2014-08-06
태그:고주파시장 제작자

시장 전략, 가장 기본적인 시장 전략, 한 번 구매 한 번 판매 한 번 주문 한 번 구매 한 번 판매 한 번 가격 차이.



function CancelPendingOrders(orderType) {
    while (true) {
        var orders = _C(exchange.GetOrders);
        var count = 0;
        if (typeof(orderType) != 'undefined') {
            for (var i = 0; i < orders.length; i++) {
                if (orders[i].Type == orderType) {
                    count++;
                }
            }
        } else {
            count = orders.length;
        }
        if (count == 0) {
            return;
        }

        for (var j = 0; j < orders.length; j++) {
            if (typeof(orderType) == 'undefined' || (orderType == orders[j].Type)) {
                exchange.CancelOrder(orders[j].Id, orders[j]);
                if (j < (orders.length-1)) {
                    Sleep(Interval);
                }
            }
        }
    }
}


function updateProfit(accountInit, accountNow, ticker) {
    var netNow = accountNow.Balance + accountNow.FrozenBalance + ((accountNow.Stocks + accountNow.FrozenStocks) * ticker.Buy);
    var netInit = accountInit.Balance + accountInit.FrozenBalance + ((accountInit.Stocks + accountInit.FrozenStocks) * ticker.Buy);
    LogProfit(netNow - netInit);
}

var InitAccount = null;
var LastBuyPrice = 0;
var LastSellPrice = 0;

function onTick() {
    var ticker = _C(exchange.GetTicker);
    var BuyPrice = ticker.Buy + SlidePrice;
    var SellPrice = ticker.Sell - SlidePrice;

    // 利润消失
    if ((SellPrice - BuyPrice) <= MaxDiff) {
        CancelPendingOrders();
        return;
    }
  
    var cancelType = null;
    
    if (LastBuyPrice > 0 && (ticker.Buy - LastBuyPrice) > SlidePrice) {
        cancelType = ORDER_TYPE_BUY;
    }
    
    if (LastSellPrice > 0 && (LastSellPrice - ticker.Sell) > SlidePrice) {
        if (cancelType == null) {
            cancelType = ORDER_TYPE_SELL;
        } else {
            cancelType = -1;
        }
    }
    
    if (cancelType == -1) {
        CancelPendingOrders();
    } else if (cancelType != null) {
        CancelPendingOrders(cancelType);
    }

    var orders = _C(exchange.GetOrders);
    if (orders.length == 2) {
        return;
    }
    var account = _C(exchange.GetAccount);
    var amountBuy = _N(Math.min(account.Balance / BuyPrice, Lot));
    var amountSell = Math.min(account.Stocks, Lot);

    if (amountBuy >= MinStock) {
        if (orders.length == 0 || orders[0].Type == ORDER_TYPE_SELL) {
            if (orders.length > 0) {
                updateProfit(InitAccount, account, ticker);
            }
            exchange.Buy(BuyPrice, amountBuy);
            LastBuyPrice = BuyPrice;
        }
    }
    if (amountSell >= MinStock) {
        if (orders.length == 0 || orders[0].Type == ORDER_TYPE_BUY) {
            if (orders.length > 0) {
                updateProfit(InitAccount, account, ticker);
            }
            exchange.Sell(SellPrice, amountSell);
            LastSellPrice = SellPrice;
        }
    }
}

function onexit() {
    CancelPendingOrders();
}

function main() {
    InitAccount = _C(exchange.GetAccount);
    Log(InitAccount);
    SetErrorFilter("502:|503:|unexpected|network|timeout|WSARecv|Connect|GetAddr|no such|reset|received|EOF");
    exchange.SetRate(1);
    LoopInterval = Math.max(LoopInterval, 1);
    Lot = Math.max(MinStock, Lot);
    while (true) {
        onTick();
        Sleep(LoopInterval * 1000);
    }
}


관련

더 많은

hans0621어떻게 화폐를 결정할까요?

bb공유 주셔서 감사합니다, 최대한 읽었습니다, 일부 부분은 아직 잘 이해하지 못했습니다, 몇 가지 논문을 작성했습니다. 감사합니다.

if (orders.length == 0 の ordres[0].Type == ORDER_TYPE_SELL) { 왜 이 order[0].Type == ORDER_TYPE_SELL) 에 대한 판단이 필요합니까?

대니오렌감사합니다.