Java怎么實(shí)現(xiàn)基于資金主動(dòng)性流向的交易策略

這篇文章主要講解了“Java怎么實(shí)現(xiàn)基于資金主動(dòng)性流向的交易策略”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Java怎么實(shí)現(xiàn)基于資金主動(dòng)性流向的交易策略”吧!

創(chuàng)新互聯(lián)是一家專業(yè)提供永德企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、html5、小程序制作等業(yè)務(wù)。10年已為永德眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。

一、摘要

價(jià)格不是上就是下,長(zhǎng)期而言,價(jià)格的漲跌概率應(yīng)各是50%,那么要正確預(yù)測(cè)未來(lái)的價(jià)格,就需要實(shí)時(shí)獲取影響價(jià)格的全部因素,然后給每個(gè)因素一個(gè)正確權(quán)重,最后作出客觀理性分析。要把影響價(jià)格的全部因素羅列出來(lái),可能會(huì)寫滿整個(gè)屏幕。

概括為:全球經(jīng)濟(jì)環(huán)境、國(guó)家宏觀政策、相關(guān)產(chǎn)業(yè)政策、供需關(guān)系、國(guó)際事件、利率與匯率、通貨膨脹與緊縮、市場(chǎng)心理、未知因素等等。預(yù)測(cè)也就變成了一個(gè)工程浩大,又不可能完成的任務(wù)。所以很早的時(shí)候,我就明白市場(chǎng)不可預(yù)測(cè)。那么在市場(chǎng)中所有的預(yù)測(cè),都變成了假設(shè),交易也成了概率游戲,這就有意思了。

二、為何利用資金流向

既然市場(chǎng)無(wú)法預(yù)測(cè),那真的就無(wú)動(dòng)于衷了嗎?不,所有的宏觀因素和微觀因素都已經(jīng)反映到價(jià)格上了,也就是說(shuō)價(jià)格是全部因素相互作用的結(jié)果。我們只需要分析價(jià)格,就可以做出一個(gè)完整的交易策略。 Java怎么實(shí)現(xiàn)基于資金主動(dòng)性流向的交易策略

先仔細(xì)想一想,為什么價(jià)格會(huì)漲?

你可能會(huì)說(shuō),因?yàn)椋簢?guó)家對(duì)相關(guān)產(chǎn)業(yè)政策扶持、原產(chǎn)地又雙叒叕下暴雨了、國(guó)際貿(mào)易戰(zhàn)、MACD金叉了、別人都買了等等,當(dāng)然這些也許都沒錯(cuò)。事后看,總能找出推動(dòng)價(jià)格上漲的理由。

其實(shí),價(jià)格的漲跌類似于水漲船高。價(jià)格的上漲離不開資金的推動(dòng),盤面上,如果買的人多過(guò)賣的人,價(jià)格就會(huì)上漲。反之,如果賣的人多過(guò)買的人,價(jià)格就會(huì)下跌。有了這個(gè)概念,我們就可以根據(jù)資金凈流向反映出來(lái)的供求關(guān)系,對(duì)未來(lái)價(jià)格的走勢(shì)給出合理的預(yù)期。

三、資金流向原理

與傳統(tǒng)分析不同的是,資金流向分析根據(jù)一段時(shí)間序列的交易數(shù)據(jù)中,分析哪些成交是資金主動(dòng)流入的,哪些成交是資金主動(dòng)流出。然后,把該時(shí)間段主動(dòng)流入的成交量減去主動(dòng)流出的成交量,便可以知道該時(shí)間段的資金凈流入。如果資金凈流入為正,表示該品種供不應(yīng)求;如果資金凈流出,則表示該品種供過(guò)于求。

Java怎么實(shí)現(xiàn)基于資金主動(dòng)性流向的交易策略

讀到這里,可能有人會(huì)疑問(wèn),在實(shí)際交易中,有人買有人賣才會(huì)成交。成交的單子必然是有多少買量就有多少賣量,資金進(jìn)出一定是等量的。何來(lái)資金流入流出呢?其實(shí)嚴(yán)格來(lái)說(shuō),每一個(gè)買單必然對(duì)應(yīng)一個(gè)相應(yīng)的賣單,資金流入和資金流出一定是相等的。如果我們想要計(jì)算出哪些成交的單子是主動(dòng)性買入的,哪些單子是主動(dòng)性賣出的,只能用一個(gè)折中的方法,利用bar數(shù)據(jù),根據(jù)成交量和價(jià)格來(lái)實(shí)現(xiàn)。

四、資金流向計(jì)算方法

資金流向的變化準(zhǔn)確對(duì)應(yīng)著實(shí)時(shí)的市場(chǎng)行為,通過(guò)整合bar數(shù)據(jù),實(shí)時(shí)計(jì)算資金凈流向。關(guān)于計(jì)算資金主動(dòng)性流向有兩種算法:

  • 第一種,如果當(dāng)前單子的成交價(jià)是以對(duì)手價(jià)或超價(jià)成交的,買入成交價(jià) >= 賣一價(jià),代表買家更愿意以較高的價(jià)格完成交易,即計(jì)入資金主動(dòng)性流入。

  • 第二種,如果當(dāng)前成交價(jià)格 > 上次成交價(jià)格,那么可以理解為,當(dāng)前的成交量主動(dòng)推升了價(jià)格的上漲,即計(jì)入資金主動(dòng)性流入。

Java怎么實(shí)現(xiàn)基于資金主動(dòng)性流向的交易策略

以上述第二種算法為例:

某個(gè)品種在 10:00 的收盤價(jià)是 3450,在 11:00 的收盤價(jià)是3455,那么我們就把 10:00 ~ 11:00 的成交量計(jì)入資金主動(dòng)性流入。反之則計(jì)入資金主動(dòng)性流出。而本文是在第二種方法的基礎(chǔ)上,加入了價(jià)格波動(dòng)幅度這個(gè)因素,通過(guò)前后bar收盤價(jià)對(duì)比,把上漲或下跌的bar的成交量 * 波動(dòng)幅度計(jì)入到一個(gè)序列,然后根據(jù)該序列進(jìn)一步計(jì)算資金的主動(dòng)性流入比率。

五、交易邏輯

本文從“量”的角度來(lái)刻畫期貨市場(chǎng)的資金流向,通過(guò)實(shí)時(shí)分析bar數(shù)據(jù),建立判斷短期價(jià)格走向的交易模型。一般的情況下,資金流向及價(jià)格走勢(shì)可以分為四種基本狀況:

  • 價(jià)格上升,同時(shí)單位時(shí)間內(nèi)資金主動(dòng)性凈流入:這種情況下屬于強(qiáng)勢(shì),未來(lái)價(jià)格繼續(xù)上升概率更大;

  • 股價(jià)上升,同時(shí)單位時(shí)間內(nèi)資金主動(dòng)性凈流出:這種情況下屬于中強(qiáng)勢(shì),未來(lái)價(jià)格繼續(xù)上升的速度大幅減弱;

  • 股價(jià)下跌,同時(shí)單位時(shí)間內(nèi)資金主動(dòng)性凈流入:這種情況下屬于弱勢(shì),未來(lái)價(jià)格繼續(xù)下跌概率更大;

  • 股價(jià)下跌,同時(shí)單位時(shí)間內(nèi)資金主動(dòng)性凈流出:這種情況下屬于中弱勢(shì),未來(lái)價(jià)格繼續(xù)下跌的速度大幅減弱; Java怎么實(shí)現(xiàn)基于資金主動(dòng)性流向的交易策略

主要變量,如下:

  • 前期低點(diǎn)(ll)

  • 前期高點(diǎn)(hh)

  • 主動(dòng)性買入(barIn)

  • 主動(dòng)性賣出(barOut)

  • 主動(dòng)流入資金與主動(dòng)流出資金的比值(barRatio)

  • 開倉(cāng)閾值(openValve)

  • 當(dāng)前持倉(cāng)(myAmount)

  • 上根K線收盤價(jià)(close)

出入場(chǎng)條件一個(gè)好的量化交易策略,不僅需要穩(wěn)定的收益,而且能夠控制風(fēng)險(xiǎn),在小概率時(shí)間出現(xiàn)時(shí),避免出現(xiàn)較大虧損。在這里我們使用跟蹤主動(dòng)性資金流向策略,借助短期價(jià)格預(yù)測(cè)對(duì)商品期貨行情方向進(jìn)行分析,從而達(dá)到高收益、低風(fēng)險(xiǎn)的效果。 策略的步驟如下圖: Java怎么實(shí)現(xiàn)基于資金主動(dòng)性流向的交易策略

  • 多頭開倉(cāng):如果當(dāng)前無(wú)持倉(cāng),并且barRatio > openValve,買入開倉(cāng);

  • 空頭開倉(cāng):如果當(dāng)前無(wú)持倉(cāng),并且barRatio < 1 / openValve,賣出開倉(cāng);

  • 多頭平倉(cāng):如果當(dāng)前持有多倉(cāng),并且close < ll,賣出平倉(cāng);

  • 空頭平倉(cāng):如果當(dāng)前持有空倉(cāng),并且close > hh,買入平倉(cāng);

六、編寫策略源碼

獲取并計(jì)算數(shù)據(jù)

function data() {
    var self = {};
    var barVol = [];
    var bars = _C(exchange.GetRecords); //獲取bar數(shù)據(jù)
    if (bars.length < len * 2) { //控制bar數(shù)據(jù)數(shù)組的長(zhǎng)度
        return;
    }
    for (var i = len; i > 0; i--) {
        var barSub_1 = bars[bars.length - (i + 1)].Close - bars[bars.length - (i + 2)].Close; //計(jì)算當(dāng)前收盤價(jià)與上個(gè)bar收盤價(jià)的價(jià)差
        if (barSub_1 > 0) { //如果價(jià)格漲了,就在數(shù)組里面添加正數(shù)
            barVol.push(bars[bars.length - (i + 1)].Volume * (bars[bars.length - (i + 1)].High - bars[bars.length - (i + 1)].Low));
        } else if (barSub_1 < 0) { //如果價(jià)格跌了,就在數(shù)組里面添加負(fù)數(shù)
            barVol.push(-bars[bars.length - (i + 1)].Volume * (bars[bars.length - (i + 1)].High - bars[bars.length - (i + 1)].Low));
        }
    }
    if (barVol.length > len) {
        barVol.shift(); //釋放多余的數(shù)據(jù)
    }
    self.barIn = 0;
    self.barOut = 0;
    for (var v = 0; v < barVol.length; v++) {
        if (barVol[v] > 0) {
            self.barIn += barVol[v]; //合并全部主動(dòng)流入的資金
        } else {
            self.barOut -= barVol[v]; //合并全部主動(dòng)流出的資金
        }
    }
    self.barRatio = self.barIn / Math.abs(self.barOut); //計(jì)算主動(dòng)流入資金與主動(dòng)流出資金的比值
    bars.pop(); //刪除未結(jié)束的bar數(shù)據(jù)
    self.close = bars[bars.length - 1].Close; //獲取上根K線的收盤價(jià)
    self.hh = TA.Highest(bars, hgLen, 'High'); //獲取前高
    self.ll = TA.Lowest(bars, hgLen, 'Low'); //獲取前低
    return self;
}

通過(guò)發(fā)明者量化API中的GetRecords方法,直接獲取bar數(shù)據(jù)。包含最高價(jià)、最低價(jià)、開盤價(jià)、收盤價(jià)、成交量、標(biāo)準(zhǔn)時(shí)間戳。如果最新的成交價(jià)大于上次的成交價(jià),那么就把最新的成交量 * (最高價(jià) - 最低價(jià))計(jì)入主動(dòng)性買入;如果最新的成交價(jià)小于上次的成交價(jià),那么就把最新的成交量 * (最高價(jià) - 最低價(jià))計(jì)入主動(dòng)性賣出;

獲取持倉(cāng)數(shù)據(jù)

function positions(name) {
    var self = {};
    var mp = _C(exchange.GetPosition); //獲取持倉(cāng)
    if (mp.length == 0) {
        self.amount = 0;
    }
    for (var i = 0; i < mp.length; i++) { //持倉(cāng)數(shù)據(jù)處理
        if (mp[i].ContractType == name) {
            if (mp[i].Type == PD_LONG || mp[i].Type == PD_LONG_YD) {
                self.amount = mp[i].Amount;
            } else if (mp[i].Type == PD_SHORT || mp[i].Type == PD_SHORT_YD) {
                self.amount = -mp[i].Amount;
            }
            self.profit = mp[i].Profit;
        } else {
            self.amount = 0;
        }
    }
    return self;
}

通過(guò)發(fā)明者量化API中的GetPosition方法獲取基礎(chǔ)持倉(cāng)數(shù)據(jù),并對(duì)這些基礎(chǔ)數(shù)據(jù)進(jìn)一步處理,如果當(dāng)前持有多單,那么就返回正持倉(cāng)數(shù)量;如果當(dāng)前持有空單,那么就返回負(fù)持倉(cāng)數(shù)量。這樣做的目的是方便計(jì)算開平倉(cāng)邏輯。

下單交易

function trade() {
    var myData = data(); //執(zhí)行data函數(shù)
    if (!myData) {
        return;
    }
    var mp = positions(contractType); //獲取持倉(cāng)信息
    var myAmount = mp.amount; //獲取持倉(cāng)數(shù)量
    var myProfit = mp.profit; //獲取持倉(cāng)浮動(dòng)盈虧
    if (myAmount > 0 && myData.close < myData.ll) {
        p.Cover(contractType, unit); //多頭平倉(cāng)
    }
    if (myAmount < 0 && myData.close > myData.hh) {
        p.Cover(contractType, unit); //空頭平倉(cāng)
    }
    if (myAmount == 0) {
        if (myData.barRatio > openValve) {
            p.OpenLong(contractType, unit); //多頭開倉(cāng)
        } else if (myData.barRatio < 1 / openValve) {
            p.OpenShort(contractType, unit); //空頭開倉(cāng)
        }
    }
}
七、策略特點(diǎn)

特點(diǎn):

核心參數(shù)少:模型設(shè)計(jì)思路清晰,核心參數(shù)只有3個(gè)??蓛?yōu)化空間很小,可以有效避免過(guò)度擬合。 較強(qiáng)的普適性:策略邏輯簡(jiǎn)單,具有高普適性,除農(nóng)產(chǎn)品外適應(yīng)大部分品種,可以進(jìn)行多品種組合。

改進(jìn):

加入持倉(cāng)量條件:?jiǎn)蜗颍ü善保┦袌?chǎng)資金流向可以根據(jù)價(jià)格漲跌、成交量等因素來(lái)界定資金的流入或流出。 但是,由于該策略并沒有加入持倉(cāng)量這個(gè)條件,使得統(tǒng)計(jì)主動(dòng)性資金流向可能會(huì)失真。

加入標(biāo)準(zhǔn)差條件:僅僅依靠資金流向來(lái)作開倉(cāng)條件,可能會(huì)出現(xiàn)頻繁的虛假信號(hào),造成頻繁開平倉(cāng)。通過(guò)統(tǒng)計(jì)指定時(shí)間內(nèi)的資金凈流出的平均值,上下加上標(biāo)準(zhǔn)差,來(lái)過(guò)濾虛假信號(hào)。

完整策略源碼:
/*backtest
start: 2016-01-01 09:00:00
end: 2019-12-31 15:00:00
period: 1h
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
*/

var p = $.NewPositionManager(); //調(diào)用商品期貨交易類庫(kù)

//持倉(cāng)數(shù)據(jù)處理
function positions(name) {
    var self = {};
    var mp = _C(exchange.GetPosition); //獲取持倉(cāng)
    if (mp.length == 0) {
        self.amount = 0;
    }
    for (var i = 0; i < mp.length; i++) { //持倉(cāng)數(shù)據(jù)處理
        if (mp[i].ContractType == name) {
            if (mp[i].Type == PD_LONG || mp[i].Type == PD_LONG_YD) {
                self.amount = mp[i].Amount;
            } else if (mp[i].Type == PD_SHORT || mp[i].Type == PD_SHORT_YD) {
                self.amount = -mp[i].Amount;
            }
            self.profit = mp[i].Profit;
        } else {
            self.amount = 0;
        }
    }
    return self;
}

//行情數(shù)據(jù)處理函數(shù)
function data() {
    var self = {};
    var barVol = [];
    var bars = _C(exchange.GetRecords); //獲取bar數(shù)據(jù)
    if (bars.length < len * 2) { //控制bar數(shù)據(jù)數(shù)組的長(zhǎng)度
        return;
    }
    for (var i = len; i > 0; i--) {
        var barSub_1 = bars[bars.length - (i + 1)].Close - bars[bars.length - (i + 2)].Close; //計(jì)算當(dāng)前收盤價(jià)與上個(gè)bar收盤價(jià)的價(jià)差
        if (barSub_1 > 0) { //如果價(jià)格漲了,就在數(shù)組里面添加正數(shù)
            barVol.push(bars[bars.length - (i + 1)].Volume * (bars[bars.length - (i + 1)].High - bars[bars.length - (i + 1)].Low));
        } else if (barSub_1 < 0) { //如果價(jià)格跌了,就在數(shù)組里面添加負(fù)數(shù)
            barVol.push(-bars[bars.length - (i + 1)].Volume * (bars[bars.length - (i + 1)].High - bars[bars.length - (i + 1)].Low));
        }
    }
    if (barVol.length > len) {
        barVol.shift(); //釋放多余的數(shù)據(jù)
    }
    self.barIn = 0;
    self.barOut = 0;
    for (var v = 0; v < barVol.length; v++) {
        if (barVol[v] > 0) {
            self.barIn += barVol[v]; //合并全部主動(dòng)流入的資金
        } else {
            self.barOut -= barVol[v]; //合并全部主動(dòng)流出的資金
        }
    }
    self.barRatio = self.barIn / Math.abs(self.barOut); //計(jì)算主動(dòng)流入資金與主動(dòng)流出資金的比值
    bars.pop(); //刪除未結(jié)束的bar數(shù)據(jù)
    self.close = bars[bars.length - 1].Close; //獲取上根K線的收盤價(jià)
    self.hh = TA.Highest(bars, hgLen, 'High'); //獲取前高
    self.ll = TA.Lowest(bars, hgLen, 'Low'); //獲取前低
    return self;
}

//交易函數(shù)
function trade() {
    var myData = data(); //執(zhí)行data函數(shù)
    if (!myData) {
        return;
    }
    var mp = positions(contractType); //獲取持倉(cāng)信息
    var myAmount = mp.amount; //獲取持倉(cāng)數(shù)量
    var myProfit = mp.profit; //獲取持倉(cāng)浮動(dòng)盈虧
    if (myAmount > 0 && myData.close < myData.ll) {
        p.Cover(contractType, unit); //多頭平倉(cāng)
    }
    if (myAmount < 0 && myData.close > myData.hh) {
        p.Cover(contractType, unit); //空頭平倉(cāng)
    }
    if (myAmount == 0) {
        if (myData.barRatio > openValve) {
            p.OpenLong(contractType, unit); //多頭開倉(cāng)
        } else if (myData.barRatio < 1 / openValve) {
            p.OpenShort(contractType, unit); //空頭開倉(cāng)
        }
    }
}

//程序主入口,從這里啟動(dòng)
function main() {
    while (true) { //進(jìn)入循環(huán)
        if (exchange.IO("status")) { //如果是開市時(shí)間
            _C(exchange.SetContractType, contractType); //訂閱合約
            trade(); //執(zhí)行trade函數(shù)
        }
    }
}
八、策略回測(cè)

策略配置:Java怎么實(shí)現(xiàn)基于資金主動(dòng)性流向的交易策略 回測(cè)績(jī)效:Java怎么實(shí)現(xiàn)基于資金主動(dòng)性流向的交易策略 Java怎么實(shí)現(xiàn)基于資金主動(dòng)性流向的交易策略

感謝各位的閱讀,以上就是“Java怎么實(shí)現(xiàn)基于資金主動(dòng)性流向的交易策略”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Java怎么實(shí)現(xiàn)基于資金主動(dòng)性流向的交易策略這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

分享題目:Java怎么實(shí)現(xiàn)基于資金主動(dòng)性流向的交易策略
標(biāo)題路徑:http://muchs.cn/article10/jsohgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、網(wǎng)站營(yíng)銷網(wǎng)站排名、動(dòng)態(tài)網(wǎng)站品牌網(wǎng)站設(shè)計(jì)微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司