avatar of 发明者量化-小小梦 发明者量化-小小梦
konzentrieren Sie sich auf Private Nachricht
4
konzentrieren Sie sich auf
1271
Anhänger

Erstellen Sie eine interaktive Schaltflächenfunktion in der Strategiestatusleiste

Erstellt in: 2017-06-13 15:24:05, aktualisiert am: 2024-09-10 14:06:33
comments   22
hits   3888

Erstellen Sie eine interaktive Schaltflächenfunktion in der Strategiestatusleiste

  • #### Beschreibung im API-Dokument
  // 也可以构造一个按钮在表格中, 策略用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': '平仓'}) + '`')

Die API-Dokumentation zeigt in der Strategie-Status-Tabelle Tabellen, Strings, Grafiken, Diagramme und so weiter an, indem die API-Funktion aufgerufen wird:LogStatusDas ist der Fall. Wir können auch ein interaktives Button einrichten, indem wir eine JSON-Datenstruktur erstellen.

  • #### DEMO-Quelle:
  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);
      }
  }

### Die Strategie funktioniert folgendermaßen:

Erstellen Sie eine interaktive Schaltflächenfunktion in der Strategiestatusleiste

### Wir können auf die Schaltfläche auf der Statusleiste klicken, um die Interaktion auszulösen.

Wenn Sie auf die Schaltfläche “Höllen” klicken, können Sie normalerweise Nachrichten senden:

Erstellen Sie eine interaktive Schaltflächenfunktion in der Strategiestatusleiste

  > 但是点击  “发送数值” 的时候就不行了,原因是[ ```'cmd': 10,                              // 数值``` ]这里是 10  。不能发送数值类型。

  ![Erstellen Sie eine interaktive Schaltflächenfunktion in der Strategiestatusleiste](/upload/asset/2d8e0f86599f1b82da792544b7b840bc824d4a96.png) 
  # 已经优化 兼容了 数值,返回的 为数值形式的 字符串。

### Dann klicken wir auf die Funktion aufrufen, um zu testen, ob die aufgerufene Funktion ist._Funktion D (),_D ((() Die Funktion wird immer wieder die aktuelle Zeitstring zurückgeben, so dass hier, wenn eine Funktionsanrufung geschrieben wird, sie immer wieder aufgerufen wird.

Erstellen Sie eine interaktive Schaltflächenfunktion in der Strategiestatusleiste

Die Daten, die in den Tagebüchern eingehen, sind wie folgt:

Erstellen Sie eine interaktive Schaltflächenfunktion in der Strategiestatusleiste

### Schließlich klicken wir auf die Schaltfläche “Send JS Code” und wir können die benutzerdefinierten Funktionen ausführen, die wir in unserem Code testen.

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

Klick auf die Schaltfläche:

Erstellen Sie eine interaktive Schaltflächenfunktion in der Strategiestatusleiste

Sie können sehen, dass die Funktion test1 ausgeführt wurde.Log("调用自定义函数,参数:", p);Die Aussage:

  • #### In Code eingefügt.'class': 'btn btn-xs btn-danger',Die Stile können das Aussehen des Buttons verändern.

Erstellen Sie eine interaktive Schaltflächenfunktion in der Strategiestatusleiste

Erstellen Sie eine interaktive Schaltflächenfunktion in der Strategiestatusleiste

Das ist eine sehr schwierige Aufgabe, die ich nicht bewältigen kann.