策略程式的一般架構

步入量化學習艾莉絲發表於2019-01-03

策略程式的一般架構、一個策略框架

策略的一般架構

在發明者量化教程 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 functionsfunction 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 的引數值
}
}複製程式碼

一個完整的交易系統都要包含哪些模組呢?1、 收益統計模組。2、 UI介面、資料反饋、狀態顯示。3、 互動模組。4、 圖表模組。5、 策略邏輯(具體交易演算法)6、 交易模組。7、 資料處理模組。

一個簡單的策略框架:簡單的策略框架(可以自行修改擴充套件)

這個策略框架基本上就是 之前的學習內容。各個方面程式碼組合起來的,仔細閱讀程式碼,你會發現很熟悉。直接可以執行,不過沒有寫任何 觸發*作的程式碼,可以自行擴充套件。下一章,我們會動手擴充套件這個策略框架,讓策略真正的跑起來。

閱讀原文

來源:https://juejin.im/post/5c2dcc9e6fb9a04a0604fd1f

相關文章