Создание интерактивных кнопок в строке состояния стратегии

Автор:Лидия., Создано: 2023-07-13 14:14:38, Обновлено: 2024-01-02 21:29:26

img

Создание интерактивных кнопок в строке состояния стратегии

Описание в документации 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'}) + '`')

Документация API показывает, что отображение таблиц, строк, изображений, диаграмм и т. Д. в строке состояния стратегии осуществляется путем вызова функции API:LogStatus- Да, конечно. Мы также можем настроить интерактивную кнопку, создав данные JSON.

DEMO исходный код:

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

Стратегия работает так, как показано:

img

Мы можем запустить взаимодействие, нажав на кнопки в таблице на строке состояния. Когда мы нажимаем на кнопку Close Position, сообщение будет отправлено как обычно:

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.

Далее мы нажимаем на кнопку Call Function, чтобы проверить, что называемая функция - это функция _D(), и функция _D() будет возвращать текущую временную строку, так что если вы напишите здесь вызов функции, он будет продолжать его называть.

Полученные данные печатаются в журнале:

img

img

Наконец, давайте нажмём на кнопку Send JS Code и мы можем выполнить пользовательскую функцию, которую мы использовали для тестирования в нашем коде.

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

Нажмите кнопку:

img

img

Вы можете видеть, что выполнено заявление Log (("Вызов пользовательской функции с параметрами: ", p); в функции test1.

Вставляя class: btn btn-xs btn-danger, стиль в коде изменяет внешний вид кнопки.

img

Начинайте тренироваться!


Больше