策略程序的通常架構

策略程序的通常架構、一個策略框架javascript

 

策略的通常架構

在發明者量化教程 2.6 期貨 章節 咱們已經初步使用了CTP商品期貨經常使用的程序架構(輪詢式)html

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);                         //  須要有輪詢間隔, 以避免訪問過於頻繁。
      }
}

 

那麼數字貨幣策略的通常架構是什麼樣的呢? 一樣是輪詢方式的,其實比商品期貨的更加簡單:java

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

那有同窗問: 架構是輪詢的,有沒有併發執行機制呢?算法

發明者量化平臺已經封裝了部分 API 用以支持 併發機制,詳見發明者量化 - API文檔數組

 

模擬多任務模式

代碼架構: (我自己也是菜鳥,架構是學習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 的參數值
    }
}

 

一個完整的交易系統都要包含哪些模塊呢? 一、 收益統計模塊。 二、 UI界面、數據反饋、狀態顯示。 三、 交互模塊。 四、 圖表模塊。 五、 策略邏輯(具體交易算法) 六、 交易模塊。 七、 數據處理模塊。架構

 

一個簡單的策略框架:簡單的策略框架(能夠自行修改擴展)併發

 

這個策略框架基本上就是 以前的學習內容。各個方面代碼組合起來的,仔細閱讀代碼,你會發現很熟悉。直接能夠運行,不過沒有寫任何 觸發*做的代碼,能夠自行擴展。下一章,咱們會動手擴展這個策略框架,讓策略真正的跑起來。框架

閱讀原文ide

相關文章
相關標籤/搜索