策略程序的一般架构

作者: 发明者量化FMZ | 来源:发表于2017-09-26 14:05 被阅读79次

    策略程序的一般架构、一个策略框架


    • 策略的一般架构

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

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

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

    //other functions
    function f1(){
        //...
    }
    //...
    function loop(){
        // do somethings
        f1();
        //...
        //API...
    }
    function main(){
        //初始化
        //...
        
        while(true){
            loop();
            Sleep(1000);
        }
    }
    

    那有同学问: 架构是轮询的,有没有并发执行机制呢?
    BotVS 平台已经封装了部分 API 用以支持 并发机制,如下图: (详见API文档)

    https://dn-filebox.qbox.me/eeffed14c0fc1db9948c01f46ed7ae29e7683ad7.png

    • 模拟多任务模式

      代码架构: (我本身也是菜鸟,架构是学习Z大的,如有错误 欢迎指出)
    // 其它函数
    function buy(){
        Log("buy");
    }
    //任务生成器构造函数
    function MakeTasksController(){
        var TasksController = {};
        TasksController.tasks = [];  // 任务数组
        TasksController.initTask = function(cmd){ // 初始化要执行的任务参数、设置
            var task = {
                //各种任务 数据
                cmd : 0,     // 命令: 0:waiting , 1: buy 
                state: 0,    // 状态: 0:uncomplete  1: complete
                //...
            };
            task.cmd = cmd;
            //task.XX  初始化
            TasksController.tasks.push(task);   // 存入 任务数组
        };
        TasksController.DealWithTasks = function(){  // 处理  tasks 数组内 储存的task
            _.each(TasksController.tasks, function(task){  // 迭代 执行全部任务
                // 处理任务task ,保存每个任务的状态数据,直到任务完成。在处理任务的具体代码中 不做死循环处理。 
                // 即每个任务不独占时间。下次轮询 读取task 数据继续任务。从而实现模拟多任务模式。 
                // ...
                if(task.cmd === 1){
                    buy();
                    task.state = 1; // 任务执行完成就调用 赋值语句 给task.state 标记赋值
                }
            });
        };
        TasksController.CheckTask = function(){
            var process = 0;
            _.each(TasksController.tasks, function(task){
                if(task.state === 1){
                    // 任务已经完成,弹出完成的任务。
                    Log("task.cmd:", task.cmd, "已完成!");
                }else{
                    process++;
                }
            });
            if(process === 0){
                TasksController.tasks = [];    // 清空 任务数组
            }
        };
        return TasksController;
    }
    function main(){
        var tasksController = MakeTasksController();
        var count = 0;
        while(true){
            //触发新建任务,例子。
            if(count === 100){
                tasksController.initTask(1);   //  初始化任务,   buy 任务  即  1 
                //...  初始其它任务。
            }
            //...      
            tasksController.DealWithTasks();  // 处理任务
            tasksController.CheckTask();      // 检查任务处理
            count++;
            Sleep(200);   //  任务很多的时候 可以适当减小 Sleep 的参数值
        }
    }
    
    • 一个完整的交易系统都要包含哪些模块呢?

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

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

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

    附带 招贤纳士
    BotVS 招贤纳士,共创未来。
    轻松、平等、简单的公司氛围,简约高效的工作流程。我们每个人都在做着自己挚爱的事情,每天都在用努力回报明天。
    技术类
    1、前端程序员(全职)

    岗位职责:
    1.负责公司软件产品的页面功能的开发、测试、优化。
    2.能够独立完成各级页面的UI设计。
    3.重视用户体验,不断优化用户视觉体验。
    4.负责公司产品易用性改进、形成团队的前端框架与编码规范,形成模块化。
    岗位要求:
    1.熟练掌握 HTML5、CSS3、JavaScript等Web前端开发技术。
    2.熟练掌握 Ajax、DOM、XML、JSON 等相关技术,熟练掌握 JavaScript 语言。
    3.熟练掌握 AngularJS 框架、 JQuery。
    4.具有良好的团队合作、踏实钻研的精神,热爱工作中的挑战。
    优先条件:
    1.熟练使用Photoshop、AI、AE等设计相关软件。
    2.了解W3C标准,且能很好解决不同浏览器兼容性。
    2、金融量化程序员(全职)

    岗位职责:

    1. 负责设计、研发以及优化量化投资策略。
    2. 开发、改进能够直接用于交易决策的算法和模型。
    3. 负责交易策略程序的编写、调试、优化、维护以及监控。
    4. 负责策略的回测、实盘跟踪和改进工作。
    5. 在现有交易系统框架上开发新的功能,设计对冲方案,发掘投资机会。
      岗位要求:
    6. 统招专科及以上学历(能力、技术过硬者,可放宽要求)。
    7. 具备优秀的逻辑思维能力。
    8. 对量化投资有强大兴趣,立志于在量化交易领域发展,有明确、长远的从业目标。
    9. 为人正直、诚恳,工作积极主动,责任心强,有保密意识,具有出色的沟通能力和团队合作精神。
    10. 编程语言要求 JavaScript 、 Python 等, 如有较强的学习能力,能在短时间内掌握,可放宽要求。
    11. 熟知证券衍生产品原理和风控模型等知识。
      优先条件:
      1.具备良好的数学基础,对数据统计、分析、概率论等方面有所了解、研究。
      2.计算机科学、计算机工程及相关专业,金融、数学相关专业。
      3.熟悉、掌握多门编程语言;
      4.了解期货、股票、外汇交易相关知识且有金融类软件研发或程序化交易产品研发经验者优先。
      需要在简历中提供以下信息:

    1.技能树,如图(例子):

    2.薪资要求,薪资范围。
    3.从业目的。
    简历发送至:359706687@qq.com

    相关文章

      网友评论

        本文标题:策略程序的一般架构

        本文链接:https://www.haomeiwen.com/subject/urusextx.html