4
Подписаться
1271
Подписчики

3.5 Шаблон рамочной политики

Создано: 2017-01-19 16:04:24, Обновлено: 2017-10-11 10:27:27
comments   4
hits   5727

3.5 Шаблон рамочной политики


С помощью шаблона рамки стратегий можно создавать простые трендовые стратегии с небольшим количеством кода, а также писать стратегии типа хеджирования, если есть определенная программа.

3.5 Шаблон рамочной политики

  • Как это сделать:

      1. Найдите этот шаблон на площадке стратегий, как показано выше, и скопируйте его в центр управления своей учетной записью.
      1. При написании стратегии ссылаться на шаблоны фреймворков стратегий, как показано ниже:

    3.5 Шаблон рамочной политики

  • Вставьте код стратегии в строке шаблона стратегии в тестовой строке ((в строке шаблона выберите строку шаблона стратегии в строке шаблона):

  var TASK_IDLE = 0;          // 空闲状态命令
  var TASK_OPEN_LONG = 1;     // 建多仓命令
  var TASK_OPEN_SHORT = 2;    // 建空仓命令
  var TASK_ADD = 3;           // 加仓命令
  var TASK_ST = 4;            // 止损命令
  var TASK_COVER = 5;         // 平仓命令
  function onTick1() {        // 趋势系统1: 均线  具体买卖逻辑实现
      // MA 
      var records = _C(exchanges[0].GetRecords);
      if(records.length < 11){
          return $.TaskCmd(TASK_IDLE);
      }
      var ema_fast = TA.MA(records, 7);
      var ema_slow = TA.MA(records, 10);
      var data = "fast[-2]:" + ema_fast[ema_fast.length - 2] + " slow[-2]" + ema_slow[ema_slow.length - 2] + " fast[-1]:" + ema_fast[ema_fast.length - 1] + " slow[-1]:" + ema_slow[ema_slow.length - 1];
      $.AddData(0, "MA", data);
      if (ema_fast[ema_fast.length - 1] < ema_slow[ema_slow.length - 1] && ema_fast[ema_fast.length - 2] > ema_slow[ema_slow.length - 2]) {
          return $.TaskCmd(TASK_COVER);
      }else if(ema_fast[ema_fast.length - 1] > ema_slow[ema_slow.length - 1] && ema_fast[ema_fast.length - 2] < ema_slow[ema_slow.length - 2]){
          return $.TaskCmd(TASK_OPEN_LONG, 0.5);
      }
      return $.TaskCmd(TASK_IDLE);
  }
  function onTick2() {        // 趋势系统2:MACD  具体买卖逻辑实现
      // MACD
      var records = _C(exchanges[1].GetRecords);
      if(records.length < 15){
          return $.TaskCmd(TASK_IDLE);
      }
      var macd = TA.MACD(records);
      var dif = macd[0];
      var dea = macd[1]; 
      var data = "dif[-2]:" + dif[dif.length - 2] + " dea[-2]" + dea[dea.length - 2] + " dif[-1]:" + dif[dif.length - 1] + " dea[-1]:" + dea[dea.length - 1];
      $.AddData(1, "MACD", data);
      if (dif[dif.length - 1] > dea[dea.length - 1] && dif[dif.length - 2] < dea[dea.length - 2]) {
          return $.TaskCmd(TASK_COVER);
      }else if(dif[dif.length - 1] < dea[dea.length - 1] && dif[dif.length - 2] > dea[dea.length - 2]){
          return $.TaskCmd(TASK_OPEN_LONG, 0.8);
      }
      return $.TaskCmd(TASK_IDLE);
  }
  function main() {
      $.Relation_Exchange_onTick(exchanges[0], onTick1);    // 把 添加的第一个交易所  关联  趋势系统1 即 均线MA 
      $.Relation_Exchange_onTick(exchanges[1], onTick2);    // 把 添加的第二个交易所  关联  趋势系统2 即 MACD
      $.Trend();  // 不用传参数。                             // 启动模板
  }
  • Функция экспорта:

    • Заказ:
  TASK_IDLE = 0;          // 空闲状态命令
  TASK_OPEN_LONG = 1;     // 建多仓命令
  TASK_OPEN_SHORT = 2;    // 建空仓命令
  TASK_ADD = 3;           // 加仓命令
  TASK_ST = 4;            // 止损命令
  TASK_COVER = 5;         // 平仓命令

Эти состояния должны быть определены внутри стратегии, иначе шаблон не будет распознаваться.

  • 1、 $.Relation_Exchange_onTick(p1, p2); Параметр p1: Объекты биржи, например exchanges[0] - первый объект биржи, добавленный на странице конфигурации робота. Параметр p2: Заданная логическая функция сделки, такая как функция onTick1 в примере, может быть введена в название функции.

  • 2、 \(.TaskCmd(p1, p2); Параметр p1 : команды, отправленные в шаблон для выполнения, например: TASK_OPEN_LONG // создать команды многокласса Параметр p2: При отправке команд TASK_IDLE, TASK_COVER параметры могут не передаваться. Другие команды должны сопровождаться количественным параметром p2, который указывает на количество операций. Вызов требует return \).TaskCmd(p1, p2); возвращается в функции onTick.

  • 3、 $.Trend(); Без параметров

    1. \(.AddData(p1, p2, p3); // Добавить контент в конец таблицы в поле состояния. Параметр p1 : индекс таблицы, которую нужно добавить, 0 - первый, 1 - второй (при условии, что \).Relation_Exchange_onTick уже связывает вторую биржу) Параметр p2: Название атрибута добавленного контента, в данном случае данные добавленного индикатора отображаются в таблице состояния ◦ ((MA и MACD))

    Параметр p3: строка, передает данные, которые мы хотим отобразить, в строку p3 в этом параметре.

  • Вот анализ кода функции onTick1 для логики сделки в примере:

  function onTick1() {        // 趋势系统1: 均线  具体买卖逻辑实现
      // MA 
      var records = _C(exchanges[0].GetRecords); // 用跟 onTick1 函数 绑定的交易所 exchanges[0] 对象 获取该交易所的K线数据。
      if(records.length < 11){                   // 判断K线数据是否足够长度
          return $.TaskCmd(TASK_IDLE);           // K线数据长度不足时,发送等待命令。程序则不执行下面的代码。
      }
      var ema_fast = TA.MA(records, 7);          // 根据长度足够的K线数据计算 周期为7 的均线数据 即: 快线
      var ema_slow = TA.MA(records, 10);         // 计算 慢线
      var data = "fast[-2]:" + ema_fast[ema_fast.length - 2] + " slow[-2]" + ema_slow[ema_slow.length - 2] + " fast[-1]:" + ema_fast[ema_fast.length - 1] + " slow[-1]:" + ema_slow[ema_slow.length - 1];
      // 处理数据 组合为 字符串 data
      $.AddData(0, "MA", data);                  // 向状态栏表格 添加数据显示
      if (ema_fast[ema_fast.length - 1] < ema_slow[ema_slow.length - 1] && ema_fast[ema_fast.length - 2] > ema_slow[ema_slow.length - 2]) {               // 平仓触发判断
          return $.TaskCmd(TASK_COVER);          // 发送平仓命令
      }else if(ema_fast[ema_fast.length - 1] > ema_slow[ema_slow.length - 1] && ema_fast[ema_fast.length - 2] < ema_slow[ema_slow.length - 2]){           // 开仓触发判断
          return $.TaskCmd(TASK_OPEN_LONG, 0.5); // 发送开多仓命令
      }
      return $.TaskCmd(TASK_IDLE);               // 没有任何 触发,发送等待命令。
  }
  • #### Запуск показывает:

3.5 Шаблон рамочной политики

3.5 Шаблон рамочной политики

  • #### Интерактивные функции шаблона стратегии

Поскольку шаблоны не имеют возможности добавлять интерактивные элементы, они могут быть добавлены только в политику, ссылающуюся на шаблоны фреймворка политики фрейма. Что делать? 1. При добавлении в стратегическое взаимодействие элемента строчного типа, имя элемента записывается как JS_code, как показано на рисунке: 3.5 Шаблон рамочной политики

2, затем нажмите на зеленый знак плюс, затем нажмите сохранить. 3.5 Шаблон рамочной политики

  1. Во время выполнения стратегии все команды отображаются и могут быть непосредственно скопированы, чтобы дать команду стратегии. 3.5 Шаблон рамочной политики

4 , формат команды CMD ((index, CMD_STR, amount) Первый параметр: index указывает, какая биржа будет работать, index ставится на 0, то есть первая биржа будет работать, и так далее. Второй параметр: команды, отображаемые в начале таблицы. Третий параметр: количество операций.

Примеры: 3.5 Шаблон рамочной политики

Другие команды используют тот же метод.

Логика сделки написана случайно, не пишите на дисках! ↓ Если BUG предлагает, приветствую!