0
Suivre
1
Abonnés

Réflexion sur les mouvements d'actifs grâce à une stratégie de couverture des contrats

Créé le: 2020-10-20 16:48:32, Mis à jour le: 2023-09-26 20:59:29
comments   2
hits   2377

Réflexion sur les mouvements d’actifs grâce à une stratégie de couverture des contrats

Réflexion sur les mouvements d’actifs grâce à une stratégie de couverture des contrats

Il y a eu beaucoup de nouvelles dans le monde des crypto-monnaies ces derniers temps, et les nouvelles sur les échanges circulent également partout. Pendant un certain temps, tous les amis des cryptomonnaies étaient en panique, inquiets pour la sécurité de leurs actifs blockchain. Il existe de nombreuses petites publicités dans divers groupes de crypto-monnaie offrant des remises de 10 % ou 20 % sur les pièces d’occasion inutilisées. Il existe de nombreuses personnes qui recherchent diverses stratégies pour « obtenir une perte d’argent constante et un profit constant en même temps ». De nombreux amateurs de pièces de monnaie ont également plaisanté : « S’il existe un moyen stable de gagner de l’argent, pourquoi avons-nous besoin d’un moyen stable d’en perdre ! » En effet, les choses qui font de l’argent régulièrement et qui en perdent régulièrement sontmoney printer, et ce n’est pas facile à trouver. Pardonnez mon mauvais anglais.

Il existe néanmoins une certaine instabilité, par exemple lorsque, grâce à la couverture des contrats, il est possible de réaliser des pertes et des bénéfices en même temps.

Stratégie DEMO

/*backtest
start: 2020-09-30 00:00:00
end: 2020-10-19 00:00:00
period: 1d
basePeriod: 1m
exchanges: [{"eid":"Futures_OKCoin","currency":"BTC_USD"},{"eid":"Futures_HuobiDM","currency":"BTC_USD"}]
*/

var step = 20    // 加仓价格步长

function main() {
    var pos1 = []
    var pos2 = []
    var ct = "quarter"                         // 例如用季度合约
    exchanges[0].SetContractType(ct)
    exchanges[1].SetContractType(ct)
    var diff = 0

    while (true) {
        var r1 = exchanges[0].Go("GetDepth")   // A交易所
        var r2 = exchanges[1].Go("GetDepth")   // B交易所
        var depth1 = r1.wait()
        var depth2 = r2.wait()

        if(depth1.Bids[0].Price - depth2.Asks[0].Price > diff) {
            if(pos1.length == 0 && pos2.length == 0) {
                var info1 = $.OpenShort(exchanges[0], ct, 10)
                var info2 = $.OpenLong(exchanges[1], ct, 10)
                pos1 = _C(exchanges[0].GetPosition)
                pos2 = _C(exchanges[1].GetPosition)
                diff = depth1.Bids[0].Price - depth2.Asks[0].Price
            } else if(depth1.Bids[0].Price - depth2.Asks[0].Price > diff + step) {
                var info1 = $.OpenShort(exchanges[0], ct, 10)
                var info2 = $.OpenLong(exchanges[1], ct, 10)
                pos1 = _C(exchanges[0].GetPosition)
                pos2 = _C(exchanges[1].GetPosition)
                diff = depth1.Bids[0].Price - depth2.Asks[0].Price
            }
        }
        
        if(pos1.length != 0 && pos1[0].Profit < -0.001) {
            var info1 = $.CoverShort(exchanges[0], ct, pos1[0].Amount)
            var info2 = $.CoverLong(exchanges[1], ct, pos2[0].Amount)
            pos1 = _C(exchanges[0].GetPosition)
            pos2 = _C(exchanges[1].GetPosition)
            diff = 0
        }
        LogStatus(_D(), diff)
        Sleep(500)
    }
}

Réflexion sur les mouvements d’actifs grâce à une stratégie de couverture des contrats

Réflexion sur les mouvements d’actifs grâce à une stratégie de couverture des contrats

Logique de la stratégie : La stratégie commence par initialiser les variables de position pos1 et pos2 sous forme de tableaux vides. La stratégie entre dans la boucle principale et, au début de chaque boucle, elle obtient les données de profondeur (données du carnet d’ordres) des contrats des deux bourses et calcule la différence de prix. Si la différence de prix continue de s’étendre au-delà de « la dernière différence de prix plus un pas », continuez à vous couvrir et à augmenter vos positions. Lors du maintien d’une position, si la perte de la première position d’échange dépasse une certaine valeur (par exemple : -0,001), la position sera fermée. Ce processus est répété à plusieurs reprises.

Le principe est en fait très simple, c’est-à-dire que si la différence de prix est importante, on s’oppose au hedging. Attendez que la bourse sur laquelle vous prévoyez de perdre de l’argent enregistre une perte, puis fermez la position. Si le spread continue de s’élargir, continuez à augmenter la position pour vous couvrir jusqu’à ce que la bourse sur laquelle vous prévoyez de perdre de l’argent enregistre une perte. Les paramètres les plus importants sont : le montant de la perte requise pour fermer une position, la taille de l’étape de différence de prix pour l’ajout de positions et le montant de la couverture.

La stratégie est relativement simple et ne sert qu’à vérifier l’idée. Elle n’est pas applicable dans le trading réel. Il reste encore de nombreuses questions à prendre en compte dans le trading réel, comme par exemple si le contrat à négocier est basé sur une devise ou sur U, si les multiplicateurs des différents contrats dans les bourses A et B sont les mêmes, etc.

De cette façon, si une bourse perd de l’argent, la partie perdue deviendra à peu près le profit d’une autre bourse (en raison de la différence de prix, il peut y avoir des pertes de couverture, c’est-à-dire que la perte est supérieure au profit). La stratégie utilise une bibliothèque de trading à terme.$.CoverShort,$.OpenShortVoici les fonctions d’interface du modèle. Pour effectuer un backtest et exécuter la DÉMO ci-dessus, vous devez référencer cette bibliothèque de classes.

Le prototype de stratégie ci-dessus n’est qu’une exploration très simple. Il peut y avoir plus de détails à prendre en compte dans le cadre d’une opération réelle. Par exemple, le montant de l’augmentation de position peut être conçu de manière à être incrémental. Il ne s’agit là que d’un point de départ. Des stratégies similaires devraient pouvoir être optimisées. Les experts sont invités à donner leur avis.