В процессе загрузки ресурсов... загрузка...

Куантизация монетного круга выглядит совершенно по-новому - приближает вас к квантизации монетного круга.

Автор:Изобретатели количественного измерения - мечты, Создано: 2021-06-09 14:30:43, Обновлено: 2023-09-19 21:45:29

img

Куантизация монетного круга.

В предыдущей статье мы вместе подумали, разработали простую многовариантную сетевую стратегию. Далее мы продолжаем учиться на пути к количественной торговле. В этой статье мы рассмотрим более сложный вид стратегического дизайна - дизайн стратегии хеджирования. В этой статье мы планируем разработать многовариантную стратегию хеджирования с длительным периодом.

Хеджирование на длительный срок

Проще говоря, хеджирование сверхурочно заключается в том, чтобы сделать еще один контракт, сделать еще один контракт пустым, и ждать трех вариантов одновременного ("больше, пусто") балансирования:

  • Если вы зарабатываете больше денег, если вы теряете больше денег, если вы зарабатываете больше, чем теряете, вы получаете часть прибыли.
  • Если вы хотите, чтобы ваши деньги были в долгу, вы должны быть готовы к тому, что они будут в долгу, и вы должны быть готовы к тому, что они будут в долгу.
  • Кто больше зарабатывает, тот и больше зарабатывает, а кто меньше зарабатывает, тот и больше хочет заработать!

Другие случаи - это провал, задержка или продолжение роста позиций. ((Поскольку колебания разницы больше, чем уменьшение односторонних колебаний, относительно меньший риск, обратите внимание только на относительность!)

设A1为合约A在1时刻的价格,设B1为合约B在1时刻的价格,此时做空A合约,做空价格A1,做多B合约,做多价格B1。
设A2为合约A在2时刻的价格,设B2为合约B在2时刻的价格,此时平仓A合约(平空),平空价格A2,平仓B合约(平多),平多价格B2。

1时刻的差价:A1 - B1 = X 
2时刻的差价:A2 - B2 = Y 
X - Y = A1 - B1 - (A2 - B2)
X - Y = A1 - B1 - A2 + B2
X - Y = A1 - A2 + B2 - B1

可以看到,A1 - A2 就是A合约平仓的盈利差价。
B2 - B1就是B合约平仓的盈利差价。只要这两个平仓总体是正数,即:A1 - A2 + B2 - B1 > 0 就是盈利的。也就是说只要X - Y > 0。
因为:X - Y = A1 - A2 + B2 - B1

得出结论,只要开仓时的差价X大于平仓时的差价Y就是盈利的(注意是做空A,做多B开仓,搞反了就是相反的了),当然这个是理论上的,实际上还要考虑手续费、滑点等因素。

Поскольку на цифровых валютных биржах имеются сделки с процентной ставкой, существуют и бессрочные контракты; и цена бессрочных контрактов всегда близка к цене на рынке на данный момент из-за наличия процентных ставок; тогда мы выбираем использовать сделки с процентной ставкой и бессрочные контракты с хеджирующей ставкой; процентные контракты выбирают более долгосрочный контракт, чтобы избежать частого установления хеджирующих контрактов.

Сначала давайте поговорим о ценовых различиях в разных странах.

После того, как вы узнаете основные принципы, вам не нужно торопиться писать стратегию. Сначала сделайте статистику разницы, нарисуйте диаграмму, посмотрите на разницу.

Мы основываемсяДоговор OKEXДля проектирования, рисование графиков на FMZ очень просто, с помощью хорошо упакованных функций можно легко рисовать графики.Высокие диаграммы◎ Функция рисунка в документации API описывает:https://www.fmz.com/api#chart...

Поскольку существует много разновидностей, прежде чем напечатать рисунок, необходимо определить разницу между ними.

var arrSwapContractType = ["BTC-USDT-SWAP", "LTC-USDT-SWAP", "ETH-USDT-SWAP", "ETC-USDT-SWAP"]   // 永续合约
var arrDeliveryContractType = ["BTC-USDT-210924", "LTC-USDT-210924", "ETH-USDT-210924", "ETC-USDT-210924"]  // 交割合约

В соответствии с контрактным кодом, установленным здесь, внедряется графическая конфигурация. Эта графическая конфигурация определенно не может быть написана мертвой, поскольку вы также не знаете, что делать с разновидностями, делать несколько разновидностей (это определяется на основе значения arrDeliveryContractType и arrSwapContractType), поэтому графическая конфигурация возвращается функцией.

function createCfg(symbol) {
    var cfg = {
        extension: {
            // 不参于分组,单独显示,默认为分组 'group'
            layout: 'single', 
            // 指定高度,可以设置为字符串,"300px",设置数值300会自动替换为"300px"
            height: 300,      
            // 指定宽度占的单元值,总值为12
            col: 6
        },
        title: {
            text: symbol
        },
        xAxis: {
            type: 'datetime'
        },
        series: [{
            name: 'plus',
            data: []
        }]
    }

    return cfg
}

function main() {
    // 声明arrCfg
    var arrCfg = []                                    // 声明一个数组,用来存放图表配置信息
    _.each(arrSwapContractType, function(ct) {         // 迭代记录永续合约代码的数组,用合约名称XXX-USDT部分作为参数传给createCfg函数,构造图表配置信息,返回
        arrCfg.push(createCfg(formatSymbol(ct)[0]))    // createCfg返回的图表配置信息push进arrCfg数组
    })
    var objCharts = Chart(arrCfg)                      // 调用FMZ平台的图表函数Chart,创建图表控制对象objCharts
    objCharts.reset()                                  // 初始化图表内容
    
    // 以下省略.....
}

Далее мы готовим данные, используя консолидированный рыночный интерфейс OKEX:

USDT - постоянный контракт:

https://www.okex.com/api/v5/market/tickers?instType=SWAP

Примерно:

https://www.okex.com/api/v5/market/tickers?instType=FUTURES

Мы написали функцию, которая обрабатывает вызовы между этими двумя интерфейсами, и мы сделали данные в формате:

function getTickers(url) {
    var ret = []
    try {
        var arr = JSON.parse(HttpQuery(url)).data
        _.each(arr, function(ele) {
            ret.push({
                bid1: parseFloat(ele.bidPx),             // 买一价
                bid1Vol: parseFloat(ele.bidSz),          // 买一价的量
                ask1: parseFloat(ele.askPx),             // 卖一价
                ask1Vol: parseFloat(ele.askSz),          // 卖一价的量
                symbol: formatSymbol(ele.instId)[0],     // 格式成交易对
                type: "Futures",                         // 类型
                originalSymbol: ele.instId               // 原始合约代码
            })
        })
    } catch (e) {
        return null 
    }
    return ret 
}

Напишите еще один код, который будет работать с контрактом.

function formatSymbol(originalSymbol) {
    var arr = originalSymbol.split("-")
    return [arr[0] + "_" + arr[1], arr[0], arr[1]]
}

Все, что остается, - это использовать полученные данные для инерционной паровки, вычислить разницу, вывести график и т.д. Здесь проанализирована разница между контрактом 210 924 на второй квартал и контрактом на постоянный срок. Полный код:

// 临时参数
var arrSwapContractType = ["BTC-USDT-SWAP", "LTC-USDT-SWAP", "ETH-USDT-SWAP", "ETC-USDT-SWAP"]
var arrDeliveryContractType = ["BTC-USDT-210924", "LTC-USDT-210924", "ETH-USDT-210924", "ETC-USDT-210924"]
var interval = 2000

function createCfg(symbol) {
    var cfg = {
        extension: {
            // 不参于分组,单独显示,默认为分组 'group'
            layout: 'single', 
            // 指定高度,可以设置为字符串,"300px",设置数值300会自动替换为"300px"
            height: 300,      
            // 指定宽度占的单元值,总值为12
            col: 6
        },
        title: {
            text: symbol
        },
        xAxis: {
            type: 'datetime'
        },
        series: [{
            name: 'plus',
            data: []
        }]
    }

    return cfg
}

function formatSymbol(originalSymbol) {
    var arr = originalSymbol.split("-")
    return [arr[0] + "_" + arr[1], arr[0], arr[1]]
}

function getTickers(url) {
    var ret = []
    try {
        var arr = JSON.parse(HttpQuery(url)).data
        _.each(arr, function(ele) {
            ret.push({
                bid1: parseFloat(ele.bidPx), 
                bid1Vol: parseFloat(ele.bidSz), 
                ask1: parseFloat(ele.askPx), 
                ask1Vol: parseFloat(ele.askSz), 
                symbol: formatSymbol(ele.instId)[0], 
                type: "Futures", 
                originalSymbol: ele.instId
            })
        })
    } catch (e) {
        return null 
    }
    return ret 
}

function main() {
    // 声明arrCfg
    var arrCfg = []
    _.each(arrSwapContractType, function(ct) {
        arrCfg.push(createCfg(formatSymbol(ct)[0]))
    })
    var objCharts = Chart(arrCfg)
    objCharts.reset()
    
    while (true) {
        // 获取行情数据        
        var deliveryTickers = getTickers("https://www.okex.com/api/v5/market/tickers?instType=FUTURES")
        var swapTickers = getTickers("https://www.okex.com/api/v5/market/tickers?instType=SWAP")
        if (!deliveryTickers || !swapTickers) {
            Sleep(2000)
            continue
        }

        var tbl = {
            type : "table",
            title : "交割-永续差价",
            cols : ["交易对", "交割", "永续", "正对冲", "反对冲"],
            rows : []
        }
        
        var subscribeDeliveryTickers = []
        var subscribeSwapTickers = []
        _.each(deliveryTickers, function(deliveryTicker) {
            _.each(arrDeliveryContractType, function(symbol) {
                if (deliveryTicker.originalSymbol == symbol) {
                    subscribeDeliveryTickers.push(deliveryTicker)
                }
            })
        })
        _.each(swapTickers, function(swapTicker) {
            _.each(arrSwapContractType, function(symbol) {
                if (swapTicker.originalSymbol == symbol) {
                    subscribeSwapTickers.push(swapTicker)
                }
            })
        })
        
        var pairs = []
        var ts = new Date().getTime()
        _.each(subscribeDeliveryTickers, function(deliveryTicker) {
            _.each(subscribeSwapTickers, function(swapTicker) {
                if (deliveryTicker.symbol == swapTicker.symbol) {
                    var pair = {symbol: swapTicker.symbol, swapTicker: swapTicker, deliveryTicker: deliveryTicker, plusDiff: deliveryTicker.bid1 - swapTicker.ask1, minusDiff: deliveryTicker.ask1 - swapTicker.bid1}
                    pairs.push(pair)
                    tbl.rows.push([pair.symbol, deliveryTicker.originalSymbol, swapTicker.originalSymbol, pair.plusDiff, pair.minusDiff])
                    for (var i = 0 ; i < arrCfg.length ; i++) {
                        if (arrCfg[i].title.text == pair.symbol) {
                            objCharts.add([i, [ts, pair.plusDiff]])
                        }                        
                    }                    
                }
            })
        })

        LogStatus(_D(), "\n`" + JSON.stringify(tbl) + "`")        
        Sleep(interval)
    }
}

Диск работает

img

Побеги на минутку.

img

Посмотрите на разницу!img


Связанные

Больше

Орбитальные организмыЭто может быть прямой ход, следующий сезон OKEX может быть недостаточной ликвидностью или что-то в этом роде, когда он падает, когда падает, когда падает, когда падает.

Количественное обучениеЭто очень хорошо, очень хорошо.