Erstellen von interaktiven Tastenfunktionen in der Strategie-Statusleiste

Schriftsteller:Lydia., Erstellt: 2023-07-13 14:14:38, aktualisiert: 2024-01-02 21:29:26

img

Erstellen von interaktiven Tastenfunktionen in der Strategie-Statusleiste

Beschreibung in der API-Dokumentation

// 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'}) + '`')

Die API-Dokumentation zeigt, dass die Anzeige von Tabellen, Zeichenfolgen, Bildern, Diagrammen usw. in der Strategie-Statusleiste durch Aufrufen der API-Funktion erreicht wird:LogStatus- Ich weiß. Wir können auch eine interaktive Schaltfläche einrichten, indem wir eine JSON-Daten erstellen.

DEMO-Quellcode:

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);
    }
}

Die Strategie läuft wie gezeigt:

img

Wir können die Interaktion auslösen, indem wir auf die Tasten in der Tabelle auf der Statusleiste klicken. Wenn wir auf die Schaltfläche Close Position klicken, wird die Nachricht wie gewohnt gesendet:

img

img

> But it doesn't work when you click on "Send value" because[ ```'cmd': 10,                              // value``` ]Here is 10. Numeric types cannot be sent.

https://www.fmz.com![img](/upload/asset/2d8e0f86599f1b82da792544b7b840bc824d4a96.png) 
# It has been optimized to be compatible with numeric values, and returns a string of values.

Als nächstes klicken wir auf die Schaltfläche Call Function, um zu testen, ob die Funktion, die aufgerufen wird, die _D() Funktion ist, und die _D() Funktion wird die aktuelle Zeitfolge zurückgeben, also wenn Sie hier einen Funktionsanruf schreiben, wird sie sie weiterhin aufrufen.

Die eingegangenen Daten werden in das Protokoll gedruckt:

img

img

Schließlich klicken wir auf die Schaltfläche Send JS Code und wir können die benutzerdefinierte Funktion ausführen, die wir in unserem Code getestet haben.

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

Klicken Sie auf:

img

img

Sie können sehen, dass die Log (("Anrufen einer benutzerdefinierten Funktion mit Parametern: ", p); Anweisung in der Funktion test1 ausgeführt wurde.

Durch das Einfügen von class: btn btn-xs btn-danger ändert der Stil im Code das Aussehen der Schaltfläche.

img

Fangen Sie an und üben Sie sofort!


Mehr