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

Construire des fonctions de boutons interactifs dans la barre d'état de la stratégie

Auteur:FMZ~Lydia, Créé à partir de: 2023-07-13 14:14:38, Mis à jour à partir de: 2024-01-02 21:29:26

Constructing Interactive Button Functions in the Strategy Status Bar

Construire des fonctions de boutons interactifs dans la barre d'état de la stratégie

Description dans la documentation de l'API

// You can also construct a button in the form, and use GetCommand to receive the contents of the cmd attribute.
var table = {
    type: 'table',
    title: 'position operation',
    cols: ['Column1', 'Column2', 'Action'],
    rows: [
        ['abc', 'def', {'type':'button', 'cmd': 'coverAll', 'name': 'close position'}],
    ]
};
LogStatus('`' + JSON.stringify(table) + '`')
// Or construct a separate button
LogStatus('`' + JSON.stringify({'type':'button', 'cmd': 'coverAll', 'name': 'close position'}) + '`')
// Button styles can be customized (bootstrap's button attributes)
LogStatus('`' + JSON.stringify({'type':'button', 'class': 'btn btn-xs btn-danger', 'cmd': 'coverAll', 'name': 'close position'}) + '`')

La documentation de l'API montre que l'affichage de tables, chaînes, images, graphiques, etc. dans la barre d'état de la stratégie est effectué en appelant la fonction API:LogStatus.

Nous pouvons également configurer un bouton interactif en construisant une donnée JSON.

Le code source de la démo:

function test1(p) { Log("Calls a custom function with parameters:", p); return p; } function main() { while (true) { var table = { type: 'table', title: 'position operation', cols: ['Column1', 'Column2', 'Action'], rows: [ ['a', '1', { 'type': 'button', // To display a button, you must set the type to button. 'cmd': "CoverAll", // String, sent data, accepted by the GetCommand() function. 'name': 'close position' // The name displayed on the button. }], ['b', '1', { 'type': 'button', 'cmd': 10, // numerical value 'name': 'Send value' }], ['c', '1', { 'type': 'button', 'cmd': _D(), // The function is called for the duration of the strategy run 'name': 'call the function' }], ['d', '1', { 'type': 'button', 'cmd': 'JScode:test1("ceshi")', // String, the JS code to execute. 'name': 'Send JS Code' }] ] }; LogStatus(' + JSON.stringify(table) + `)

    var str_cmd = GetCommand();
    if (str_cmd) {
        Log("Received Interaction Data str_cmd:", "type:", typeof(str_cmd), "value:", str_cmd);
    }

    if (str_cmd && str_cmd.split(':', 2)[0] == "JScode") {          // Determine if there is a message
        var js = str_cmd.split(':', 2)[1];                          // Split the returned message string, limit it to two, and assign the element with index 1 to a variable named js. 
        Log("Execute debugging code:", js);                                     // Output executed code
        try {                                                       // Abnormal detection
            eval(js);                                               // Executes the eval function, which executes the parameters (code) passed in.
        } catch (e) {                                               // throw an exception
            Log("Exception", e);                                    // Output error messages
        }
    }

    Sleep(500);
}

}


Let's run it. The strategy runs as shown:

![Constructing Interactive Button Functions in the Strategy Status Bar](/upload/asset/28d692a53d0c76776636b.png)

We can trigger the interaction by clicking on the buttons in the table on the status bar. We will click on the "Close Position" and "Send Value" buttons in turn.
When we click on the "Close Position" button, the message will be sent as normal:

![Constructing Interactive Button Functions in the Strategy Status Bar](/upload/asset/28d692a53d0c76776636b.png)

![Constructing Interactive Button Functions in the Strategy Status Bar](/upload/asset/28d4338ccfcdaf615af37.png)

Mais cela ne fonctionne pas lorsque vous cliquez sur Envoyer la valeur parce que['cmd': 10, // valueLes types numériques ne peuvent pas être envoyés.

[Construction de bâtiments]Les fonctionnalités de bouton interactif dans la barre d'état de la stratégie](/upload/asset/2d8e0f86599f1b82da792544b7b840bc824d4a96.png)

Il a été optimisé pour être compatible avec les valeurs numériques et renvoie une chaîne de valeurs.

”`

Ensuite, nous cliquons sur le bouton Call Function, pour tester la fonction appelée est la fonction _D(), et la fonction _D() continuera à retourner la chaîne de temps actuelle, donc si vous écrivez un appel de fonction ici, il continuera à l'appeler.

Les données reçues sont imprimées dans le journal:

Constructing Interactive Button Functions in the Strategy Status Bar

Constructing Interactive Button Functions in the Strategy Status Bar

Enfin, cliquons sur le bouton Envoyer du code JS et nous pouvons exécuter la fonction personnalisée que nous avons utilisée pour tester dans notre code.

function test1(p) {
    Log("Calls a custom function with parameters:", p);
    return p;
}

Cliquez sur le bouton:

Constructing Interactive Button Functions in the Strategy Status Bar

Constructing Interactive Button Functions in the Strategy Status Bar

Vous pouvez voir que l'expression Log ((Appel de fonction personnalisée avec les paramètres: , p); dans la fonction test1 a été exécutée.

En insérant class: btn btn-xs btn-danger, le style du code modifie l'apparence du bouton.

Constructing Interactive Button Functions in the Strategy Status Bar

Commencez à vous entraîner tout de suite!


En savoir plus