Конструирование функций интерактивных кнопок в панели состояния стратегии

Автор:Маленькие мечты, Создано: 2017-06-13 15:24:05, Обновлено: 2018-03-16 18:32:58

Конструирование функций интерактивных кнопок в панели состояния стратегии

  • Описание в документации API

    // 也可以构造一个按钮在表格中, 策略用GetCommand接收cmd属性的内容
    var table = {
        type: 'table',
        title: '持仓操作',
        cols: ['列1', '列2', 'Action'],
        rows: [
            ['abc', 'def', {'type':'button', 'cmd': 'coverAll', 'name': '平仓'}],
        ]
    };
    LogStatus('`' + JSON.stringify(table) + '`')
    // 或者构造一单独的按钮
    LogStatus('`' + JSON.stringify({'type':'button', 'cmd': 'coverAll', 'name': '平仓'}) + '`')
    // 可以自定义按钮风格(bootstrap的按钮属性)
    LogStatus('`' + JSON.stringify({'type':'button', 'class': 'btn btn-xs btn-danger', 'cmd': 'coverAll', 'name': '平仓'}) + '`')
    

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

  • Документ был опубликован в Twitter.

    function test1(p) {
        Log("调用自定义函数,参数:", p);
        return p;
    }
    function main() {
        while (true) {
            var table = {
                type: 'table',
                title: '持仓操作',
                cols: ['列1', '列2', 'Action'],
                rows: [
                    ['a', '1', {
                        'type': 'button',                       // 显示按钮 必须要 把 type 设置为 button 类型
                        'cmd': "CoverAll",                      // 字符串,发送的 数据,由GetCommand()函数接受。
                        'name': '平仓'                           // 按钮上显示的名字
                    }],
                    ['b', '1', {
                        'type': 'button',
                        'cmd': 10,                              // 数值
                        'name': '发送数值'
                    }],
                    ['c', '1', {
                        'type': 'button',
                        'cmd': _D(),                            // 函数 策略运行 期间会一直调用
                        'name': '调用函数'
                    }],
                    ['d', '1', {
                        'type': 'button',
                        'cmd': 'JScode:test1("ceshi")',       // 字符串, 用于执行的 JS 代码。
                        'name': '发送JS代码'
                    }]
                ]
            };
            LogStatus('`' + JSON.stringify(table) + '`')
    
            var str_cmd = GetCommand();
            if (str_cmd) {
                Log("接收到的交互数据 str_cmd:", "类型:", typeof(str_cmd), "值:", str_cmd);
            }
    
            if (str_cmd && str_cmd.split(':', 2)[0] == "JScode") {          // 判断是否有消息
                var js = str_cmd.split(':', 2)[1];                          // 分割 返回的消息 字符串, 限制返回2个, 把索引为1的 元素 赋值给 名为js 的变量 
                Log("执行调试代码:", js);                                     // 输出 执行的代码
                try {                                                       // 异常检测
                    eval(js);                                               // 执行 eval函数, 该函数执行传入的参数(代码)。
                } catch (e) {                                               // 抛出异常
                    Log("Exception", e);                                    // 输出错误信息
                }
            }
    
            Sleep(500);
        }
    }
    

    Давайте начнем с того, что стратегия работает так:

    img

    Мы можем нажать на кнопку "Статус" в таблице, которая запускает взаимодействие, а затем мы нажимаем на кнопку "Статус" и на кнопку "Отправить значение".

    Нажмите на кнопку "Подставка" и вы получите сообщение, которое будет отправлено в обычном режиме:

    img

    > 但是点击  “发送数值” 的时候就不行了,原因是[ ```'cmd': 10,                              // 数值``` ]这里是 10  。不能发送数值类型。
    
    ![img](/upload/asset/2d8e0f86599f1b82da792544b7b840bc824d4a96.png) 
    # 已经优化 兼容了 数值,返回的 为数值形式的 字符串。
    

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

    img

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

    img

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

    function test1(p) {
        Log("调用自定义函数,参数:", p);
        return p;
    }
    

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

    img

    Вы можете увидеть, что выполненная функция test1Log("调用自定义函数,参数:", p);Я не знаю, что делать.

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

    img

    img

Поторопитесь, делайте это!


Больше

Легкие облака.Наконец-то я нашел эту кнопку.

Второй.JScode:test1 (("ceshi") Может ли это повлиять на главный цикл?

ФмнуроМожно ли использовать числовые значения в строке 2 в качестве типа ввода?

ХокшелатоФактические результаты тестирования и результаты в уроках имеют входные данные. Все отправленные данные были проанализированы для `string`, поэтому: 1. ** Нажмите на кнопку "Отправить числовые значения" ** 2. ** Призыв к функции ** При запуске кнопки функция `_D() ` уже была решена, и поле подсказки спрашивает, точно ли вы хотите отправить команду к боту **2018-03-16 16:40:50**? Однако, если я использую другие функции, такие как: `'cmd': Log ((exchange.GetAccount)))), `, после запуска бот будет возвращать данные, даже если не нажимать кнопку. Если `'cmd': exchange.GetAccount)))), `, при запуске кнопки указывается на то, что нужно отправить команду к боту **[object Object]**? Итак, можно ли подробно объяснить логику работы BotVS с атрибутом `cmd` в интерактивной кнопке?

Мистер Хо.Маленький сон, кроме того, что можно добавить таблицы и кнопки в панели состояния, как добавить другие элементы формы, такие как текстовые рамки

Профессиональные кормильцы666 - это еще большее событие

Профессиональные кормильцы666 - это еще большее событие

Маленькие мечтыО, спасибо за поддержку.

Легкие облака.Но искренность полезна.

Маленькие мечтыЭто старый пост.

Маленькие мечтыВременный Кнопка состояния имеет только один тип контроллера, кнопка.

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

ХокшелатоПодумав, `'cmd': _D() ` само по себе не имеет вывода, `'cmd': Log ((_D()) ` будет продолжать выводить. Но, если надежда запускается с помощью кнопки, почему функции в `cmd` будут постоянно вызываться?

ХокшелатоПростите, немного путаю. `test1 ((a++) ` в вашем коде будет постоянно выводить, или, как я сказал ранее, даже если я не нажму эту кнопку, робот будет выводить сразу после запуска.

Маленькие мечтыВторой момент, который вы можете неправильно понять, когда я говорю о постоянном вызове, это означает: каждый раз, когда программа работает, этот _D() возвращает новое время, используемое в качестве команды для этой кнопки. Это не значит, что карта в этом положении всегда вызывает _D(). Мой код, который вы тестируете, будет постоянно выводиться, проверяться. `` var a = 0 function test1 ((p) { Log (("призыв на пользовательскую функцию, параметры:", p); return p; {y:bi} function main (() { while (true) { пока (правда) { var table = { type: 'table', title: "Операции с хранением", Cols: ['Слога 1', 'Слога 2', 'Action'], РАУС: [ ['a', '1', { 'type': 'button', // показывает кнопку. 'cmd': "CoverAll", // строка, отправленные данные, принятые функцией GetCommand(). 'name': 'Plating' // Название, отображаемое на кнопке }], ['b', '1', { 'type': 'button', 'type': 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button' 'cmd': 10, // значение 'name': 'отправить значение' }], ['c', '1', { 'type': 'button', 'type': 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button' 'cmd': test1 ((a++), // Функция Политика будет вызываться во время выполнения 'name': 'Призыв функции' }], ['d', '1', { 'type': 'button', 'type': 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button', 'button' 'cmd': 'JScode:test1 (("ceshi") '', // строка, используемая для выполнения JS-кода. 'name': 'Отправить JS-код' {C:$0000FF} Я не знаю. }; LogStatus (('`' + JSON.stringify ((table) + '`') var str_cmd = GetCommand (); if (str_cmd) { Log (("принятые данные взаимодействия str_cmd:", "тип:", typeof ((str_cmd), "значение:", str_cmd); {y:bi} if (str_cmd && str_cmd.split ((':', 2)[0] == "JScode") { // определяет, есть ли сообщение var js = str_cmd.split ((':', 2) [1]; // разделение Возвращенное сообщение Структура, ограничивающая возвращение 2 элементов с индексом 1 Присвоение значения переменной под названием js Log (("выполнить дешифровку кода:", js); // выводить выполненный код try { // обнаружение ошибок eval ((js); // выполняет функцию eval, которая выполняет вводимые параметры ((код)). } catch (e) { // Выбросить исключение Log (("Exception", e); // Высылает ошибку {y:bi} {y:bi} Sleep ((500); {y:bi} {y:bi} `` Первый вопрос: числовые типы теперь совместимы, это тоже предварительная версия, я изменил следующую документацию. Спасибо за предложение ^^

Маленькие мечтыВ настоящее время внедряется только в форме статуса кнопки "Добавить кнопку", другие элементы не поддерживаются ^^.