真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python中怎么構(gòu)建一個(gè)阿隆策略

這篇文章給大家介紹Python中怎么構(gòu)建一個(gè)阿隆策略,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

超過十年行業(yè)經(jīng)驗(yàn),技術(shù)領(lǐng)先,服務(wù)至上的經(jīng)營(yíng)模式,全靠網(wǎng)絡(luò)和口碑獲得客戶,為自己降低成本,也就是為客戶降低成本。到目前業(yè)務(wù)范圍包括了:成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì),成都網(wǎng)站推廣,成都網(wǎng)站優(yōu)化,整體網(wǎng)絡(luò)托管,成都小程序開發(fā),微信開發(fā),App定制開發(fā),同時(shí)也可以讓客戶的網(wǎng)站和網(wǎng)絡(luò)營(yíng)銷和我們一樣獲得訂單和生意!

阿隆指標(biāo)簡(jiǎn)介

阿隆指標(biāo)通過計(jì)算當(dāng)前K線距離前最高價(jià)和最低價(jià)之間的K線數(shù)量,來幫助交易者預(yù)測(cè)價(jià)格走勢(shì)與趨勢(shì)區(qū)域的相對(duì)位置關(guān)系變化。它有兩部分組成,即:阿隆上線(AroonUp)和阿隆下線(AroonDown),這兩條線在0~100之間上下移動(dòng),雖然命名為上線和下線,但從圖表上看并不像BOLL指標(biāo)那樣是真正意義上的上線和下線。如下圖就是阿隆指標(biāo):
Python中怎么構(gòu)建一個(gè)阿隆策略

阿隆指標(biāo)的計(jì)算方法

阿隆指標(biāo)要求首先要設(shè)置一個(gè)時(shí)間周期參數(shù),就像設(shè)置均線周期參數(shù)一樣,在傳統(tǒng)行情軟件中,這個(gè)周期數(shù)是14,當(dāng)然這個(gè)周期參數(shù)并不是固定的,你還可以設(shè)置為10或者50等等。為了方便理解,暫且把這個(gè)時(shí)間周期參數(shù)定義為:N。確定N之后,我們就可以計(jì)算出阿隆上線(AroonUp)和阿隆下線(AroonDown),具體的計(jì)算公式如下:

  • 阿隆上線= [ ( 設(shè)置的周期參數(shù) - 最高價(jià)后的周期數(shù) ) / 計(jì)算的周期數(shù) ] * 100

  • 阿隆下線= [ ( 設(shè)置的周期參數(shù) - 最低價(jià)后的周期數(shù) ) / 計(jì)算的周期數(shù) ] * 100

從這個(gè)公式中,我們就能大致看出,阿隆指標(biāo)的思想。那就是:有多少個(gè)周期,價(jià)格在近期高 / 低點(diǎn)之下,輔助預(yù)測(cè)當(dāng)前趨勢(shì)是否會(huì)延續(xù),同時(shí)衡量當(dāng)前趨勢(shì)的強(qiáng)弱。如果我們把這個(gè)指標(biāo)歸類的話,很明顯它是屬于趨勢(shì)跟蹤類型。但是與其他趨勢(shì)跟蹤型指標(biāo)不同的是,它更重視時(shí)間而不是價(jià)格。

如何使用阿隆指標(biāo)

阿隆上線(AroonUp)和阿隆下線(AroonDown)反映的是當(dāng)前時(shí)間與之前最高價(jià)或最低價(jià)的遠(yuǎn)近,如果時(shí)間越近值就越大,如果時(shí)間越遠(yuǎn)值就越小。并且當(dāng)兩條線發(fā)生交叉就預(yù)示著價(jià)格方向可能會(huì)發(fā)生改變,如果AroonUp在AroonDown之上說明價(jià)格處于上漲趨勢(shì),未來價(jià)格可能會(huì)進(jìn)一步上漲;如果AroonDown在AroonUp之上說明價(jià)格處于下跌趨勢(shì),未來價(jià)格可能會(huì)進(jìn)一步下跌。

同時(shí)我們還可以設(shè)置幾個(gè)固定的值,來精確入場(chǎng)時(shí)機(jī)。我們知道阿隆指標(biāo)是一直在0~100之間上下運(yùn)行,那么在市場(chǎng)處于上漲趨勢(shì),也就是AroonUp在AroonDown之上時(shí),當(dāng)AroonUp大于50,說明市場(chǎng)上漲的趨勢(shì)已經(jīng)形成,未來價(jià)格可能會(huì)繼續(xù)上漲;當(dāng)AroonUp下穿50時(shí),說明價(jià)格上漲的動(dòng)力正在減弱,未來價(jià)格可能會(huì)震蕩和下跌。

反之在市場(chǎng)處于下跌趨勢(shì),也就是AroonDown在AroonUp之上時(shí),當(dāng)AroonDown大于50,說明市場(chǎng)下跌趨勢(shì)已經(jīng)形成,未來價(jià)格可能會(huì)繼續(xù)下跌;當(dāng)AroonDown下穿50時(shí),說明價(jià)格下跌的動(dòng)力正在減弱,未來價(jià)格可能會(huì)震蕩和上漲。那么根據(jù)上面兩段理論,我們可以把買賣條件羅列為:

  • 當(dāng) AroonUp大于AroonDown,并且AroonUp大于50,多頭開倉;

  • 當(dāng) AroonUp小于AroonDown,或者AroonUp小于50,多頭平倉;

  • 當(dāng) AroonDown大于AroonUp,并且AroonDown大于50,空頭開倉;

  • 當(dāng) AroonDown小于AroonUp,或者AroonDown小于50,空頭平倉;

基于阿隆指標(biāo)構(gòu)建交易策略

理清交易邏輯后,我們就可以用代碼去實(shí)現(xiàn)了,依次打開:fmz.com > 登錄 > 控制中心 > 策略庫 > 新建策略 > 點(diǎn)擊右上角下拉菜單選擇Python語言,開始編寫策略,注意看下面代碼中的注釋。

第一步:編寫策略框架
我們知道在量化交易中,程序是不斷獲取數(shù)據(jù)、處理數(shù)據(jù)、下單交易這樣的循環(huán)過程,所以我們繼續(xù)使用之前講過的main函數(shù)和onTick函數(shù),其中在main函數(shù)中無限循環(huán)執(zhí)行onTick函數(shù)。如下:

# 策略主函數(shù)
def onTick():
    pass


# 程序入口
def main():
    while True:  # 進(jìn)入無限循環(huán)模式
        onTick()  # 執(zhí)行策略主函數(shù)
        Sleep(1000)  # 休眠1秒

第二步:導(dǎo)入庫
另外,在計(jì)算AROON時(shí),需要用到talib庫,我們直接用import一行代碼導(dǎo)入。因?yàn)樵谑褂胻alib計(jì)算時(shí),必須先把數(shù)據(jù)處理成numpy.array類型,所以也到導(dǎo)入numpy庫。

import talib
import numpy as np

第三步:定義虛擬持倉變量
量化交易中判斷持倉分為兩種,一種是真實(shí)的賬戶持倉,另一種就是虛擬持倉,還有一種是真實(shí)持倉和虛擬持倉聯(lián)合判斷。實(shí)盤時(shí)我們只使用真實(shí)持倉就足夠了,但這里為了簡(jiǎn)化策略,作為演示使用虛擬持倉。

mp = 0  # 用于控制虛擬持倉

使用虛擬持倉的原理很簡(jiǎn)單,策略運(yùn)行之初默認(rèn)是空倉mp=0,當(dāng)開多單后把虛擬持倉重置為mp=1,當(dāng)開空單后把虛擬持倉重置為,mp=-1,當(dāng)平多單或空單后把虛擬持倉重置為mp=0。這樣我們?cè)谂袛鄻?gòu)建邏輯獲取倉位時(shí),只需要判斷mp的值就可以了。

第四步:計(jì)算阿隆指標(biāo)
計(jì)算阿隆指標(biāo),首先要獲取基礎(chǔ)數(shù)據(jù),但前提是先要訂閱數(shù)據(jù),也就是訂閱具體的合約代碼,你可以訂閱指數(shù)或者主力連續(xù),甚至還可以訂閱具體交割月份的合約代碼。然后是獲取K線數(shù)組,K線數(shù)組是一個(gè)包含開高低收、成交量和時(shí)間的序列數(shù)據(jù),同時(shí)也是計(jì)算大部分指標(biāo)的基礎(chǔ)數(shù)據(jù)。

在獲取K線數(shù)組之后,緊接著就需要判斷一下K線數(shù)組的長(zhǎng)度,因?yàn)槿绻鸎線數(shù)組太短,不足以計(jì)算指標(biāo)時(shí)就會(huì)出現(xiàn)異常。所以我們?cè)谶@里使用if語句,判斷如果K線數(shù)組小于指標(biāo)參數(shù)時(shí),就直接返回。

在使用talib計(jì)算指標(biāo)時(shí),它所傳入的參數(shù)是numpy.array類型數(shù)據(jù),所以還要把K線數(shù)組中的必要數(shù)據(jù)提取出來,并轉(zhuǎn)換成numpy.array類型數(shù)據(jù)。這里我們自定義一個(gè)get_data函數(shù),先別必要的數(shù)據(jù)提取出來。

# 把K線數(shù)組轉(zhuǎn)換成最高價(jià)和最低價(jià)數(shù)組,用于轉(zhuǎn)換為numpy.array類型數(shù)據(jù)
def get_data(bars):
    arr = [[], []]
    for i in bars:
        arr[0].append(i['High'])
        arr[1].append(i['Low'])
    return arr
    
    
exchange.SetContractType("ZC000")  # 訂閱期貨品種
bars = exchange.GetRecords()  # 獲取K線數(shù)組
if len(bars) < cycle_length + 1:  # 如果K線數(shù)組的長(zhǎng)度太小,所以直接返回
    return
np_arr = np.array(get_data(bars)) # 把列表轉(zhuǎn)換為numpy.array類型數(shù)據(jù),用于計(jì)算AROON的值
aroon = talib.AROON(np_arr[0], np_arr[1], 20);  # 計(jì)算阿隆指標(biāo)
aroon_up = aroon[1][len(aroon[1]) - 2];  # 阿隆指標(biāo)上線倒數(shù)第2根數(shù)據(jù)
aroon_down = aroon[0][len(aroon[0]) - 2];  # 阿隆指標(biāo)下線倒數(shù)第2根數(shù)據(jù)

talib在計(jì)算阿隆指標(biāo)時(shí),需要三個(gè)參數(shù),依次是:最高價(jià)numpy.array類型數(shù)據(jù)、最低價(jià)numpy.array類型數(shù)據(jù)、時(shí)間周期。所以我們?cè)谧远xget_data函數(shù)中只需要把K線數(shù)組中的最高價(jià)和最低價(jià)提取出來就可以了,并把它們都轉(zhuǎn)換成numpy.array類型數(shù)據(jù)。

緊接著,就可以計(jì)算阿隆指標(biāo)了,直接調(diào)用talib.AROON方法并傳入?yún)?shù)。計(jì)算后的阿隆指標(biāo)是一個(gè)二維數(shù)組,所以我們分別把阿隆指標(biāo)上線和下線分別提取出來,以便于判斷開平倉邏輯。

第五步:下單交易
在下單交易之前,我們要先獲取當(dāng)前最新價(jià)格,因?yàn)樵谙聠螘r(shí)需要在函數(shù)中傳入下單價(jià)格。還需要引入全局變量mp,主要用于控制虛擬倉位。

close0 = bars[len(bars) - 1].Close;  # 獲取當(dāng)根K線收盤價(jià)
global mp  # 全局變量,用于控制虛擬倉位
if mp == 0 and  aroon_up > aroon_down and aroon_up > 50:  # 如果當(dāng)前空倉,并且阿隆上線大于下線,并且阿隆上線大于50
    exchange.SetDirection("buy")  # 設(shè)置交易方向和類型
    exchange.Buy(close0, 1)  # 開多單
    mp = 1  # 設(shè)置虛擬持倉的值,即有多單
    
if mp == 0 and aroon_down > aroon_up and aroon_down > 50:  # 如果當(dāng)前空倉,并且阿隆下線大于上線,并且阿隆下線小于50
    exchange.SetDirection("sell")  # 設(shè)置交易方向和類型
    exchange.Sell(close0 - 1, 1)  # 開空單
    mp = -1  # 設(shè)置虛擬持倉的值,即有空單
    
if mp > 0 and  (aroon_up < aroon_down or aroon_up < 50):  # 如果當(dāng)前持有多單,并且阿隆上線小于下線或者阿隆上線小于50
    exchange.SetDirection("closebuy")  # 設(shè)置交易方向和類型
    exchange.Sell(close0 - 1, 1)  # 平多單
    mp = 0  # 設(shè)置虛擬持倉的值,即空倉
    
if mp < 0 and (aroon_down < aroon_up or aroon_down < 50):  # 如果當(dāng)前持有空單,并且阿隆下線小于上線或者阿隆下線小于50
    exchange.SetDirection("closesell")  # 設(shè)置交易方向和類型
    exchange.Buy(close0, 1)  # 平空單
    mp = 0  # 設(shè)置虛擬持倉的值,即空倉

萬事俱備之后,就可以判斷策略邏輯并開平倉下單交易了。在判斷策略邏輯時(shí)肯定是使用if語句,先判斷mp的持倉狀態(tài),然后再判斷阿隆上線和下線的相互位置關(guān)系。需要注意的是在期貨交易下單之前,先指定交易的方向類型,即:開多、開空、平多、平空。調(diào)用exchange.SetDirection()函數(shù),分別傳入:“buy”、“sell”、“closebuy”、“closesell”。最后下單之后重置持倉狀態(tài)mp的值。

完整策略

'''backtest
start: 2015-02-22 00:00:00
end: 2019-10-29 00:00:00
period: 1d
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
'''


import talib
import numpy as np


# 外部參數(shù)
# cycle_length = 100


# 定義全局變量
mp = 0  # 用于控制虛擬持倉


# 把K線數(shù)組轉(zhuǎn)換成最高價(jià)和最低價(jià)數(shù)組,用于轉(zhuǎn)換為numpy.array類型數(shù)據(jù)
def get_data(bars):
    arr = [[], []]
    for i in bars:
        arr[0].append(i['High'])
        arr[1].append(i['Low'])
    return arr


# 策略主函數(shù)
def onTick():
    exchange.SetContractType("ZC000")  # 訂閱期貨品種
    bars = exchange.GetRecords()  # 獲取K線數(shù)組
    if len(bars) < cycle_length + 1:  # 如果K線數(shù)組的長(zhǎng)度太小,所以直接返回
        return
    np_arr = np.array(get_data(bars)) # 把列表轉(zhuǎn)換為numpy.array類型數(shù)據(jù),用于計(jì)算AROON的值
    aroon = talib.AROON(np_arr[0], np_arr[1], 20);  # 計(jì)算阿隆指標(biāo)
    aroon_up = aroon[1][len(aroon[1]) - 2];  # 阿隆指標(biāo)上線倒數(shù)第2根數(shù)據(jù)
    aroon_down = aroon[0][len(aroon[0]) - 2];  # 阿隆指標(biāo)下線倒數(shù)第2根數(shù)據(jù)
    close0 = bars[len(bars) - 1].Close;  # 獲取當(dāng)根K線收盤價(jià)
    global mp  # 全局變量,用于控制虛擬倉位
    if mp == 0 and  aroon_up > aroon_down and aroon_up > 50:  # 如果當(dāng)前空倉,并且阿隆上線大于下線,并且阿隆上線大于50
        exchange.SetDirection("buy")  # 設(shè)置交易方向和類型
        exchange.Buy(close0, 1)  # 開多單
        mp = 1  # 設(shè)置虛擬持倉的值,即有多單
        
    if mp == 0 and aroon_down > aroon_up and aroon_down > 50:  # 如果當(dāng)前空倉,并且阿隆下線大于上線,并且阿隆下線小于50
        exchange.SetDirection("sell")  # 設(shè)置交易方向和類型
        exchange.Sell(close0 - 1, 1)  # 開空單
        mp = -1  # 設(shè)置虛擬持倉的值,即有空單
        
    if mp > 0 and  (aroon_up < aroon_down or aroon_up < 50):  # 如果當(dāng)前持有多單,并且阿隆上線小于下線或者阿隆上線小于50
        exchange.SetDirection("closebuy")  # 設(shè)置交易方向和類型
        exchange.Sell(close0 - 1, 1)  # 平多單
        mp = 0  # 設(shè)置虛擬持倉的值,即空倉
        
    if mp < 0 and (aroon_down < aroon_up or aroon_down < 50):  # 如果當(dāng)前持有空單,并且阿隆下線小于上線或者阿隆下線小于50
        exchange.SetDirection("closesell")  # 設(shè)置交易方向和類型
        exchange.Buy(close0, 1)  # 平空單
        mp = 0  # 設(shè)置虛擬持倉的值,即空倉
    

# 程序入口
def main():
    while True:  # 進(jìn)入無限循環(huán)模式
        onTick()  # 執(zhí)行策略主函數(shù)
        Sleep(1000)  # 休眠1秒

阿隆指標(biāo)的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):阿隆指標(biāo)可以判斷趨勢(shì)行情的狀態(tài),兼顧發(fā)現(xiàn)市場(chǎng)趨勢(shì)行情以及判斷價(jià)格轉(zhuǎn)向的能力,幫助交易者提高資金的使用率,這個(gè)優(yōu)勢(shì)震蕩行情中尤為重要。

缺點(diǎn):阿隆指標(biāo)只是趨勢(shì)跟蹤系列指標(biāo)中的一種,同樣也有趨勢(shì)跟蹤指標(biāo)的缺點(diǎn)。并且它只判斷指定時(shí)間最高價(jià)或最低價(jià)的周期數(shù),但有時(shí)候最高價(jià)或最低價(jià)在整個(gè)行情走勢(shì)中會(huì)有偶然性,這個(gè)偶然性會(huì)干擾阿隆指標(biāo)本身,造成虛假信號(hào)。

關(guān)于Python中怎么構(gòu)建一個(gè)阿隆策略就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。


新聞名稱:Python中怎么構(gòu)建一個(gè)阿隆策略
鏈接地址:http://weahome.cn/article/gjpici.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部