您好,登錄后才能下訂單哦!
小編給大家分享一下互聯(lián)網(wǎng)中如何利用回歸幅度構(gòu)建多品種反轉(zhuǎn)策略,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
策略原理
價格反轉(zhuǎn)是一種能量轉(zhuǎn)換的結(jié)果,是一個艱難的過程,需要充分的時間、空間進行能量的交換。但正如能量守恒定律,時間可以換取空間,反之空間可以抵消時間。反轉(zhuǎn)中既有激烈的單日V型反轉(zhuǎn),又有耗時頗巨的圓底與圓頂,V型反轉(zhuǎn),直來直去,干凈利落,無半點喘息時間。
相對而言,基于固定點位的反轉(zhuǎn),可能會受制于品種價格波動率的變化而變化,但是基于固定百分比幅度的反轉(zhuǎn),則較少受到類似的困擾,除非該品種的波動性水平已經(jīng)發(fā)生變化。本策略正是基于這一點。
同樣,在這個策略中,并沒有定義如何區(qū)分趨勢和震蕩,而是直奔主題,根據(jù)當前價格與前期高低點的關(guān)系來開平倉。因為不管是趨勢還是震蕩,這些都只是人為主觀定義的一個概念,在行情走出來之前,誰也不知道是趨勢還是震蕩,所以這些主觀定義是典型的事后分析時用到的概念。
況且,在不同的時間與趨勢結(jié)構(gòu)力度框架下,震蕩與趨勢基本上很難準確的定義,大周期的震蕩就是小周期的趨勢。那么也就是說,在行情沒有走出來的之前,對行情進行震蕩與趨勢的分析定義,也是沒有意義的。
策略構(gòu)建
第一步,我們先來看下策略框架,在fmz網(wǎng)站的策略廣場,有很多不同種類的策略框架,這些框架可以用于不同的策略類型,簡單方便還能節(jié)省不少時間,比如本篇的利用回歸幅度構(gòu)建多品種反轉(zhuǎn)策略,就比較適合使用CTA策略框架。具體的使用方法,可以參考這個鏈接
該策略框架后臺自動提供數(shù)據(jù)和基礎服務,借助該策略框架可以大幅提高策略編寫效率,正常幾百行的策略,用CTA策略框架幾十行就能實現(xiàn)一個并發(fā)穩(wěn)定可實盤的多品種策略。另外,配合專門的程序化交易數(shù)據(jù)結(jié)構(gòu)和豐富的金融統(tǒng)計函數(shù)庫,同樣支持復雜的邏輯應用,簡單又不失靈活。如下:
function main() { $.CTA("RB000,RU000,CF000,TA000,I000,PP000,P000,L000,J000,JM000", function(st) { var bars = st.records; // 獲取K線數(shù)組 // K線長度過濾 if (bars.length < 20) { return } var unit = 1; // 下單數(shù)量 var buyToOpen = '多頭開倉條件'; var buyToClose = '多頭平倉條件'; var sellToOpen = '空頭開倉條件'; var sellToClose = '空頭平倉條件'; // 多頭平倉 if (buyToClose) { return -unit; } // 空頭平倉 if (sellToClose) { return unit; } // 多頭開倉 if (buyToOpen) { return unit; } // 空頭開倉 if (sellToOpen) { return -unit; } }); }
第二步,開始在CTA框架中填充策略邏輯,首先給每個合約創(chuàng)建一個倉位表。大家知道,不同品種在不同行情中,開平倉的時機是不一樣的,比如:螺紋鋼開了多單,橡膠開了空單;或者螺紋鋼平倉了,橡膠還持有空單。所以倉位表可以針對具體合約分別記錄和管理持倉,如下:
contractType = 'rb000/rb888,ru000/ru888'; // 合約類型 var contractType_Dic = {}; // 創(chuàng)建一個空對象,用于接收不同的合約類型 var contractType_Array1 = contractType.split(","); // 分割合約類型參數(shù) var contractType_Array2 = []; // 創(chuàng)建一個空數(shù)組,用于接收不同的交易合約 for (var i = 0; i < contractType_Array1.length; i++) { // 遍歷每個設置的合約 contractType_Array2.push(contractType_Array1[i].split('/')[1]); // 分別存儲交易合約 } contractType_Array2.toString(); // 把數(shù)組轉(zhuǎn)變?yōu)樽址? for (var key in contractType_Array2) { // 遍歷字符串 contractType_Dic[contractType_Array2[key]] = { falsePosition: 0 // 把每個交易合約的初始倉位賦值為0 } } Log(contractType_Dic) // 查看處理好的倉位表,打?。簕 rb888: { falsePosition: 0 }, ru888: { falsePosition: 0 } }
第三步,把策略開平倉邏輯寫到里面就可以了。其中用到了K線周期內(nèi)最高價和最低價與當前價格的相互位置關(guān)系。策略沒有附帶止盈止損,只有開倉和平倉,核心思想就是:截斷虧損,讓利潤奔跑!大家注意看下面策略代碼中的注釋。
多頭開倉:如果當前沒有持倉,并且價格大于前 N 根 K 線內(nèi)的最低價 + 百分比幅度。
空頭開倉:如果當前沒有持倉,并且價格小于前 N 根 K 線內(nèi)的最高價 - 百分比幅度。
多頭平倉:如果當前持有多單,并且價格小于前 N 根 K 線內(nèi)的最低價與前 N 根 K 線內(nèi)的最高價的和的一半。
空頭平倉:如果當前持有空單,并且價格大于前 N 根 K 線內(nèi)的最低價與前 N 根 K 線內(nèi)的最高價的和的一半。
function main() { // 參數(shù) cycleLength = 50; // 周期長度 backRatio = 1; // 回撤比率 contractType = 'rb000/rb888,ru000/ru888'; // 合約類型 unit = 1; // 下單數(shù)量 // 倉位表 var contractType_Dic = {}; // 創(chuàng)建一個空對象,用于接收不同的合約類型 var contractType_Array1 = contractType.split(","); // 分割合約類型參數(shù) var contractType_Array2 = []; // 創(chuàng)建一個空數(shù)組,用于接收不同的交易合約 for (var i = 0; i < contractType_Array1.length; i++) { // 遍歷每個設置的合約 contractType_Array2.push(contractType_Array1[i].split('/')[1]); // 分別存儲交易合約 } contractType_Array2.toString(); // 把數(shù)組轉(zhuǎn)變?yōu)樽址? for (var key in contractType_Array2) { // 遍歷字符串 contractType_Dic[contractType_Array2[key]] = { falsePosition: 0 // 把每個交易合約的初始倉位賦值為0 } } // CTA框架 $.CTA(contractType, function(st) { var bars = st.records; // 獲取K線數(shù)組 var j = bars[bars.length - 2].Close; // 獲取上根K線收盤價 var high = TA.Highest(bars, cycleLength, 'High'); // 計算N日內(nèi)的最高價 var low = TA.Lowest(bars, cycleLength, 'Low'); // 計算N日內(nèi)的最低價 var highBack = high * (1 - backRatio / 100); // 計算N日內(nèi)的最高價的回撤1%的值 var lowBack = low * (1 + backRatio / 100); // 計算N日內(nèi)的最低價的回撤1%的值 // 過濾K線數(shù)量 if (!bars || bars.length < cycleLength + 1) { return; } //多頭平倉 if (contractType_Dic[st.symbol].falsePosition > 0 && j < (lowBack + highBack) / 2) { contractType_Dic[st.symbol].falsePosition = 0; return -unit; } //空頭平倉 if (contractType_Dic[st.symbol].falsePosition < 0 && j > (lowBack + highBack) / 2) { contractType_Dic[st.symbol].falsePosition = 0; return unit; } //多頭開倉 if (contractType_Dic[st.symbol].falsePosition == 0 && j > lowBack && j > highBack) { contractType_Dic[st.symbol].falsePosition = 1; return unit; } //空頭開倉 if (contractType_Dic[st.symbol].falsePosition == 0 && j < lowBack && j < highBack) { contractType_Dic[st.symbol].falsePosition = -1; return -unit; } }); }
完整策略源碼已經(jīng)公開到發(fā)明者量化 https://www.fmz.com/strategy/69937 ,無需配置直接回測。
策略改進
總的來說,這是一個通用性極強的策略。當然這只是個簡單的策略思路,該策略或許可以在其他地方改進:
1、增加波動率因子。我們都知道,每個品種的都有其性格,基本面與技術(shù)面互相影響。增加波動率因子,可以更客觀的反映出當前品種的價格走勢。
2、將固定周期改為自適應周期。這個策略核心參數(shù),其實只有一個,而且參數(shù)是固定。如果我們通過價格變化速度與加速度的關(guān)系,動態(tài)的將固定參數(shù)加減,可以更能即時反映當時的行情。
3、將百分比回撤改為固定的數(shù)值。舉個例子,如果當前價格是1000,那么其1%就是10;如果當前價格是5000,那么其1%就是50。10與50之間在相差了好幾個數(shù)量級。同樣的合約品種,因為不同時期的當前價格,結(jié)果導致開平倉條件相差很大。
以上是“互聯(lián)網(wǎng)中如何利用回歸幅度構(gòu)建多品種反轉(zhuǎn)策略”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。