溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

互聯(lián)網(wǎng)中如何利用回歸幅度構(gòu)建多品種反轉(zhuǎn)策略

發(fā)布時間:2022-01-15 15:26:03 來源:億速云 閱讀:165 作者:小新 欄目:互聯(lián)網(wǎng)科技

小編給大家分享一下互聯(lián)網(wǎng)中如何利用回歸幅度構(gòu)建多品種反轉(zhuǎn)策略,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

策略原理

價格反轉(zhuǎn)是一種能量轉(zhuǎn)換的結(jié)果,是一個艱難的過程,需要充分的時間、空間進行能量的交換。但正如能量守恒定律,時間可以換取空間,反之空間可以抵消時間。反轉(zhuǎn)中既有激烈的單日V型反轉(zhuǎn),又有耗時頗巨的圓底與圓頂,V型反轉(zhuǎn),直來直去,干凈利落,無半點喘息時間。 

互聯(lián)網(wǎng)中如何利用回歸幅度構(gòu)建多品種反轉(zhuǎn)策略
相對而言,基于固定點位的反轉(zhuǎn),可能會受制于品種價格波動率的變化而變化,但是基于固定百分比幅度的反轉(zhuǎn),則較少受到類似的困擾,除非該品種的波動性水平已經(jīng)發(fā)生變化。本策略正是基于這一點。

同樣,在這個策略中,并沒有定義如何區(qū)分趨勢和震蕩,而是直奔主題,根據(jù)當前價格與前期高低點的關(guān)系來開平倉。因為不管是趨勢還是震蕩,這些都只是人為主觀定義的一個概念,在行情走出來之前,誰也不知道是趨勢還是震蕩,所以這些主觀定義是典型的事后分析時用到的概念。 

互聯(lián)網(wǎng)中如何利用回歸幅度構(gòu)建多品種反轉(zhuǎ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è)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(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)容。

AI