В процессе загрузки ресурсов... загрузка...

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

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

Constructing Interactive Button Functions in the Strategy Status Bar

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

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

}


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)

Но это не работает, когда вы нажимаете на Send value потому что['cmd': 10, // valueЗдесь 10. Числовые типы не могут быть отправлены.

https://www.fmz.com![СозданиеФункции интерактивных кнопок в строке состояния стратегии[(/upload/asset/2d8e0f86599f1b82da792544b7b840bc824d4a96.png)

Он был оптимизирован для совместимости с числовыми значениями и возвращает последовательность значений.

”`

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

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

Constructing Interactive Button Functions in the Strategy Status Bar

Constructing Interactive Button Functions in the Strategy Status Bar

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

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

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

Constructing Interactive Button Functions in the Strategy Status Bar

Constructing Interactive Button Functions in the Strategy Status Bar

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

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

Constructing Interactive Button Functions in the Strategy Status Bar

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


Больше информации