楼主: littleDreamX
3623 0

数字货币--网格变形策略之单边网格 (注释版) [推广有奖]

  • 0关注
  • 4粉丝

本科生

2%

还不是VIP/贵宾

-

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

楼主
littleDreamX 发表于 2017-11-6 15:54:29 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

数字货币--网格变形策略之单边网格 (注释版)

策略介绍

  • 网格可以自定义方向
  • 先买后卖:
    网格会从首价格开始向下挂买单, 每个买单间隔 “价格间隔” 这个参数, 挂单数量为”单笔数量”, 挂够 “总数量” 个买单, 有任意买单成交以后, 程序会在买价基础上加 “价差(元)” 这个参数的的值的价格挂出卖单, 卖出, 卖出以后,重新按原来这个网格的价格挂买入单
  • 先卖后买:
    操作刚好相反
  • 策略最大的风险就是单边行情, 价格波动超出网格范围.
  • 网格带有自动止损和移动功能

该策略为数字货币版,商品期货版注释ing...

注释心得:

策略使用了 虚拟挂单设计, 对于交易所 限制挂单数量,做出了很棒的 处理,灵活的解决了该问题。

网格逻辑设计灵活,结构巧妙。

盈亏计算,各个数值统计 算法可借鉴,各个条件检测设计严谨。(能尽量 减少BUG 出现可能)

源代码 非常值得学习。



注释代码

  1. 界面参数 (代码中体现为全局变量)
  2. 变量                                  描述                  类型                       默认值         
  3. OpType                              网格方向                下拉框(selected)           先买后卖|先卖后买
  4. FirstPriceAuto                      首价格自动               布尔型(true/false)         true
  5. FirstPrice@!FirstPriceAuto          首价格                  数字型(number)             100
  6. AllNum                              总数量                  数字型(number)             10
  7. PriceGrid                           价格间隔                数字型(number)              1
  8. PriceDiff                           价差(元)                数字型(number)              2
  9. AmountType                          订单大小                下拉框(selected)           买卖同量|自定义量
  10. AmountOnce@AmountType==0            单笔数量                数字型(number)             0.1
  11. BAmountOnce@AmountType==1           买单大小                数字型(number)             0.1
  12. SAmountOnce@AmountType==1           卖单大小                数字型(number)             0.1
  13. AmountCoefficient@AmountType==0     量差                    字符串(string)             *1
  14. AmountDot                           量小数点最长位数          数字型(number)             3
  15. EnableProtectDiff                   开启价差保护             布尔型(true/false)         false
  16. ProtectDiff@EnableProtectDiff       入市价差保护             数字型(number)              20
  17. CancelAllWS                         停止时取消所有挂单        布尔型(true/false)         true
  18. CheckInterval                       轮询间隔                数字型(number)              2000
  19. Interval                            失败重试间隔             数字型(number)              1300
  20. RestoreProfit                       恢复上次盈利             布尔型(true/false)          false
  21. LastProfit@RestoreProfit            上次盈利                数字型(number)               0
  22. ProfitAsOrg@RestoreProfit           上次盈利算入均价          布尔型(true/false)          false
  23. EnableAccountCheck                  启用资金检验             布尔型(true/false)          true
  24. EnableStopLoss@EnableAccountCheck   开启止损                布尔型(true/false)          false
  25. StopLoss@EnableStopLoss             最大浮动亏损(元)         数字型(number)              100
  26. StopLossMode@EnableStopLoss         止损后操作              下拉框(selected)             回收并退出|回收再撒网
  27. EnableStopWin@EnableAccountCheck    开启止盈                布尔型(true/false)           false
  28. StopWin@EnableStopWin               最大浮动盈利(元)         数字型(number)               120
  29. StopWinMode@EnableStopWin           止盈后操作               下拉框(selected)            回收并退出|回收再撒网
  30. AutoMove@EnableAccountCheck         自动移动                 布尔型(true/false)          false
  31. MaxDistance@AutoMove                最大距离(元)             数字型(number)               20
  32. MaxIdle@AutoMove                    最大空闲(秒)             数字型(number)               7200
  33. EnableDynamic                       开启动态挂单              布尔型(true/false)          false
  34. DynamicMax@EnableDynamic            订单失效距离(元)          数字型(number)               30
  35. ResetData                           启动时清空所有数据         布尔型(true/false)           true
  36. Precision                           价格小数位长度            数字型(number)                5function hasOrder(orders, orderId) {                           // 检测 参数 orders 中 是否有  ID 为 orderId 的订单
  37.     for (var i = 0; i < orders.length; i++) {                  // 遍历 orders 检测 是否 有相同的 id , 找到 返回 true
  38.         if (orders[i].Id == orderId) {
  39.             return true;
  40.         }
  41.     }
  42.     return false;                                              // 全部遍历完 ,没有触发 if 则 没有找到 ID 为 orderId 的订单, 返回 false
  43. }


  44. function cancelPending() {                                      // 取消所有挂单 函数
  45.     var ret = false;                                            // 设置 返回成功  标记变量
  46.     while (true) {                                              // while 循环
  47.         if (ret) {                                              // 如果 ret 为 true 则 Sleep 一定时间
  48.             Sleep(Interval);
  49.         }
  50.         var orders = _C(exchange.GetOrders);                    // 调用  API 获取 交易所 未完成的订单信息
  51.         if (orders.length == 0) {                               // 如果返回的是  空数组, 即 交易所 没有未完成的订单。
  52.             break;                                              // 跳出 while 循环
  53.         }

  54.         for (var j = 0; j < orders.length; j++) {               // 遍历 未完成的 订单数组, 并根据索引j 逐个使用  orders[j].Id 去 取消订单。
  55.             exchange.CancelOrder(orders[j].Id, orders[j]);
  56.             ret = true;                                         // 一旦有取消操作, ret 赋值 为 true 。用于触发 以上 Sleep , 等待后重新 exchange.GetOrders 检测
  57.         }
  58.     }
  59.     return ret;                                                 // 返回 ret
  60. }

  61. function valuesToString(values, pos) {                      // 值 转换 为字符串
  62.     var result = '';                                        // 声明一个用于返回的  空字符串  result
  63.     if (typeof(pos) === 'undefined') {                      // 如果 没有传入  pos 这个参数 ,给 pos 赋值 0
  64.         pos = 0;
  65.     }
  66.     for (var i = pos; i < values.length; i++) {             // 根据 传入的 pos 处理 values 数组
  67.         if (i > pos) {                                      // 除了第一次 循环 之后 在result 字符串后 加上 ' ' 一个空格
  68.             result += ' ';
  69.         }
  70.         if (values[i] === null) {                           // 如果 values (函数 参数列表 数组) 当前的索引的 元素 为 null 则 result 添加 'null'字符串
  71.             result += 'null';
  72.         } else if (typeof(values[i]) == 'undefined') {      // 如果 是 未定义的, 则添加 'undefined'
  73.             result += 'undefined';
  74.         } else {                                            // 剩余类型 做 switch 检测 分别处理
  75.             switch (values[i].constructor.name) {           // 检查 values[i] 的 constructor 的 name 属性, 即类型 名称
  76.                 case 'Date':
  77.                 case 'Number':
  78.                 case 'String':
  79.                 case 'Function':
  80.                     result += values[i].toString();         // 如果是 日期类型、数值类型、字符串类型、函数类型 ,调用其 toString 函数 转换为字符串 后,添加
  81.                     break;
  82.                 default:
  83.                     result += JSON.stringify(values[i]);    // 其他情况 则 使用JSON.stringify 函数 转换为 JSON 字符串 添加到 result
  84.                     break;
  85.             }
  86.         }
  87.     }
  88.     return result;                                          // 返回 result
  89. }      // 代码超出字数限制了,所以 节选到此。
复制代码

欢迎来BotVS 一起学习

原文转载自知乎: https://zhuanlan.zhihu.com/p/29116726

源码地址【 BotVS】 : https://www.botvs.com/bbs-topic/1069


二维码

扫码加我 拉你入群

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

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

关键词:数字货币 coefficient Undefined PRECISION EFFICIENT 量化交易 量化交易策略 比特币

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

本版微信群
加好友,备注jr
拉您进交流群
GMT+8, 2025-12-26 01:11