Les ressources ont été chargées... Je charge...

Réflexions sur les mouvements d'actifs par le biais d'une stratégie de couverture contractuelle

Auteur:FMZ~Lydia, Créé: 2022-12-19 16:36:12, Mis à jour: 2023-09-20 10:38:30

img

Réflexions sur les mouvements d'actifs par le biais d'une stratégie de couverture contractuelle

Récemment, il y a eu beaucoup d'actualités sur le marché de la monnaie numérique et l'échange. Pendant un certain temps, tous les amis de la monnaie étaient dans un état de panique, préoccupés par la sécurité de leurs actifs blockchain. Il y a aussi de nombreuses petites annonces de 10% et 20% de réduction pour les devises d'occasion inactives dans divers groupes de marché de la monnaie. Il existe de nombreux types de stratégies de chercher à perdre de l'argent régulièrement tout en gagnant de l'argent régulièrement. Il est vrai que faire des profits stables et perdre de l'argent stable sont à la foismoney printer, ce qui n'est pas facile à trouver. Pardonnez-moi pour mon mauvais anglais.

Cependant, il y en a encore qui sont instables. Par exemple, grâce à la couverture contractuelle, nous pouvons faire des profits tout en faisant des pertes autant que possible.

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    // Step length of adding position price

function main() {
    var pos1 = []
    var pos2 = []
    var ct = "quarter"                         // For example, quarterly contract
    exchanges[0].SetContractType(ct)
    exchanges[1].SetContractType(ct)
    var diff = 0

    while (true) {
        var r1 = exchanges[0].Go("GetDepth")   // Exchange A
        var r2 = exchanges[1].Go("GetDepth")   // Exchange 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)
    }
}

img

La 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. Au début de chaque boucle, les données de profondeur (données du carnet de commandes) des contrats des deux bourses sont obtenues pour calculer la différence de prix. Si la différence de prix continue de s'étendre et au-delà de la différence de prix dernière plus une longueur d'étape, continuez la couverture et l'ajout de positions. Lorsque la position est maintenue, il est détecté que la perte de position du premier échange dépasse une certaine valeur (comme -0,001), puis fermez la position. Répétez de cette façon.

Le principe est très simple, c'est-à-dire que lorsque la différence de prix est grande, alors dé-couvrir. En attendant la perte de la perte attendue de la position de change, fermer la position. Si la différence de prix continue de s'étendre, continuer à ajouter des positions à couvrir jusqu'à la perte attendue de la perte de position de change. Les paramètres importants sont: le montant de la perte pour fermer la position, la longueur d'étape de l'ajout de la différence de prix de la position et le montant de couverture.

La stratégie est plutôt rudimentaire, juste pour vérifier l'idée, le vrai bot n'est pas disponible. Il y a encore beaucoup de questions à considérer pour un vrai bot, par exemple, si le contrat à négocier est standard de monnaie ou standard U, et si les multiplicateurs des différents contrats dans les échanges A et B sont les mêmes.

De cette façon, une bourse perdra de l'argent, et la partie de perte deviendra la partie de profit d'une autre bourse (différence de prix, il peut y avoir une perte de couverture, c'est-à-dire que la perte est supérieure au profit).$.OverShort, $.OpenShort, ce sont les fonctions d'interface du modèle. Pour exécuter la DEMO ci-dessus, vous devez faire référence à cette bibliothèque de classes.

Le prototype de stratégie ci-dessus n'est que l'exploration la plus simple, et il peut y avoir plus de détails à considérer dans l'opération réelle, par exemple, le nombre de positions peut être conçu pour être incrémentiel.


Relationnée

Plus de