今天和一位好友聊天,我發現他對於量化、程序化、編程、代碼、算法、自動化交易的根本概念沒有搞清楚,遂寫一篇文章解疑釋惑。
1、首先,什么是量化交易呢?
百度定義如下:量化交易是指以先進的數學模型替代人為的主觀判斷,利用計算機技術從龐大的歷史數據中海選能帶來超額收益的多種“大概率”事件以制定策略,進而交易的過程。
量化交易是一個很大的范疇,其核心是用數學模型或者說明確的交易規則指導交易,而不是純主觀判斷。例如這就是一個量化的過程:
(1)思想:看見大陽線就買入
(2)量化過程:大陽線有大有小,何為大何為小?那么我根據歷史數據通過計算機統計發現,該品種在當前時間框架下,K線實體是前一個K線實體的2.5倍的情況下就是大K線了。該統計經過了10年數據驗證,具有統計學意義上的差異,所以我認為目前是可靠的。
(3)量化規則的創立:
只要是陽線,而且實體體積是前一K線實體的2.5倍,就買入。
量化,顧名思義就是數量化,就是把模糊的東西精確化,定量分析。聰明的你發現了一個大問題!這太局限啊,難道3倍5倍的就不是大陽線了,這太死板啊,我得錯過多少機會啊。(我們后面解決這一問題)。
2、程序化
程序化是什么?程序化就是將思維通過算法編程進而上機的過程。這是一個很寬泛的概念,不僅是用來交易。你比如讓計算機計算1+1:
思維:計算1+1
算法:
程序開始
聲明變量a,聲明變量b,聲明變量c;
變量a賦值1,變量b賦值1;
計算a+b,並且將結果存儲在變量c中;
輸出變量c的值;
程序結束
編程過程(形成代碼):(以C++為例)
#include <iostream>
using namespace std;
int main()
{ int a, int b, int c;
a=1;
b=1;
c=a+b;
cout<<c;
return 0;
}
然后上機進入IDE環境,調試,運行得到結果
這整個過程叫做把計算1+1程序化了
那么第一部分的量化交易規則如何程序化?
算法:
下載該品種10年數據;
計算前一根K線開盤價與收盤價之間的差值並取絕對值;
計算現在這一根K線開盤價與收盤價之間的差值並取絕對值;
將這二者相除,看看等不等於2.5;
等於就買入,不等於就不操作;
編程(形成代碼以文華財經的MY language為例):
JDZ1:=ABS(REF(CLOSE,1)-REF(OPEN,1));
JDZ2:=ABS(CLOSE-OPEN);
FLAG:=JDZ2/JDZ1;
FLAG=2.5 && ISUP,BK;
(這只是示范,照此操作必賠無疑!)
然后上機回測得出結果,看是否符合預期。
這樣就把大陽線策略程序化了。
3、總結
程序化的核心是算法,也就是如何把交易思維轉化為計算機能懂的編程語言,至於用什么語言是C++還是python,還是R那都不是最重要的。你看到那些一大段一大段的計算機IDE內英語叫代碼,那不是程序化,你看到的BK(下單指令),也不叫程序化,也不叫量化交易,那只是一個很小的過程!運行這段代碼下單獲得收益那叫自動化交易,也不叫程序化也不叫量化,量化和程序化既有交集也有區別,現在你明白了么?量化交易是整個過程而不是某一個步驟!
4、結尾
有人問那么多情況一個參數無法解決啊(第一部分的問題),這就需要調參和利用枚舉以及遺傳算法篩選的問題,以后有時間再寫吧。