La transaction quantifiée dans le cercle monétaire est une nouveauté - qui vous rapproche de la quantification dans le cercle monétaire (7).

Auteur:Le petit rêve, Créé: 2021-06-09 14:30:43, Mis à jour: 2023-09-19 21:45:29

img

Le cercle de monnaie quantifier les transactions de la nouvelle apparition de la couleur vous rapproche du cercle de monnaie quantifier (7).

Dans le dernier article, nous avons réfléchi ensemble et conçu une stratégie simple de grille multicolore. Ensuite, nous avons continué à apprendre sur la voie de la quantification des transactions. Dans le présent article, nous allons explorer une stratégie un peu plus complexe - la conception d'une stratégie de couverture. Dans le présent article, nous avons conçu une stratégie de couverture multicolore.

Les couvertures à terme

La couverture à long terme consiste simplement à faire un contrat supplémentaire, à le vider et à attendre trois situations pour obtenir un solde (plus ou moins):

  • Les gains et les pertes, les pertes et les pertes, les gains et les pertes, les pertes et les pertes, les pertes et les pertes, les pertes et les pertes, les pertes et les pertes, les pertes et les pertes.
  • Il y a des gens qui gagnent beaucoup d'argent en faisant des pertes, des gens qui gagnent de l'argent en ne faisant rien, des gens qui gagnent plus que ce qu'ils gagnent, des gens qui gagnent plus que ce qu'ils perdent.
  • Celui qui gagne plus gagne plus, celui qui ne gagne rien gagne aussi, et il veut encore gagner!

Dans d'autres cas, il est préférable de dépasser, de s'arrêter ou de continuer à augmenter vos positions.

设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开仓,搞反了就是相反的了),当然这个是理论上的,实际上还要考虑手续费、滑点等因素。

Puisque les échanges de crypto-monnaie ont des contrats à taux d'échange, il y a aussi des contrats à durée indéterminée. Et le prix des contrats à durée indéterminée est toujours plus proche du prix actuel en raison des frais de fonds. Nous choisissons alors d'utiliser des contrats à taux d'échange et des contrats à durée indéterminée. Les contrats à durée indéterminée choisissent un contrat à plus long terme, ce qui évite la mise en place fréquente de contrats à risque.

Il y a une différence de prix entre les différentes variétés.

Une fois que vous êtes familiarisé avec les principes de base, vous pouvez commencer à écrire des stratégies à la main sans précipitation.

Nous sommes basésLes accords OKEXPour la conception, il est très simple de dessiner des graphiques sur FMZ, et il est très facile de dessiner des graphiques avec des fonctions bien emballées.Tableaux de bordLes fonctions graphiques de l'API sont décrites comme suit:https://www.fmz.com/api#chart...

Comme il s'agit de plusieurs variétés, il faut d'abord déterminer la différence entre ces variétés avant de les imprimer.

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"]  // 交割合约

La configuration du graphique doit être initialement configurée en fonction du code de contrat qui est défini ici. Cette configuration du graphique ne peut certainement pas être écrite morte, car vous ne savez pas non plus quelle variété faire, faire plusieurs variétés (ce qui est déterminé en fonction de la valeur de l'arrDeliveryContractType et de l'arrSwapContractType), donc la configuration du graphique est retournée par une fonction.

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()                                  // 初始化图表内容
    
    // 以下省略.....
}

La prochaine chose que nous faisons pour préparer les données est d'utiliser l'interface de marché agrégée OKEX:

Les contrats permanents de USDT:

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

Le taux d'échange de USDT est de:

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

Nous avons écrit une fonction pour traiter les appels entre ces deux interfaces, et nous avons transformé les données en un format:

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 
}

Ensuite, écrivez une fonction qui traite le code du contrat.

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

Il ne reste plus qu'à faire l'appariement itératif des données obtenues, calculer les différences, produire des graphiques, etc. Le prix de l'offre est le même que celui du contrat de deuxième trimestre 210 924 et celui du contrat permanent. Le code complet est:

// 临时参数
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)
    }
}

Le disque fonctionne

img

Je vais courir.

img

Il y a une différence de prix.img


Relationnée

Plus de

Les organismes de l'orbiteIl est possible que la prochaine saison de l'OKEX ne soit pas suffisamment liquide ou quelque chose comme ça, et qu'elle s'effondre quand elle tombe, et s'effondre quand elle s'effondre.

La petite cuisine quantiqueC'est très bien, c'est très bien.