HFT ہائی فریکوئنسی آرڈر فلو فیکٹر

مصنف:ایجاد کنندہ کوانٹائزیشن، تاریخ: 2022-12-04 00:22:04
ٹیگز:

ایک انٹری لیول آرڈر فلو ہائی فریکوئنسی الفا فیکٹر ، جو مارکیٹنگ کی حکمت عملی کے لئے بہترین خرید و فروخت کی قیمتوں کا تعین کرنے کے فاصلے کا حوالہ دے سکتا ہے ، سگنل کو [-1، 1] کے طور پر درجہ بندی کیا جاتا ہے ، رجحان 1 خریدار مارکیٹ کی نمائندگی کرتا ہے ، اور رجحان 1 بیچنے والے مارکیٹ کی نمائندگی کرتا ہے ، حکمت عملی فیکٹر ویلیو اور آخری ٹرانزیکشن کی قیمت کو حقیقی وقت میں نقش کرتی ہے۔ حکمت عملی کا استعمال کرتے ہوئے OKX اور باین این فیوچر ویب ساکٹ انٹرفیس وصول حساب کتاب، ذیل میں گراف اشارے کے اثرات ہیں، آپ کو ایک خاص طور پر مؤثر ہے کہ دیکھ سکتے ہیں، اعلی تعدد انٹری کے لئے عوامی طور پر مقداری enthusiasts کے

img


let _chart = Chart({
    subtitle: {
        text: "Market Status",
    },
    yAxis: [{
        height: "60%",
        lineWidth: 1,
        title: {
            text: 'Close',
        },
        opposite: true,
        labels: {
            align: "right",
            x: -3,
        }
    }, {
        title: {
            text: 'Alpha',
        },
        top: "60%",
        height: "20%",
        offset: 0,
        lineWidth: 1
    }, {
        title: {
            text: 'Vol',
        },
        top: "80%",
        height: "20%",
        offset: 0,
        lineWidth: 1
    }],

    series: [{
        name: 'Last',
        lineWidth: 1,
        data: [],
        id: 'primary',
        tooltip: {
            xDateFormat: '%Y-%m-%d %H:%M:%S'
        },
        yAxis: 0
    }, {
        type: 'column',
        lineWidth: 2,
        name: 'Alpha',
        data: [],
        yAxis: 1,
        color: 'green',
        zones: [{
            value: 0,
            color: 'red'
        }]
    }, {
        lineWidth: 1,
        type: 'area',
        color: '#257ed4',
        name: 'Vol',
        data: [],
        yAxis: 2
    }],
})

function calc_alpha(trades) {
    let tick_sell_vol = 0
    let tick_buy_vol = 0
    let last_buy_vol = 0
    let last_sell_vol = 0
    let rightPos = Math.ceil(trades.length * 0.382)
    trades.forEach(function(trade, idx) {
        if (trade.side == 'buy') {
            if (idx >= rightPos) {
                last_buy_vol += trade.qty
            }
            tick_buy_vol += trade.qty
        } else {
            if (idx >= rightPos) {
                last_sell_vol += trade.qty
            }
            tick_sell_vol += trade.qty
        }
    })

    let tanh = function(x) {
        // return [-1, 1]
        return (Math.exp(x) - Math.exp(-x)) / (Math.exp(x) + Math.exp(-x))
    }

    let positive_ratio = last_buy_vol / tick_sell_vol
    let negative_ratio = last_sell_vol / tick_buy_vol
    let trade_ratio = 0
    if (positive_ratio > negative_ratio) {
        trade_ratio = tanh(positive_ratio)
    } else {
        trade_ratio = tanh(-negative_ratio)
    }
    return _N(trade_ratio, 3)
}

let _trades = []
let _vol = 0

function onTick(ctx, event) {
    if (event.trades) {
        event.trades.forEach(function(trade) {
            _vol += trade.qty
            _trades.push(trade)
            if (_trades.length > QSize) {
                _trades.shift()
            }
        })
        if (_trades.length >= QSize) {
            let val = calc_alpha(_trades)
            _chart.add(0, [event.ts, _trades[_trades.length-1].price])
            _chart.add(1, [event.ts, val])
            _chart.add(2, [event.ts, _vol])
            _vol = 0
        }
    }
}

function main() {
    _chart.reset()
    let ct = exchange.SetContractType("swap")
    let debug = false
    let useMargin = false
    let okxAccessKey = ""
    let okxPhrase = ""
    let ctx = $.NewWSS(exchange, function(ws, e) {
        let msg = null
        if (e.GetName() == 'Futures_OKCoin') {
            msg = {
                op: "subscribe",
                args: []
            }
            let instId = ct.InstrumentID
            msg.args.push({
                channel: "books5",
                instId: instId
            })
            msg.args.push({
                channel: "trades",
                instId: instId
            })
        } else {
            msg = {
                method: "SUBSCRIBE",
                params: [],
                id: "1"
            }
            let symbol = e.GetCurrency().replace('_', '').toLowerCase()
            msg.params.push(symbol + "@aggTrade")
            msg.params.push(symbol + "@depth20@100ms")
        }
        ws.write(JSON.stringify(msg))
        Log("subscribe", msg, "channel")
        LogStatus("Ready")
    }, onTick, debug, useMargin, okxAccessKey, okxPhrase)

    while (true) {
        ctx.poll()
        EventLoop(1000)
    }
}

مزید