Module de visualisation pour construire une stratégie de trading - compréhension avancée

Auteur:Je ne sais pas., Créé: 2022-12-13 14:11:36, Mis à jour: 2023-09-20 09:53:59

img

Module de visualisation pour construire une stratégie de trading - compréhension avancée

Nous avons appris le module de visualisation pour construire une stratégie de trading - première connaissance, et nous avons une compréhension conceptuelle de la construction de modules visuels et l'épissage, Ensuite, il est facile d'apprendre à utiliser d'autres modules. Il est possible de combiner des fonctions plus complexes.

Module de catégorie de négociation

Dans les précédents cours d'apprentissage et de test, nous avons été exposés à plusieurs modules de la catégorie "trading". Par exemple: Exchange Get Ticker module Échangez le module OHLC - Je ne sais pas.

Elles ont été utilisées et ne seront pas répétées ici.

Obtenez le nombre d'échanges

img

Lorsque vous écrivez des stratégies pour utiliser des robots de trading, vous pouvez ajouter plus d'un objet d'échange, comme des stratégies de couverture. Ou vous devez traverser (traverser signifie visiter les objets de change un par un) les objets de change pour accéder au marché. C'est là que le module pour obtenir le nombre d'échanges entre en jeu.

Nous pouvons imprimer le nombre d'échanges actuellement configurés dans une structure simple:

img

En fait, c'est comme appeler un tel code de stratégie JavaScript:

function main () {
    Log(exchanges.length)
}

Examinons les résultats de ce module combiné:

img img img

Nous pouvons voir que nous avons ajouté trois objets d'échange, représentant trois comptes d'échange différents, et le résultat de sortie du journal de backtest est 3.

2. Obtenez les noms des échanges

img

Lorsque vous ajoutez trois objets d'échange, la fenêtre déroulante affiche trois options. Apprenez un module de boucle dans le type de boucle à l'avance.

img

Apprenez un module de jugement de condition à l'avance:

img

Les conditions de jugement peuvent être écrites comme suit:

img

Nous utilisons le module de boucle pour traverser les noms d'échange ajoutés. Nous utilisons le module de jugement des conditions pour juger si le nombre de boucles actuel correspond au nom de l'échange à imprimer.

img

Résultats de l'opération de test antérieur:

img

Comme le code de stratégie JavaScript:

function main () {
    for (var i = 1 ; i <= exchanges.length ; i++) {
        if (i == 1) {
            Log(exchanges[0].GetName())
        } else if (i == 2) {
            Log(exchanges[1].GetName())
        } else {
            Log(exchanges[2].GetName())
        }
    }
}

3. Obtenez la paire de négociation actuelle de l'échange

img

Un exemple simple est d'obtenir la paire de négociation du premier objet d'échange actuellement défini et de l'assigner à la variable texte (créée à l'avance dans la catégorie de variable).

img

Résultats des tests antérieurs:

img img img

Si vous appelez le code de stratégie JavaScript:

function main () {
    var text = exchange.GetCurrency()
    Log(text)
}

Module de commande

img

Ce module est très important pour l'opération de commande. La première position de tenon (concave) est intégrée avec une variable de prix, qui est utilisée pour spécifier le prix de commande. Vous pouvez également entrer une valeur fixe directement. La deuxième position du tenon (concave) est intégrée à la variable quantité de commande, qui est utilisée pour spécifier la quantité de commande.

Par exemple, nous épluchons un exemple de placement d'un ordre d'achat en ajoutant un prix fluctuant de 10 yuans basé sur le dernier prix des données actuelles du marché des ticks, avec la quantité d'ordre définie à 0,1 pièces, et imprimons l'identifiant de l'ordre.

img

Résultats de l'opération de test antérieur:

img

Comme le code de stratégie JavaScript:

function main () {
    var id = exchange.Buy(_C(exchange.GetTicker).Last + 10, 0.1)
    Log(id)
}

Obtenez les ordres en attente du module de paire de négociation actuel

img

Ce module renvoie tous les ordres en attente dans l'état inachevé de la paire de négociation en cours. Il renvoie une structure de liste (array), qui peut être traitée par le module de type de liste (opération de traversée, etc.). Par exemple, nous avons légèrement modifié le module d'ordre de l'exemple ci-dessus [4] et changé le prix de 10 yuans ajoutés lors de la passation d'une commande à moins 10 yuans. Ensuite, nous utilisons le module Obtenir les ordres en attente de la paire de négociation en cours pour obtenir la liste des ordres en attente de remplissage. Afin d'éviter l'impact sur l'observation finale du backtest en raison des ordres remplis sur le marché suivant, après l'exécution du module Obtenir des ordres en attente de la paire de négociation en cours, nous imprimons la liste des ordres et utilisons le module Lancer une exception immédiatement pour arrêter le programme.

img

Les tests antérieurs montrent que:

img

Le prix de l'ordre d'achat était 10 yuans inférieur au dernier prix à ce moment-là, il ne sera donc pas rempli immédiatement. Ensuite, obtenez la commande dans le statut de transaction en attente et imprimez-la. Enfin, une exception est lancée pour arrêter le programme.

L'ensemble du module assemblé est comme un appel à la stratégie JavaScript:

function main () {
    var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1)
    Log(id)
    Log(exchange.GetOrders())
    throw "stop"
}

6. annuler le module de commande

img

Ce module est utilisé pour annuler la commande.

Il existe de nombreux scénarios qui nécessitent de telles opérations lors de l'écriture de stratégies:

Annuler toutes les commandes en cours.

Il ne fait aucun doute que le module Cancelle l'ordre doit être utilisé.

Tout d'abord, afin de tester l'annulation de toutes les commandes, il n'est pas évident de passer une commande. Nous commençons à passer 2 commandes, leurs prix et quantités sont différents pour distinguer les deux commandes.

img

Utilisez le module Traverse every element in the list dans le module Loop pour traverser les ordres dans la liste actuelle des ordres en attente.

img

Au cours de la traversée, chaque ordre récupéré est attribué une valeur à l'ordre du module variable (créé dans le type de module variable, comme indiqué ci-dessous:)

img

Utilisez le module Util:

img

Retirez l'identifiant de commande, passez-le à la position tenon (concave) du module Annuler commande, et le module Annuler commande exécute l'annulation de commande.

Opération de contre-test:

img

Utilisez la description de stratégie JavaScript:

function main () {
    var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1)
    Log(id)
    var id2 = exchange.Buy(_C(exchange.GetTicker).Last - 12, 0.2)
    Log(id2)
    var orders = exchange.GetOrders()
    Log(orders)
    for (var i in orders) {
        var order = orders[i]
        Log(exchange.CancelOrder(order.Id))
    }
}

7. Module pour obtenir les détails d'une commande basée sur son ID de commande

img

La position de tenon (concave) du module est connectée à un module variable d'identification de commande et les détails de commande peuvent être renvoyés.

img

Notez l'ordre retourné après l'exécution:

img

En comparaison avec les résultats d'exécution de l'exemple [5], on constate que la commande imprimée est une information de commande distincte sans parenthèses []. Parce que l'exemple [5] renvoie une liste, mais cet exemple renvoie une information d'ordre séparée (obtenue sur la base du module de variable ID sur la position du tenon passée par le module).

L'exemple ci-dessus est similaire à l'exécution de la stratégie JavaScript:

function main () {
    var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1)
    Log(exchange.GetOrder(id))
}

8. Module de négociation de contrats à terme

Nous apprendrons les modules ci-dessus un par un et nous définirons l'échange de test comme des contrats à terme sur matières premières.

Paramètres de vérification:

img

L'exemple suivant effectue un backtest basé sur les paramètres.

  • Jugez le module d'état de la connexion entre les contrats à terme sur matières premières CTP et le serveur de la société de contrats à terme

img

Les contrats à terme sur matières premières ont une heure d'ouverture et une heure de fermeture.

  • Module de contrat de série

img

Lorsque l'objet de l'échange est configuré comme un échange de contrats à terme, si l'échange n'établit pas de contrat et obtient directement les informations du marché, une erreur sera signalée.

Nous avons défini le contrat comme MA909, le principal contrat de méthanol actuellement.

De cette façon, on obtient la dernière valeur de prix sur le marché actuel du contrat MA909.

  • Mettre en place le module de direction des ordres pour le trading à terme

Dans le module d'exécution des ordres

img

La direction de l'ordre doit être spécifiée, car les contrats à terme ont: acheter: ouvrir des positions longues vendre: positions courtes ouvertes closebuy: fermeture de positions longues La valeur de l'échange est la valeur de l'échange de l'échange. Quatre directions (il existe deux autres directions pour les contrats à terme sur matières premières: closebuy_today pour la clôture des positions longues aujourd'hui et closeesell_today pour la clôture des positions courtes aujourd'hui).

Par exemple, si le module d'ordre est défini comme buy, il existe deux significations d'ouverture de positions longues et de fermeture de positions courtes, ce qui est ambigu. Par conséquent, le module Définir la direction de l'ordre pour la négociation de contrats à terme est nécessaire pour définir une direction claire de l'ordre.

img

Affichage des tests arrière:

img

Comme le code de stratégie JavaScript:

function main () {
    while (true) {
        if (exchange.IO("status")) {
            exchange.SetContractType("MA909")
            Log(exchange.GetTicker().Last)
            exchange.SetDirection("buy")
            Log(exchange.Buy(1000, 1))
            throw "stop"
        } else {
            Log("The commodity futures front-end processor is not connected")
        }
        Sleep(1000)
    }
}

9. Module de négociation de contrats à terme sur devises numériques

L'utilisation des contrats à terme sur devises numériques est fondamentalement la même que celle des contrats à terme sur matières premières dans [8] ci-dessus.

  • À titre d'exemple, le code du contrat peut être:
    • cette_semaine: cette semaine
    • next_week: la semaine prochaine
    • trimestre: trimestre
    • échange: perpétuel
  • BitMEX:
    • XBTUSD
    • ETHUSD
  • Module de levier défini

img

Il est utilisé pour définir l'effet de levier des contrats à terme sur devises numériques.

#Note: Backtesting is not supported.

Comme une stratégie JavaScript:

function main () {
    exchange.SetMarginLevel(10)
}

Exemples de stratégies de visualisation:

https://www.fmz.com/strategy/121404 https://www.fmz.com/strategy/129895 https://www.fmz.com/strategy/123904 https://www.fmz.com/strategy/122318Pour plus de stratégies, veuillez consulter:https://www.fmz.com/square

Autres articles de cette série


Relationnée

Plus de