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();
Без параметров -
- $.AddData(p1, p2, p3); // Добавить контент в конец таблицы в поле состояния.
Параметр p1 : индекс таблицы, которую нужно добавить, 0 - первый, 1 - второй (при условии, что $.Relation_Exchange_onTick уже связывает вторую биржу)
Параметр p2: Название атрибута добавленного контента, в данном случае данные добавленного индикатора отображаются в таблице состояния ◦ ((MA и MACD))
Параметр p3: строка, передает данные, которые мы хотим отобразить, в строку p3 в этом параметре.
- $.AddData(p1, p2, 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); // 没有任何 触发,发送等待命令。 } -
Запуск показывает:
-
Интерактивные функции шаблона стратегии
Поскольку шаблоны не имеют возможности добавлять интерактивные элементы, они могут быть добавлены только в политику, ссылающуюся на шаблоны фреймворка политики фрейма.
Что делать?- При добавлении в стратегическое взаимодействие элемента строчного типа, имя элемента записывается как JS_code, как показано на рисунке:

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

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

4 , формат команды CMD ((index, CMD_STR, amount)
Первый параметр: index указывает, какая биржа будет работать, index ставится на 0, то есть первая биржа будет работать, и так далее.
Второй параметр: команды, отображаемые в начале таблицы.
Третий параметр: количество операций.Другие команды используют тот же метод.
- При добавлении в стратегическое взаимодействие элемента строчного типа, имя элемента записывается как JS_code, как показано на рисунке:
Логика сделки написана случайно, не пишите на дисках! ↓ Если BUG предлагает, приветствую!





