楼主: littleDreamX
1617 0

[源码分享] 分享Dual Thrust 商品期货(甲醇)转自BotVS [推广有奖]

  • 0关注
  • 4粉丝

本科生

2%

还不是VIP/贵宾

-

威望
0
论坛币
125 个
通用积分
0
学术水平
10 点
热心指数
15 点
信用等级
5 点
经验
701 点
帖子
36
精华
0
在线时间
34 小时
注册时间
2016-4-11
最后登录
2018-5-22

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
最近在BotVS上学习,看到这个经典策略,感觉不错 特来分享。
> 基本原理

- 在当天收盘,计算两个值: 最高价-收盘价,和收盘价-最低价。然后取这两个值较大的那个,乘以k值,结果称为触发值。
- 在第二天开盘,记录开盘价,然后在价格超过(开盘+触发值)时马上买入,或者价格低于(开盘-触发值)时马上卖空。
- 这个系统是反转系统,没有单独止损。也就是说,反向信号也同时就是平仓信号。

> 图解



`Dual Thrust 策略包含完整的图表显示, 图表动态更新,模板引用等功能, 可做学习模板使用.`

策略的详细介绍 : http://xueqiu.com/5256769224/32429363参数:
QQ图片20160516101055.png

  1. var ChartCfg = {
  2.     __isStock: true,
  3.     title: {
  4.         text: 'Dual Thrust 上下轨图'
  5.     },
  6.     yAxis: {
  7.         plotLines: [{
  8.             value: 0,
  9.             color: 'red',
  10.             width: 2,
  11.             label: {
  12.                 text: '上轨',
  13.                 align: 'center'
  14.             },
  15.         }, {
  16.             value: 0,
  17.             color: 'green',
  18.             width: 2,
  19.             label: {
  20.                 text: '下轨',
  21.                 align: 'center'
  22.             },
  23.         }]
  24.     },
  25.     series: [{
  26.         type: 'candlestick',
  27.         name: '当前周期',
  28.         id: 'primary',
  29.         data: []
  30.     }, {
  31.         type: 'flags',
  32.         onSeries: 'primary',
  33.         data: [],
  34.     }]
  35. };

  36. var STATE_IDLE = 0;
  37. var STATE_LONG = 1;
  38. var STATE_SHORT = 2;
  39. var State = STATE_IDLE;

  40. var LastBarTime = 0;
  41. var UpTrack = 0;
  42. var BottomTrack = 0;
  43. var chart = null;
  44. var Counter = {
  45.     w: 0,
  46.     l: 0
  47. };

  48. var manager = null;
  49. var logSuffix = NotifyWX ? '@' : '';

  50. function onTick(exchange) {
  51.     if (!manager) {
  52.         if (_C(exchange.GetPosition).length > 0) {
  53.             throw "策略启动前不能有持仓.";
  54.         }
  55.         Log('交易平台:', exchange.GetName(), _C(exchange.GetAccount));
  56.         var insDetail = _C(exchange.SetContractType, ContractTypeName);
  57.         Log("合约", insDetail.InstrumentName, "一手", insDetail.VolumeMultiple, "份, 最大下单量", insDetail.MaxLimitOrderVolume, "保证金率:", insDetail.LongMarginRatio.toFixed(4), insDetail.ShortMarginRatio.toFixed(4), "交割日期", insDetail.StartDelivDate);
  58.         manager = $.NewPositionManager();
  59.     }

  60.     var records = _C(exchange.GetRecords);
  61.     if (!records || records.length <= NPeriod) {
  62.         return;
  63.     }
  64.     var Bar = records[records.length - 1];
  65.     if (LastBarTime !== Bar.Time) {
  66.         var HH = TA.Highest(records, NPeriod, 'High');
  67.         var HC = TA.Highest(records, NPeriod, 'Close');
  68.         var LL = TA.Lowest(records, NPeriod, 'Low');
  69.         var LC = TA.Lowest(records, NPeriod, 'Close');

  70.         var Range = Math.max(HH - LC, HC - LL);

  71.         UpTrack = _N(Bar.Open + (Ks * Range));
  72.         DownTrack = _N(Bar.Open - (Kx * Range));
  73.         if (LastBarTime > 0) {
  74.             var PreBar = records[records.length - 2];
  75.             chart.add(0, [PreBar.Time, PreBar.Open, PreBar.High, PreBar.Low, PreBar.Close], -1);
  76.         } else {
  77.             for (var i = Math.min(records.length, NPeriod * 3); i > 1; i--) {
  78.                 var b = records[records.length - i];
  79.                 chart.add(0, [b.Time, b.Open, b.High, b.Low, b.Close]);
  80.             }
  81.         }
  82.         chart.add(0, [Bar.Time, Bar.Open, Bar.High, Bar.Low, Bar.Close]);
  83.         ChartCfg.yAxis.plotLines[0].value = UpTrack;
  84.         ChartCfg.yAxis.plotLines[1].value = DownTrack;
  85.         ChartCfg.subtitle = {
  86.             text: '上轨: ' + UpTrack + '  下轨: ' + DownTrack
  87.         };
  88.         chart.update(ChartCfg);
  89.         chart.reset(PeriodShow);

  90.         LastBarTime = Bar.Time;
  91.     } else {
  92.         chart.add(0, [Bar.Time, Bar.Open, Bar.High, Bar.Low, Bar.Close], -1);
  93.     }

  94.     LogStatus("Price:", Bar.Close, "Up:", UpTrack, "Down:", DownTrack, "Wins: ", Counter.w, "Losses:", Counter.l, "Date:", new Date());
  95.     var msg;
  96.     if (State === STATE_IDLE || State === STATE_SHORT) {
  97.         if (Bar.Close >= UpTrack) {
  98.             msg  = '做多 触发价: ' + Bar.Close + ' 上轨:' + UpTrack;
  99.             if (State !== STATE_IDLE) {
  100.                 manager.Cover(ContractTypeName);
  101.                 var profit = manager.Profit();
  102.                 LogProfit(profit);
  103.                 msg += ' 平仓利润: ' + profit;
  104.             }
  105.             Log(msg + logSuffix);
  106.             manager.OpenLong(ContractTypeName, AmountOP);
  107.             State = STATE_LONG;
  108.             chart.add(1, {x:Bar.Time, color: 'red', shape: 'flag', title: '多', text: msg});
  109.         }
  110.     }

  111.     if (State === STATE_IDLE || State === STATE_LONG) {
  112.         if (Bar.Close <= DownTrack) {
  113.             msg = '做空 触发价: ' + Bar.Close + ' 下轨:' + DownTrack;
  114.             if (State !== STATE_IDLE) {
  115.                 manager.Cover(ContractTypeName);
  116.                 var profit = manager.Profit();
  117.                 LogProfit(profit);
  118.                 msg += ' 平仓利润: ' + profit;
  119.             }
  120.             Log(msg + logSuffix);
  121.             manager.OpenShort(ContractTypeName, AmountOP);
  122.             chart.add(1, {x:Bar.Time, color: 'green', shape: 'circlepin', title: '空', text: msg});
  123.             State = STATE_SHORT;
  124.         }
  125.     }
  126. }

  127. function onexit() {
  128.     var pos = _C(exchange.GetPosition);
  129.     if (pos.length > 0) {
  130.         Log("警告, 退出时有持仓", pos);
  131.     }
  132. }

  133. function main() {
  134.     if (exchange.GetName() !== 'Futures_CTP') {
  135.         throw "只支持传统商品期货(CTP)";
  136.     }
  137.     SetErrorFilter("login|ready");

  138.     LogStatus("Ready...");
  139.     LogProfitReset();
  140.     chart = Chart(ChartCfg);
  141.     chart.reset();

  142.     LoopInterval = Math.max(LoopInterval, 1);
  143.     while (true) {
  144.         if (exchange.IO("status")) {
  145.             onTick(exchange);
  146.         } else {
  147.             LogStatus("未登录状态");
  148.         }
  149.         Sleep(LoopInterval * 1000);
  150.     }
  151. }
复制代码



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Dual Thrust 商品期货 Dual BOT UAL 最低价 开盘价 收盘价 动态 记录

已有 1 人评分经验 论坛币 收起 理由
fantuanxiaot + 33 + 33 精彩帖子

总评分: 经验 + 33  论坛币 + 33   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-24 23:41