楼主: Dear_Li
659 0

[源码分享] 策略程序的一般架构 [推广有奖]

  • 0关注
  • 14粉丝

等待验证会员

博士生

64%

还不是VIP/贵宾

-

威望
0
论坛币
686 个
通用积分
7.6246
学术水平
12 点
热心指数
16 点
信用等级
2 点
经验
4905 点
帖子
186
精华
0
在线时间
246 小时
注册时间
2018-7-21
最后登录
2019-1-16

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
策略程序的一般架构、一个策略框架

策略的一般架构

在发明者量化教程 2.6 期货 章节 我们已经初步使用了CTP商品期货常用的程序架构(轮询式)

  1. function MainLoop(){ //  处理具体工作的函数
  2.   // deal Main task
  3. }
  4. function main() {
  5.       var status = null;
  6.       while(true){
  7.           status = exchange.IO("status");      //  调用API 确定连接状态
  8.           if(status === true){                 //  判断状态
  9.               LogStatus("已连接!");
  10.               MainLoop();                      //  连接上 交易所服务器后,执行主要工作函数。
  11.           }else{                               //  如果没有连接上 即 exchange.IO("status") 函数返回 false
  12.               LogStatus("未连接状态!");         //  在状态栏显示 未连接状态。
  13.           }
  14.           Sleep(1000);                         //  需要有轮询间隔, 以免访问过于频繁。
  15.       }
  16. }
复制代码

那么数字货币策略的一般架构是什么样的呢? 同样是轮询方式的,其实比商品期货的更加简单:

  1. //other functions
  2. function f1(){
  3.     //...
  4. }
  5. //...
  6. function loop(){
  7.     // do somethings
  8.     f1();
  9.     //...
  10.     //API...
  11. }
  12. function main(){
  13.     //初始化
  14.     //...
  15.    
  16.     while(true){
  17.         loop();
  18.         Sleep(1000);
  19.     }
  20. }
复制代码

那有同学问: 架构是轮询的,有没有并发执行机制呢?


发明者量化平台已经封装了部分 API 用以支持 并发机制: 发明者量化 - API文档

模拟多任务模式

代码架构: (我本身也是菜鸟,架构是学习Z大的,如有错误 欢迎指出)

  1. // 其它函数
  2. function buy(){
  3.     Log("buy");
  4. }
  5. //任务生成器构造函数
  6. function MakeTasksController(){
  7.     var TasksController = {};
  8.     TasksController.tasks = [];  // 任务数组
  9.     TasksController.initTask = function(cmd){ // 初始化要执行的任务参数、设置
  10.         var task = {
  11.             //各种任务 数据
  12.             cmd : 0,     // 命令: 0:waiting , 1: buy
  13.             state: 0,    // 状态: 0:uncomplete  1: complete
  14.             //...
  15.         };
  16.         task.cmd = cmd;
  17.         //task.XX  初始化
  18.         TasksController.tasks.push(task);   // 存入 任务数组
  19.     };
  20.     TasksController.DealWithTasks = function(){  // 处理  tasks 数组内 储存的task
  21.         _.each(TasksController.tasks, function(task){  // 迭代 执行全部任务
  22.             // 处理任务task ,保存每个任务的状态数据,直到任务完成。在处理任务的具体代码中 不做死循环处理。
  23.             // 即每个任务不独占时间。下次轮询 读取task 数据继续任务。从而实现模拟多任务模式。
  24.             // ...
  25.             if(task.cmd === 1){
  26.                 buy();
  27.                 task.state = 1; // 任务执行完成就调用 赋值语句 给task.state 标记赋值
  28.             }
  29.         });
  30.     };
  31.     TasksController.CheckTask = function(){
  32.         var process = 0;
  33.         _.each(TasksController.tasks, function(task){
  34.             if(task.state === 1){
  35.                 // 任务已经完成,弹出完成的任务。
  36.                 Log("task.cmd:", task.cmd, "已完成!");
  37.             }else{
  38.                 process++;
  39.             }
  40.         });
  41.         if(process === 0){
  42.             TasksController.tasks = [];    // 清空 任务数组
  43.         }
  44.     };
  45.     return TasksController;
  46. }
  47. function main(){
  48.     var tasksController = MakeTasksController();
  49.     var count = 0;
  50.     while(true){
  51.         //触发新建任务,例子。
  52.         if(count === 100){
  53.             tasksController.initTask(1);   //  初始化任务,   buy 任务  即  1
  54.             //...  初始其它任务。
  55.         }
  56.         //...      
  57.         tasksController.DealWithTasks();  // 处理任务
  58.         tasksController.CheckTask();      // 检查任务处理
  59.         count++;
  60.         Sleep(200);   //  任务很多的时候 可以适当减小 Sleep 的参数值
  61.     }
  62. }
复制代码


一个完整的交易系统都要包含哪些模块呢?

1、 收益统计模块。
2、 UI界面、数据反馈、状态显示。
3、 交互模块。
4、 图表模块。
5、 策略逻辑(具体交易算法)
6、 交易模块。
7、 数据处理模块。


一个简单的策略框架:简单的策略框架(可以自行修改扩展)


这个策略框架基本上就是 之前的学习内容。各个方面代码组合起来的,仔细阅读代码,你会发现很熟悉。直接可以运行,不过没有写任何 触发*作的代码,可以自行扩展。下一章,我们会动手扩展这个策略框架,让策略真正的跑起来。


二维码

扫码加我 拉你入群

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

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

关键词:策略程序 策略框架 量化交易

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

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

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

GMT+8, 2024-5-4 15:44