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

Les structures

Le commerce

Structure des registres des opérations de marché.

L'identifiant de l'enregistrement de transaction sur le marché ou, si l'interface d'échange ne fournit pas d'identifiant, un horodatage pour le remplir. Identifiant chaîne L'horodatage en millisecondes. Le temps Numéro Prix de la transaction. Le prix Numéro Montant de la transaction. Montant Numéro Le type de commande, voir {@var/ORDER_TYPE/ORDER_TYPE_BUY ORDER_TYPE_BUY}, {@var/ORDER_TYPE/ORDER_TYPE_SELL ORDER_TYPE_SELL}. Le type Numéro

La fonction exchange.GetTrades( renvoie un tableau de Trade ou un tableau vide.

{@fun/Marché/échange.GetTrades échange.GetTrades}

Les tiques

La structure du marché.

Les données originales renvoyées par l'interface d'échange, aucun attribut de ce type n'est disponible pour le backtesting. Les informations objet LeSymbolle champ est le code de la variété de négociation défini par la plateforme FMZ.

  • Pour l'objet d'échange au comptant, le format duSymbolla valeur du champ (à titre d'exemple) est:BTC_USDT, indiquant la paire de négociation au comptant BTC_USDT.
  • Pour l'objet d'échange de contrats à terme, le format duSymbolla valeur du champ (à titre d'exemple) estBTC_USDT.swap, qui représente le contrat perpétuel de propriété USDT pour BTC.
  • Pour les objets d'échange de contrats à terme, le format duSymbolla valeur du champ est (par exemple):BTC_USDT.BTC-240108-40000-C, qui représente un contrat d'option d'achat de BTC en USDT avec une date d'exercice du 8 janvier 2024 et un prix d'exercice de 40 000.

Le symbole chaîne Le prix le plus élevé, ou si l'interface d'échange ne fournit pas un prix le plus élevé de 24 heures, utilisez le prix de vente unique pour remplir. Très haut Numéro Le prix le plus bas, ou si l'interface d'échange ne fournit pas un prix le plus bas de 24 heures, utilisez le prix d'achat pour remplir. Faible Numéro Le moment présent vend à un prix. Vendre Numéro Le moment présent a un prix. Acheter Numéro Le dernier prix de transaction. Le dernier Numéro Prix d'ouverture de la période, si l'interface de change ne fournit pas un prix d'ouverture de la période de 24 heures, le prix courant est utilisé pour remplir. Ouvert Numéro Si l'interface de change ne fournit pas de telles données, elle sera remplie avec les données disponibles dans l'interface de change, par exemple, le montant de la transaction peut être en devises cotées. Le volume Numéro Une horodatage de niveau milliseconde. Le temps Numéro Les positions, la plupart des interfaces d'échange ne fournissent pas ces données et la valeur est 0 lorsque ces données ne sont pas prises en charge. Le secteur privé Numéro

La fonction exchange.GetTicker() renvoie une structure de ticker. Pour les contrats d'options, leexchange.GetTicker()L'appel de la fonction est sujet à des erreurs. Parce que la liquidité du marché des contrats d'options est généralement faible, il n'y a souvent pas d'ordres en attente pour le premier achat ou la première vente.Tickerchamp de structureBuyouSellest 0, une alerte d'erreur sera déclenchée.

{@fun/Market/exchange.GetTicker échange.GetTicker}, {@fun/Market/exchange.GetTickers échange.GetTickers} Je vous présente une liste de tous les jeux qui ont été joués.

Enregistrement

La structure de la barre K-Line, la structure standard OHLC, est utilisée pour tracer des lignes K et des indicateurs pour le calcul et l'analyse.

Marque d'heure au niveau des millisecondes, pour une structure d'enregistrement dont la valeur de l'attribut Time est l'horodatage de début de la période de cette barre de ligne K. Le temps Numéro Le prix d'ouverture. Ouvert Numéro Le prix le plus élevé. Très haut Numéro Le prix le plus bas. Faible Numéro Prix de clôture. À proximité. Numéro valeur de position, la plupart des interfaces d'échange ne fournissent pas ces données, la valeur est 0 lorsque ces données ne sont pas prises en charge. Le secteur privé Numéro En principe, le montant de la transaction au comptant est exprimé en monnaie de base et le montant de la transaction contractuelle en nombre de contrats. Si l'interface d'échange ne fournit pas de telles données, elle sera remplie avec les données existantes de l'interface d'échange, par exemple, le montant de la transaction en devises. Le volume Numéro

La fonction exchange.GetRecords() renvoie une matrice d'enregistrements ou une matrice vide. Chaque structure d'enregistrement représente une barre de ligne K, c'est-à-dire une barre de ligne K.

{@fun/Marché/échange.GetRecords échange.GetRecords}

Les ordres

La structure de l'ordre.

Les données d'origine de la réponse de l'interface d'échange, aucun attribut de ce type n'est disponible pour le backtesting. Les informations objet LeSymbolle champ est le code du produit de négociation défini par la plateforme FMZ et son format est conforme à laSymbolle champ de la structure {@struct/Ticker Ticker}.

  • Pour les objets d'échange au comptant, le format duSymbolla valeur du champ est (par exemple):BTC_USDT, indiquant la paire de négociation au comptant BTC_USDT.
  • Pour les objets d'échange de contrats à terme, le format duSymbolla valeur du champ est (par exemple):BTC_USDT.swap, qui représente le contrat perpétuel standard USDT de BTC.

Le symbole chaîne Order Id, cet attribut se compose du code de produit de l'échange et de l'identifiant d'ordre d'origine de l'échange, séparés par des virgules en anglais.Idformat de la paire de négociation au comptantETH_USDTL'ordre d'échange OKX est le suivant:ETH-USDT,1547130415509278720Je suis désolée. Identifiant chaîne Le prix de l'ordre, notez que cet attribut peut être de 0 ou -1 pour les ordres de marché. Le prix Numéro Le nombre d'ordres passés, notez que cet attribut d'un ordre de marché peut être un montant et non une devise. Montant Numéro Le nombre de transactions, éventuellement marqué par 0 si l'interface d'échange ne fournit pas ces données. Montant de la transaction Numéro Prix moyen de transaction, notez que certains échanges ne fournissent pas ces données. Cet attribut est défini à 0 s'il n'est pas disponible et ne peut être calculé. Prix moyen Numéro Le statut de la commande, voir {@var/ORDER_STATE/ORDER_STATE_PENDING ORDER_STATE_PENDING}, {@var/ORDER_STATE/ORDER_STATE_CLOSED ORDER_STATE_CLOSED}, {@var/ORDER_STATE/ORDER_STATE_CANCELED ORDER_STATE_CANCELED}, {@var/ORDER_STATE/ORDER_STATE_UNKNOWN OR_ORDER_STATE_UNKNOWN}. Le statut Numéro Le type de commande, voir {@var/ORDER_TYPE/ORDER_TYPE_BUY ORDER_TYPE_BUY}, {@var/ORDER_TYPE/ORDER_TYPE_SELL ORDER_TYPE_SELL}. Le type Numéro Pour la direction d'ouverture et de clôture des ordres de marché, voir {@var/ORDER_OFFSET/ORDER_OFFSET_OPEN ORDER_OFFSET_OPEN}, {@var/ORDER_OFFSET/ORDER_OFFSET_CLOSE ORDER_OFFSET_CLOSE}. Compte rendu Numéro Cet attribut dans les ordres au comptant est""Dans un ordre de contrat, cet attribut est le code du contrat spécifique. Type de contrat chaîne

LeOrderLa structure de commande peut être retournée par leexchange.GetOrder()etexchange.GetOrders()Les fonctionsexchange.GetOrders()fonction renvoie un tableau de laOrderstructure ou un tableau vide. S'il n'y a pas d'ordre inachevé, il renvoie[], qui est un tableau vide.Statuspropriété de laOrderLa structure d'ordre peut être directement comparée à des constantes telles queORDER_STATE_PENDINGpour déterminer si elles sont égales et ainsi déterminer le statut de la commande.

Pour le mode de position unidirectionnelle, lorsqu'il est impossible de déterminer si l'ordre est un ordre de clôture (de réduction), leOffsetle champ est réglé sur la direction d'ouverture par défaut, c'est-à-direORDER_OFFSET_OPEN.

{@fun/Trade/exchange.GetOrder exchange.GetOrder}, {@fun/Trade/exchange.GetOrders exchange.GetOrders}, {@fun/Trade/exchange.GetHistoryOrders exchange.GetHistoryOrders}, {@fun/Trade/exchange.GetHistoryOrders exchange.GetHistoryOrders}, {@fun/Trade/exchange.GetHistoryOrders exchange.GetOrder}, {@fun/Trade/exchange.GetHistoryOrders exchange.GetHistoryOrders}, {@fun/Trade/exchange.GetHistoryOrders exchange.GetHistoryOrders}, {@fun/Trade/exchange.GetHistoryOrders exchange.GetHistoryOrders}, {@fun/Trade/exchange.GetHistoryOrders exchange.GetHistoryOrders}, {@fun/Trade/exchange.GetHistoryOrders exchange.GetHistoryOrders}, {@fun/Trade/exchange/

Carnet de commandes

Structure des commandes en profondeur de marché.

Le prix. Prix Numéro Le montant. Montant Numéro

La fonction GetDepth (()) renvoie une structure de données dans laquelle les valeurs d'attributs des offres, des demandes sont des tableaux OrderBook.

{@fun/Market/exchange.GetDepth exchange.GetDepth}, {@struct/Depth Depth} Je suis désolé, mais je ne peux pas le faire.

Profondeur

Structure de la profondeur du marché.

Le tableau des ordres de vente, c'est-à-dire le tableau du livre des ordres, est trié par prix du plus bas au plus élevé, et la première structure du livre des ordres dans le tableau a le prix le plus bas. Il demande séquence Le tableau des ordres d'achat, c'est-à-dire le tableau du livre des ordres, est trié par prix du plus haut au plus bas, et la première structure du livre des ordres du tableau a le prix le plus élevé. Les offres séquence Une horodatage au niveau des millisecondes. Le temps Numéro

La fonction exchange.GetDepth (()) renvoie une structure de profondeur.

{@fun/Market/exchange.GetDepth exchange.GetDepth}, {@struct/OrderBook OrderBook}, {@struct/OrderBook}, {@struct/OrderBook OrderBook}, {@struct/OrderBook}, {@struct/OrderBook}, {@struct/OrderBook}, {@struct/OrderBook}, {@struct/OrderBook}, {@struct/OrderBook}, {@struct/OrderBook}, {@struct/OrderBook}, {@struct/OrderBook}, {@struct/OrderBook}, {@struct/OrderBook}, {@struct/OrderBook}, {@struct/OrderBook}, {@struct/OrderBook}, {@struct/OrderBook}, {@struct/OrderBook}

Compte

La structure des informations relatives au compte.

Les données originales renvoyées par l'interface d'échange, aucun attribut de ce type n'est disponible pour le backtesting. Les informations objet Le nombre de monnaies libellées disponibles, au comptant, si la paire de négociation est BTC_USDT, le solde désigne le nombre de USDT actuellement disponibles. Dans le contrat U-standard, le solde désigne le montant de la marge disponible (USDT, quoteCurrency). Le solde Numéro La valeur des actifs gelés lorsque l'ordre n'est pas exécuté Le solde est gelé. Numéro Le nombre de monnaies disponibles pour le trading, au comptant, si la paire de trading est BTC_USDT, Stocks fait référence au nombre de BTC actuellement disponibles. Stocks fait référence au nombre de marges disponibles (monnaie, monnaie de base) dans un contrat basé sur la monnaie. Les stocks Numéro La valeur des actifs gelés lorsque l'ordre n'est pas exécuté Les stocks surgelés Numéro Seuls les objets d'échange de contrats à terme supportent ce champ.Equityle champ est le total des fonds propres de la marge du compte à terme dans le cadre du contrat en cours. Si l'interface de change ne fournit pas de données pertinentes, ce champ est égal à 0.

Les fonds propres Numéro Ce champ est uniquement pris en charge par les objets d'échange de contrats à terme.UPnLle champ est la somme desles bénéfices et pertes non réalisésde toutes les positions ouvertes par la marge du compte à terme selon les paramètres du contrat en cours.

L'UPNL Numéro

La fonction exchange.GetAccount () renvoie une structure de compte. Les données dans la structure renvoyée dépendent de la paire de trading actuellement définie, code de contrat.

{@fun/Account/exchange.GetAccount échange.GetAccount} Je ne sais pas si vous êtes d'accord.

Actifs

La structure des informations relatives aux actifs en devises spécifiques.

Les noms définis par les bourses pour les actifs de crypto-monnaie, qui peuvent varier d'un échange à l'autre pour la même crypto-monnaie, par exempleBTCpeut être appeléXBTsur certains échanges. Monnaie chaîne Le solde disponible des actifs en devises. Montant Numéro Le nombre d'actifs gelés dans la devise. Nombre congelé Numéro

LeFrozenAmountLa partie des actifs en devises peut inclure les actifs verrouillés pour les ordres non exécutés et la partie de la marge verrouillée pour les positions à terme.

{@fun/Account/exchange.GetAssets échange.GetAssets} Je suis désolé, mais je ne peux pas.

Position de l'appareil

Structure des informations relatives aux positions du contrat.

Les données originales renvoyées par l'interface d'échange, aucun attribut de ce type n'est disponible pour le backtesting. Les informations objet LeSymbolle champ est le code du produit de négociation défini par la plateforme FMZ et son format est conforme à laSymbolle champ de la structure {@struct/Ticker Ticker}.

  • Pour les objets d'échange au comptant, le format duSymbolla valeur du champ est (par exemple):BTC_USDT, indiquant la paire de négociation au comptant BTC_USDT.
  • Pour les objets d'échange de contrats à terme, le format duSymbolla valeur du champ est (par exemple):BTC_USDT.swap, qui représente le contrat perpétuel standard USDT de BTC.

Le symbole chaîne Taille de la barre de position, remplie par calcul si l'interface d'échange ne fournit pas ces données, elle peut être inexacte. Niveau de marge Numéro La taille de la position, qui est généralement un entier positif (nombre de numéros de contrat).Notez que les spécifications du contrat telles que les multiplicateurs de contrat, les valeurs, etc. peuvent différer d'un échange à l'autre. Montant Numéro Quantité de blocage de position, nombre de positions temporairement gelées lorsque l'ordre clos n'est pas exécuté. Nombre congelé Numéro Prix moyen de la position, qui est en principe le prix moyen de la position dans son ensemble (ne participe pas au règlement). Le prix Numéro Le bénéfice/perte flottant de la position est en principe le bénéfice/perte non réalisé de la position, si les données ne sont pas fournies par l'interface de change, elles seront remplies par d'autres données de profit/perte de l'interface de change. Résultats Numéro Le type de position, voir {@var/POSITION_DIRECTION/PD_LONG PD_LONG}, {@var/POSITION_DIRECTION/PD_SHORT PD_SHORT}. Le type Numéro Code du contrat, voir la description de la fonction {@fun/Futures/exchange.SetContractType exchange.SetContractType} pour plus de détails. Type de contrat chaîne La marge occupée par la position, remplie de 0, si l'interface d'échange ne fournit pas ces données. Marge Numéro

La fonction exchange.GetPositions( renvoie un tableau de positions ou un tableau vide. Pour les contrats à terme de crypto-monnaie, il est important de noter que le tableau de la structure de position renvoyé par la fonction Exchange.GetPositions(). Pour les attributs FrozenAmount, Profit et Marge dans la structure de données de position, comme les données fournies par l'échange ne sont pas uniformes, l'interface GetPositions(), la définition des données renvoyées par l'objet d'échange peut être différente. Par exemple, certains échanges n'ont pas de données de gel de position dans les données de position, donc la FrozenAmount est 0.

{@fun/Futures/exchange.GetPositions échange.GetPositions}

Le marché

Structure des informations sur le marché des variétés commercialisées.

Prendre des valeurs telles que"btcusdt", leSymbolLe format et la définition de cet attribut sont différents de ceux de laSymbolle champ de la structure {@struct/Ticker Ticker}. Le symbole chaîne Prendre des valeurs telles que"BTC", leBaseAssetLe champ indique le nom de la monnaie négociée (c.-à-d.: monnaie de base), qui est uniformément en majuscules. Actifs de base chaîne Prendre des valeurs telles que"USDT", leQuoteAssetLe champ indique le nom de la monnaie libellée (c'est-à-dire: quoteCurrency), qui est uniformément en majuscules. Cote actif chaîne Prendre des valeurs telles que0.01, leTickSizele champ enregistre la valeur de la plus petite variation du prix de l'élément négocié à la bourse. Taille de la puce Numéro Prendre des valeurs telles que0.01, leAmountSizele champ enregistre la valeur de la variation minimale du volume des ordres passés à la bourse pour cette transaction. Nombre Numéro Prendre des valeurs telles que2, lePricePrecisionle champ enregistre la précision du prix de l'élément négocié à la bourse, indiquant que le prix est précis à 2 décimales. PrixPrécision Numéro Prendre des valeurs telles que3, leAmountPrecisionle champ enregistre la précision des ordres passés à la bourse pour la variété négociée, indiquant que les ordres sont exacts à 3 décimales. MontantPrécision Numéro Prendre des valeurs telles que0.001, leMinQtyle champ enregistre la taille minimale de l'ordre sur l'échange pour cette transaction. MinQty Numéro Prendre des valeurs telles que1000, leMaxQtyle champ enregistre le nombre maximal d'ordres pouvant être passés sur l'échange pour cette variété de transactions. Max. quantité Numéro Prendre des valeurs telles que5, leMinNotionalle champ enregistre le montant minimum de l'ordre placé sur la bourse pour cette variété de transactions. Min Notionnel Numéro Prendre des valeurs telles que9999999, leMaxNotionalle champ enregistre le montant maximal des ordres passés sur la bourse pour cette variété de transactions. MaximumNotionnel Numéro Le champCtValIl enregistre la valeur d'un contrat du produit négocié sur la bourse, dans la devise enregistrée dans leCtValCcyDans ce domaine, par exemple:CtValest de 0,01CtValCcyest"BTC", ce qui signifie qu'un contrat vaut 0,01 BTC. CtVal Numéro Le champCtValCcyenregistre l'unité de valeur d'un marché. L'unité de valeur d'un marché peut être:BTC, USD, ETH, etc. CtValCy Numéro Le champInfoIl enregistre les données brutes pour les espèces renvoyées par l'interface d'information de marché de l'échange. Les informations objet

La fonction exchange.GetMarkets() renvoie un dictionnaire contenant ceMarketla structure. En raison du niveau différent de support pour les données d'information de marché par chaque échange, les champs qui ne sont pas pris en charge par l'échange seront ignorés.Info field.

{@fun/Market/exchange.GetMarkets échange.GetMarkets} Je ne sais pas si vous êtes d'accord.

Financement

La structure de l'information sur le taux de financement du produit de trading. Seuls les contrats perpétuels de crypto-monnaie prennent en charge les taux de financement.

Les données brutes sont renvoyées lorsque l'interface des taux de financement des contrats à terme de crypto-monnaie est appelée. Les informations objet LeSymbolle champ est le code du produit de négociation défini par la plateforme FMZ. Le symbole chaîne Intervalle de taux de financement, en millisecondes.28800000désigne un intervalle de 8 heures. L'intervalle Numéro L'heure de début de la période de taux de financement suivante (heure de règlement de cette période), en millisecondes. Le temps Numéro Le taux de financement qui sera utilisé pour le règlement de cette période Taux Numéro

Les taux de financement des contrats perpétuels de différentes bourses de contrats à terme ont des méthodes et des mécanismes de calcul différents, et les cycles de règlement sont de 1 heure, 4 heures, 8 heures et un jour. Le taux de financement actuel des contrats perpétuels sur les bourses à terme a une valeur fixe et une valeur variable calculée en temps réel. LeRatele champ est la valeur du taux de financement sans%. Si vous voulez le convertir en une valeur avec%, vous pouvez le multiplier par 100 et ajouter le%à la fin.

{@fun/Futures/exchange.GetFundings échange.GetFundings} Je ne peux pas vous aider.

Autres Structure

Options de requête Http

Cette structure JSON est utilisée pour configurer les paramètres de la fonction HttpQuery et de la fonction HttpQuery_Go pour envoyer la demande Http.

Méthode de demande, par exemple:GET, POST, etc. méthode chaîne Par exemple, dans une demande POST, le corps peut contenir des données de formulaire, JSON, texte, etc. corps chaîne Codage des ensembles de caractères. Par exemple, spécifiez le codage des données textuelles dans le corps comme suit:"UTF-8"Je suis désolée. charset chaîne Un cookie est un petit morceau de données utilisé pour stocker et échanger des informations d'état entre un client (généralement un navigateur) et un serveur. les cookies chaîne Utilisé pour simuler les empreintes digitales du navigateur. Profil chaîne Lorsqu'il est réglé sur true, l'appel de la fonction HttpQuery renvoie le message de réponse complet. débogage Boole Les informations d'en-tête de demande existent sous forme de paires clé-valeur (structure JSON) et sont utilisées pour transmettre diverses informations, telles que le type de contenu, les informations d'authentification, le contrôle du cache, etc. en-têtes JSON Le temps d'arrêt est de 1 seconde. Le temps mort Numéro

Exemple d'utilisation:

function main() {
    var options = {
        method: "POST",
        body: "a=10&b=20&c=30",
        charset: "UTF-8",
        cookie: "session_id=12345; lang=en",
        profile: "chrome_103",
        debug: false,
        headers: {"TEST-HTTP-QUERY": "123"},
        timeout: 1000
    }
    var ret = HttpQuery("http://127.0.0.1:8080", options)
    Log(ret)
}

Le message http envoyé lorsque le code ci-dessus est exécuté:

POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Cookie: session_id=12345; lang=en
Host: 127.0.0.1:8080
Test-Http-Query: 123
Transfer-Encoding: chunked
User-Agent: Mozilla/5.0 (Macintosh; ...
Accept-Encoding: gzip, deflate, br

e
a=10&b=20&c=30
0

{@fun/Global/HttpQuery HttpQuery}, {@fun/Global/HttpQuery_Go HttpQuery_Go} Vous pouvez utiliser le nom de domaine de l'utilisateur.

HttpQuery-retour

Cette structure JSON est la structure de données renvoyée par la fonction HttpQuery en mode de débogage lorsque le champ de débogage dans leoptionsLe paramètre de structure est vrai.

Code d'état http Code de l' état Numéro Demandez des informations sur l'en-tête. Titre JSON Informations sur les cookies. Les cookies séquence Les informations complètes sur le chemin de la demande. Trace JSON Longueur du message Longueur Numéro Contenu du message. Corps chaîne

Un exemple de la structure de données JSON retournée est:

{
    "StatusCode": 302,
    "Header": {
        "Content-Type": ["text/html"],
        // ...
    },
    "Cookies": [{
        // ...
    }],
    "Trace": {},
    "Length": 154,
    "Body": "..."
}

{@fun/Global/HttpQuery HttpQuery}, {@fun/Global/HttpQuery_Go HttpQuery_Go} Vous pouvez utiliser le nom de domaine de l'utilisateur.

Tableau LogStatus

Cette structure JSON est utilisée pour configurer le contenu de la table affiché dans la barre d'état de la stratégie.

Utilisé pour définir le type d'interface utilisateur et les contrôles à analyser et à afficher.tableJe suis désolée. type chaîne Utilisé pour définir le titre de la barre d'état. titre chaîne Utilisé pour définir les titres des colonnes de la table de la barre d'état. Le premier élément du tableau est le titre de la première colonne, et ainsi de suite. les cols séquence Utilisé pour définir les données de rangée de la table des barres d'état. Le premier élément de la matrice de rangées (matrice bidimensionnelle) est également une structure de tableau. La longueur de cette structure de tableau doit être cohérente avec le nombre de colonnes de la table (les éléments de la structure de tableau correspondent aux noms des colonnes de la table un par un), c'est-à-dire la première ligne de données de la table. lignes séquence

function main() {
    var tbl = {
        type: "table", 
        title: "title", 
        cols: ["Column 1", "Column 2", "Column 3"], 
        rows: [
            ["Row 1 Column 1", "Row 1 Column 2", "Row 1 Column 3"],
            ["Row 2 Column 1", "Row 2 Column 2", "Row 2 Column 3"],
            ["Row 3 Column 1", "Row 3 Column 2", "Row 3 Column 3"],
        ]
    }
    LogStatus("`" + JSON.stringify(tbl) + "`")
}

Je ne sais pas si je peux le faire.

Les données de l'enquête

Cette structure JSON est utilisée pour configurer le contrôle de bouton dans la barre d'état. La structure JSON de contrôle de bouton peut être intégrée dans la structure JSON de la table de barre d'état. Cette structure est une structure d'ancienne version, et la plate-forme est toujours compatible. Il est recommandé d'utiliser la dernière version de la structure JSON du bouton. Exemple de construction d'un bouton de commande de la barre d'état (après avoir déclenché et cliqué sur le bouton, la fenêtre contextuelle contient un seul contrôle d'entrée, qui est construit à travers le champ d'entrée):

{
    "type": "button", 
    "cmd": "open", 
    "name": "opening a position", 
    "input": {
        "name": "number of opening positions", 
        "type": "number", 
        "defValue": 1
    }
}

Les commandes dans la fenêtre contextuelle déclenchées en cliquant sur le bouton de la barre d'état sont réglées parinputougroup.

Pour les commandes de boutons, le réglage fixe est le suivant:buttonJe suis désolée. type chaîne Paramètres du type de bouton classe chaîne Le texte sur le bouton de commande, c'est à dire le nom du bouton. Nom chaîne Le contenu de la commande interactive envoyé à la stratégie lorsque le bouton de commande déclenche une opération de clic. CMD chaîne La description du bouton de commande. La description est affichée lorsque la souris est placée sur le bouton dans la barre d'état. Définition chaîne Définit le bouton sur désactivé (vrai) / activé (faux). handicapés Boole Lors de la construction d'un bouton de barre d'état pour l'interaction, la saisie de données est également prise en charge.GetCommand()La fonctioninputélément à la structure de données JSON de la commande de bouton dans la barre d'état pour configurer la commande d'entrée dans la fenêtre contextuelle affichée lorsque le bouton est déclenché. Par exemple, pour définir la valeur de lainputchamp:

{
    "name": "Number of opening positions", 
    "type": "number", 
    "defValue": 1,
    "description": "test",                  
}

Description de chaque champ dans la structure JSON ci-dessus:

  • Nom Le titre du contrôle dans la boîte pop-up qui apparaît après le bouton de la barre d'état déclenche une opération de clic.
  • Définition Description du contrôle dans la fenêtre contextuelle qui s'affiche après que le bouton de la barre d'état a déclenché une opération de clic.
  • type Le type de contrôle dans la boîte pop-up qui apparaît après le bouton de la barre d'état déclenche une opération de clic. Les valeurs possibles du champ de type sont les suivantes:
    1. "number": commande numérique d'entrée.
    2. "string": commande d'entrée de chaîne.
    3. "selected"Le contrôle de la boîte déroulante.
    4. "boolean"Commutateur de commande.
  • défiValue La valeur par défaut du contrôle dans la fenêtre contextuelle qui apparaît après le bouton de la barre d'état déclenche une opération de clic. S'il s'agit d'un contrôle de type boîte déroulante (sélectionné), le champ defValue est utilisé pour définir les options de boîte déroulante."input": {"name": "Opening quantity", "type": "selected", "defValue": "A|B|C"}, la description textuelle des options de la boîte déroulante est réglée sur A, B, C.

Pour les champs étendus par le contrôle de type de la case déroulante:

  • les options Le contrôle de la boîte déroulante dans la page déclenchée par le bouton de contrôle de la barre d'état peut utiliser le champ d'options pour définir des options.{text: "description", value: "value"}Utilisez le champ defValue pour définir l'option par défaut, qui peut être une sélection multiple.
  • multiples Lorsque ce champ est réglé sur true, plusieurs sélections dans la fenêtre déroulante sont prises en charge.

l'entrée JSON Leinputle champ configure un contrôle dans la boîte pop-up qui apparaît après le bouton de la barre d'état est déclenché en cliquant.groupetinputLes éléments de la fonction de commande sont les suivants:groupont la même structure de données que leinputVeuillez vous référer à la description pertinente du champinput field.

groupe séquence

Un exemple declassvaleur de la structure JSON d'un bouton dans la barre d'état:

function main() {
    var table = {
        type: "table",
        title: "Status bar button style",
        cols: ["Default", "Original", "Success", "Information", "Warning", "Danger"], 
        rows: [
            [
                {"type":"button", "class": "btn btn-xs btn-default", "name": "Default"},
                {"type":"button", "class": "btn btn-xs btn-primary", "name": "Original"},
                {"type":"button", "class": "btn btn-xs btn-success", "name": "Success"},
                {"type":"button", "class": "btn btn-xs btn-info", "name": "Information"},
                {"type":"button", "class": "btn btn-xs btn-warning", "name": "Warning"},
                {"type":"button", "class": "btn btn-xs btn-danger", "name": "Danger"}
            ]
        ]
    }
    LogStatus("`" + JSON.stringify(table) + "`")
}

Exemple d'utilisation dugroupchamp avec leinputchamp:

function main() {
    // The drop-down box control in the page triggered by the testBtn1 button uses the options field to set options and the defValue field to set the default options. This is different from other examples in this chapter that directly use defValue to set options.
    var testBtn1 = {
        type: "button",
        name: "testBtn1",
        cmd: "cmdTestBtn1",
        input: {name: "testBtn1ComboBox", type: "selected", options: ["A", "B"], defValue: 1}
    }
  
    /* 
      Status bar button control (set input field implementation) testBtn2 button triggered by the page in the drop-down box control using the options field to set the options, options field in the options field not only supports the string,
      it also supports the use of ```{text: "description", value: "value"}``` structure. Use the defValue field to set the default option. The default option can be multiple selection (multiple selection is achieved through an array structure). Multiple selection requires setting the additional field multiple to true.
    */
    var testBtn2 = {
        type: "button", 
        name: "testBtn2",
        cmd: "cmdTestBtn2",
        input: {
            name: "testBtn2MultiComboBox", 
            type: "selected", 
            description: "Implementing multiple selection in drop-down box", 
            options: [{text: "Option A", value: "A"}, {text: "Option B", value: "B"}, {text: "Option C", value: "C"}],
            defValue: ["A", "C"],
            multiple: true
        }
    }
  
    // Status bar grouping button control (set group field implementation) testBtn3 button triggered by the page in the drop-down box control using the options field to set options, also supports the direct use of defValue set options.
    var testBtn3 = {
        type: "button",                     
        name: "testBtn3",
        cmd: "cmdTestBtn3", 
        group: [
            {name: "comboBox1", label: "labelComboBox1", description: "Drop-down box 1", type: "selected", defValue: 1, options: ["A", "B"]}, 
            {name: "comboBox2", label: "labelComboBox2", description: "Drop-down box 2", type: "selected", defValue: "A|B"}, 
            {name: "comboBox3", label: "labelComboBox3", description: "Drop-down box 3", type: "selected", defValue: [0, 2], multiple: true, options: ["A", "B", "C"]}, 
            {
                name: "comboBox4", 
                label: "labelComboBox4", 
                description: "Drop-down box 4", 
                type: "selected", 
                defValue: ["A", "C"], 
                multiple: true, 
                options: [{text: "Option A", value: "A"}, {text: "Option B", value: "B"}, {text: "Option C", value: "C"}, {text: "Option D", value: "D"}]
            }
        ]
    }
    while (true) {
        LogStatus("`" + JSON.stringify(testBtn1) + "`\n", "`" + JSON.stringify(testBtn2) + "`\n", "`" + JSON.stringify(testBtn3) + "`\n")
        var cmd = GetCommand()
        if (cmd) {
            Log(cmd)
        }
        Sleep(5000)
    }
}

Je ne sais pas si je peux le faire.

LogStatus-btnTypeTwo est le numéro de connexion

Cette structure JSON est utilisée pour configurer le bouton de contrôle dans la barre d'état. Exemple de construction d'un bouton de contrôle de la barre d'état (après avoir déclenché et cliqué sur le bouton, la fenêtre contextuelle contient plusieurs commandes d'entrée, qui sont construites à travers le champ de groupe):

{
    "type": "button",
    "cmd": "open",
    "name": "Open a position and place an order",
    "group": [{
        "type": "selected",
        "name": "tradeType",
        "label": "order type",
        "description": "market order, limit order",
        "default": 0,
        "group": "trading setup",
        "settings": {
            "options": ["market order", "limit order"],
            "required": true,
        }
    }, {
        "type": "selected",
        "name": "direction",
        "label": "trading direction",
        "description": "buy, sell",
        "default": "buy",
        "group": "trading setup",
        "settings": {
            "render": "segment",
            "required": true,
            "options": [{"name": "buy", "value": "buy"}, {"name": "sell", "value": "sell"}],
        }
    }, {
        "type": "number",
        "name": "price",
        "label": "price",
        "description": "order price",
        "group": "trading setup",
        "filter": "tradeType==1",
        "settings": {
            "required": true,
        }
    }, {
        "type": "number",
        "name": "amount",
        "label": "order quantity",
        "description": "order quantity",
        "group": "trading setup",
        "settings": {
            "required": true,
        }
    }],
}

Les commandes dans la fenêtre contextuelle déclenchées en cliquant sur le bouton de la barre d'état sont réglées parinputougroup.

Pour les commandes de boutons, le réglage fixe est le suivant:buttonJe suis désolée. type chaîne Le texte sur le bouton de commande, c'est à dire le nom du bouton. Nom chaîne Le contenu de la commande interactive envoyé à la stratégie lorsque le bouton de commande déclenche une opération de clic. CMD chaîne Lors de la construction d'un bouton de barre d'état pour l'interaction, la saisie de données est également prise en charge.GetCommand()La fonctioninputélément à la structure de données JSON de la commande de bouton dans la barre d'état pour configurer la commande d'entrée dans la fenêtre contextuelle affichée lorsque le bouton est déclenché. Comparée à l'ancienne version de la structure d'entrée, la nouvelle version comporte quelques nouveaux champs et changements:

{
    "type": "selected",
    "name": "test",         
    "label": "topic",       
    "description": "desc",  
    "default": 1,
    "filter": "a>1",
    "group": "group1",
    "settings": { ... },    // Component configuration
}

Description et explication de chaque champ dans la structure JSON ci-dessus:

  • type Type de commande (champ obligatoire), prend en charge les paramètres suivants:"number"boîte de saisie numérique,"string"boîte d'entrée de chaîne,"selected"boîte déroulante,"boolean"Commutez le contrôle.

  • Nom Si la structure JSON actuelle est la valeur du champ du champ d'entrée, lorsque le champ d'étiquette n'est pas défini, le nom est le titre du contrôle dans la fenêtre contextuelle qui apparaît après avoir cliqué sur le bouton de la barre d'état. Si la structure JSON actuelle est un élément de la valeur de champ (structure de tableau) du champ de groupe, le nom n'est pas utilisé comme titre de contrôle. Le champ de nom est utilisé pour indiquer le nom de champ du contenu d'entrée de contrôle. Par exemple, un extrait du champ de groupe est utilisé comme illustration:

    var testBtn3 = {
        type: "button",                     
        name: "testBtn3",
        cmd: "cmdTestBtn3", 
        group: [
            {name: "comboBox1", label: "labelComboBox1", description: "Drop-down box 1", type: "selected", defValue: 1, options: ["A", "B"]}, 
            {name: "comboBox2", label: "labelComboBox2", description: "Drop-down box 2", type: "selected", defValue: "A|B"}, 
            {name: "comboBox3", label: "labelComboBox3", description: "Drop-down box 3", type: "selected", defValue: [0, 2], multiple: true, options: ["A", "B", "C"]}, 
            {
                name: "comboBox4", 
                label: "labelComboBox4", 
                description: "Drop-down box 4", 
                type: "selected", 
                defValue: ["A", "C"], 
                multiple: true, 
                options: [{text: "Option A", value: "A"}, {text: "Option B", value: "B"}, {text: "Option C", value: "C"}, {text: "Option D", value: "D"}]
            }
        ]
    }
    

    Selon cet extrait, si le bouton de la barre d'état déclenche une interaction, une boîte contextuelle apparaîtra avec 4 commandes, qui sont toutes des commandes de boîte déroulante. Après avoir défini les options pour chaque contrôle et cliqué sur OK pour envoyer le message d'interaction, la fonction GetCommand dans la stratégie recevracmdTestBtn3:{"comboBox1":1,"comboBox2":0,"comboBox3":[0,2],"comboBox4":["A","C"]}Je suis désolée. La valeur de nom dans la structure JSON est utilisée comme nom de champ de l'information interactive renvoyée, par exemple: comboBox1, comboBox2, etc.

  • étiquette Utilisé pour définir le titre du contrôle.

  • Définition Description de la commande. Si la structure JSON actuelle est un élément de la valeur de champ (structure de tableau) du champ de groupe, et que le champ d'étiquette n'est pas défini, la description est le titre du contrôle dans la boîte contextuelle qui s'affiche après avoir cliqué sur le bouton de la barre d'état.

  • par défaut La valeur par défaut du contrôle.

  • filtre Sélecteur, utilisé pour masquer les commandes. Ne pas définir ce champ signifie pas de filtrage (affichage des commandes); lorsque ce champ est défini, aucun filtrage (affichage des commandes) ne se produit lorsque l'expression est vraie. Lorsque l'expression est fausse, le filtrage se produit (pas d'affichage des commandes)

  • groupe Utilisé pour contrôler le regroupement des contrôles, qui peuvent être pliés.

  • réglages Configuration des composants, le contrôle a une variété d'options d'interface utilisateur, utilisez cette option pour effectuer des réglages spécifiques.

    settings:{
        multiple:true,
        customizable:true,
        options:[{name:'xxx|yyy',value:0}]
    }
    

    paramètres: paramètres.obligatoire: si elle est requise. paramètres.disabled: Désactiver ou non. paramètres.min: valide lorsque type=numéro, indiquant la valeur minimale ou la longueur minimale d'une chaîne. paramètres.max: valide lorsque type=numéro, indiquant la valeur maximale ou la longueur maximale d'une chaîne. paramètres.step: valide lorsque type=numéro et rendu=slider, indiquant la longueur de l'étape. paramètres.multiple: valide lorsque type= est sélectionné, indiquant que des sélections multiples sont prises en charge. settings.customizable: Il est valide lorsque type= est sélectionné, indiquant que la personnalisation est prise en charge; les utilisateurs peuvent directement modifier et ajouter de nouvelles options dans le contrôle de la fenêtre déroulante. Si l'option nouvellement éditée est sélectionnée, le nom de l'option est utilisé à la place de la valeur représentée par l'option lorsque l'interaction est déclenchée. paramètres.options: valide lorsque type= est sélectionné, indiquant le format de données de l'option sélecteur: [option 1, option 2], [{name:xxx,value:0}, {name:xxx,value:1}]. paramètres.render: type de composant de rendu. Lorsque type=numéro, settings.render n'est pas défini (boîte de saisie de numéro par défaut), optionnel: curseur (barre de curseur), date (le sélecteur d'heure renvoie l'horodatage). Lorsque type=string, settings.render n'est pas défini (boîte d'entrée par défaut à une ligne), optionnel: textarea (entrée à plusieurs lignes), date (le sélecteur d'heure renvoie yyyy-MM-dd hh:mm:ss), couleur (le sélecteur de couleur renvoie #FF00FF). Lorsque type= est sélectionné, les paramètres.render ne sont pas définis (boîte déroulante par défaut), optionnel: segment (sélecteur de segment). Lorsque type=boolean, il n'y a actuellement qu'une case à cocher par défaut.

l'entrée JSON Leinputle champ configure un contrôle dans la boîte pop-up qui apparaît après le bouton de la barre d'état est déclenché en cliquant.groupetinputLes éléments de la fonction de commande sont les suivants:groupont la même structure de données que leinputVeuillez vous référer à la description ci-dessus du champinput field.

groupe séquence

Prise en charge des paramètres bilingues:

{
    type:'selected',
    name:'test',
    label:'选项|options',
    description:'描述|description',
    default:0,                            // Here, the default value is set to 0, which means the value in the option {name:'xxx|yyy',value:0}
    filter:'a>1&&a<10',
    group:'分组|group',
    settings:{
        multiple:true,
        customizable:true,
        options:[{name:'xxx|yyy',value:0}]
    }
}

Je ne sais pas si je peux le faire.

Options de graphique

Ce JSON est utilisé pour définir les informations de configuration du graphique de la fonction de dessin personnaliséChart(). La bibliothèque de graphiques utilisée est Highcharts. Seuls quelques champs de configuration de base sont listés ici.

Champ d'extension de plateforme: définir sur vrai pour utiliser les graphiques Highstocks; définir sur faux pour utiliser les graphiques Highcharts.

__ est Stocks chaîne

{
    layout: 'single', // Not participating in grouping, displayed separately, default is group 'group'
    height: 300,      // Specify height
}

prolongation JSON Titre du graphique titre chaîne Configuration de l'axe X. xAxe JSON Configuration de l'axe Y. yAxe JSON Série de données graphiques. séries JSON

Un exemple de dessin simple:

// This chart is an object in JavaScript language. Before using the Chart function, we need to declare an object variable chart to configure the chart.
var chart = {                                           
    // This field marks whether the chart is a general chart. If you are interested, you can change it to false and run it.
    __isStock: true,                                    
    // Zoom tool
    tooltip: {xDateFormat: '%Y-%m-%d %H:%M:%S, %A'},    
    // title
    title : { text : 'Price difference analysis chart'},                       
    // Select range
    rangeSelector: {                                    
        buttons:  [{type: 'hour',count: 1, text: '1h'}, {type: 'hour',count: 3, text: '3h'}, {type: 'hour', count: 8, text: '8h'}, {type: 'all',text: 'All'}],
        selected: 0,
        inputEnabled: false
    },
    // The horizontal axis of the coordinate axis is: x-axis, and the current setting type is: time
    xAxis: { type: 'datetime'},                         
    // The vertical axis of the coordinate axis is: the y-axis, the default value is adjusted according to the data size
    yAxis : {                                           
        // title
        title: {text: 'Price difference'},                           
        // Whether to enable the right vertical axis
        opposite: false                                 
    },
    // Data series, this property saves each data series (line, K-line chart, label, etc.)
    series : [                                          
        // The index is 0, and the data array stores the data of the index series.
        {name : "line1", id : "line 1,buy1Price", data : []},                          
        // The index is 1, dashStyle:'shortdash' is set, that is, a dashed line is set
        {name : "line2", id : "line 2,lastPrice", dashStyle : 'shortdash', data : []}  
    ]
}
function main(){
    // Call the Chart function to initialize the chart
    var ObjChart = Chart(chart)         
    // Clear
    ObjChart.reset()                      
    while(true){
        // Get the timestamp of this poll, which is a millisecond timestamp. Used to determine the position of the X-axis written to the chart
        var nowTime = new Date().getTime()
        // Get market data
        var ticker = _C(exchange.GetTicker)
        // Get the buy price from the return value of the market data
        var buy1Price = ticker.Buy    
        // Get the last transaction price. In order to prevent the two lines from overlapping, we add 1.
        var lastPrice = ticker.Last + 1
        // Use the timestamp as the X value and the buy price as the Y value to pass into the data sequence of index 0
        ObjChart.add(0, [nowTime, buy1Price])
        // Same as above
        ObjChart.add(1, [nowTime, lastPrice])
        Sleep(2000)
    }
}

{@fun/Log/Graphique graphique}

Options de la carte KLine

Ce JSON est utilisé pour définir les informations de configuration du graphique de la fonction de dessin personnaliséKLineChart. Seuls quelques champs de configuration de base sont répertoriés ici.

Si vous devez dessiner sur la carte principale. couverture Boole Configuration de l'axe X. xAxe JSON Configuration de l'axe Y. yAxe JSON Configuration du graphique des chandeliers. bougie JSON

Veuillez vous référerArticle spécial sur le dessin de graphiques à l'aide de la fonction KLineChart.

J'espère que tu as bien fait.

Résultats de l'analyse

Le JSON est utilisé pour définir les données à charger par leexchange.SetData()Les données JSON sont une structure de tableau, dans laquelle chaque élément est également un tableau, à savoir[time, data].

L'horodatage des données, marquant l'heure de ces données. le temps Numéro les données correspondent à une certaine période dans les données chargées par leexchange.SetData()La mise en œuvre de la stratégieexchange.GetData()fonction obtient les données avec l'horodatage correspondant selon l'heure actuelle.

données chaîne, nombre, bool, objet, tableau, etc.

Un exemple de chargement des données dans le système de backtesting et de récupération des données lorsque le backtest de stratégie est en cours d'exécution:

/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/
function main() {
    exchange.SetData("test", [[1579536000000, _D(1579536000000)], [1579622400000, _D(1579622400000)], [1579708800000, _D(1579708800000)]])
    while(true) {
        Log(exchange.GetData("test"))
        Sleep(1000 * 60 * 60 * 24)
    }
}

Je ne sais pas.

Retour de la boucle d'événement

Ce JSON est la structure de données renvoyée par leEventLoop()La fonctionEventLoop()les moniteurs de fonctionnalités: 1. tout événement de données lisible par WebSocket; 2. événements de fin de tâche simultanés avec les fonctions exchange.Go() et HttpQuery_Go(); 3. événements de message envoyés dans les threads créés par lethreading.Thread()fonction dans la stratégie du langage JavaScript.

Numéro de séquence des événements. Les résultats Numéro Nom de l'événement. Événement chaîne Identifiant du fil d'événement. Enfilé Numéro Indice des événements. Indice Numéro Une étiquette d'heure nano. Nano Numéro

Utilisez leexchange.Go()La fonction pour effectuer des demandes simultanées et la structure des données d'événement renvoyées par leEventLoop() function.

{
    "Seq":1,
    "Event":"Exchange_GetTrades",
    "ThreadId":0,
    "Index":3,
    "Nano":1682068771309583400
}

Dans le fil d'exécution simultanée de la stratégie de langage JavaScript (créé par lethreading.Thread()La fonctionpostMessage()fonction de l'objet thread est utilisé pour envoyer un message, leEventLoop()la fonction dans le thread qui reçoit le message surveillera la structure de données d'événement suivante:

{
    "Seq":4,
    "Event":"thread",
    "ThreadId":1,
    "Index":0,
    "Nano":1727592066508674000
}

J'espère que tu vas bien.

Retour DBExec

Ce JSON est la structure de données renvoyée par leDBExec()fonction; il est également retourné lors de l'exécution d'une instruction SQL en utilisant leexec()méthode de l'objet créé par leDial() function.

Les noms de colonne des données à interroger, une chaîne de caractères. les colonnes séquence La valeur du champ valeurs est un tableau bidimensionnel, où chaque élément est un tableau et un enregistrement de données. les valeurs séquence

Exemple de requête de données dans la base de données:

{
    "columns":["TS","HIGH","OPEN","LOW","CLOSE","VOLUME"],
    "values":[
        [1518970320000,100,99.1,90,100,12345.6],
        [1518960320000,100,99.1,90,100,12345.6]
    ]
}

Je ne sais pas si je peux le faire.

Thread.join-return

Cette JSON est la structure de données renvoyée par la fonction membrejoin()de l'annéeThreadobjet, qui enregistre certaines informations sur les threads concurrents dans leJavaScriptLa stratégie linguistiqueThreadobjet fait référence à l'objet de fil, qui est créé parthreading.Thread().

Identifiant du fil. Nom de l'entreprise Numéro Si le fil est forcé de se terminer. terminé Boole Le temps de fonctionnement du fil en nanosecondes. dépassé Numéro La valeur de retour de la fonction thread. Résultats Numéro

Le code suivant teste le mécanisme de temps d'arrêt dujoin()Le rôle de laThreadobjet et imprime la valeur de retour de lajoin() function.

function testFunc() {
    for (var i = 0; i < 5; i++) {
        Log(i)
        Sleep(300)
    }
}

function main() {
    var t1 = threading.Thread(testFunc)
    Log(t1.join(1000))  // undefined
    Log(t1.join())      // {"id":1,"terminated":false,"elapsed":1506864000}
} ```


{@fun/Threads/Thread/join join}
Fonctions intégrées Variables intégrées