溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

HANS123策略的示例分析

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

這篇文章主要為大家展示了“HANS123策略的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“HANS123策略的示例分析”這篇文章吧。

前言

HANS123策略最早主要應(yīng)用于外匯市場,其交易方式比較簡單,屬于趨勢(shì)突破系統(tǒng),這種交易方式可以在趨勢(shì)形成的第一時(shí)間入場,因此得到很多交易員的青睞,迄今為止HANS123已經(jīng)擴(kuò)展了許多版本,今天我們就一起來認(rèn)識(shí)HANS123策略。
HANS123策略的示例分析

策略原理

有的人認(rèn)為,上午開盤是市場分歧最大的時(shí)候,很容易出現(xiàn)價(jià)格走勢(shì)方向不明,寬幅震蕩的情況。經(jīng)過30分鐘左右的時(shí)間,市場充分消化完各種隔夜信息,價(jià)格走勢(shì)將趨于理性回歸正常。也就是說:前30分鐘左右的行情走勢(shì),基本上構(gòu)成了今天整體的交易格局。

  • 上軌:開盤30分鐘內(nèi)最高價(jià)

  • 下軌:開盤30分鐘內(nèi)最低價(jià)

此時(shí)產(chǎn)生的相對(duì)高低點(diǎn),就形成道氏理論中所說的有效高低點(diǎn),HANS123策略就是以此建立的交易邏輯。在國內(nèi)期貨市場上,上午09:00開盤,09:30就可以判斷今天究竟是做多還是做空。當(dāng)價(jià)格向上突破高點(diǎn)時(shí),價(jià)格很容易繼續(xù)上升;價(jià)格向下突破低點(diǎn)時(shí),價(jià)格很容易繼續(xù)下跌。

  • 多頭開倉:當(dāng)前無持倉,并且價(jià)格向上突破上軌

  • 空頭開倉:當(dāng)前無持倉,并且價(jià)格向下突破下軌

雖然突破策略能在趨勢(shì)形成時(shí),第一時(shí)間入場。但這個(gè)優(yōu)勢(shì)也是把雙刃劍,入場靈敏導(dǎo)致的結(jié)果就是,價(jià)格突破失敗。所以設(shè)置止損是非常有必要的。同時(shí)為了達(dá)到贏沖輸縮的策略邏輯,也要設(shè)置止盈。

  • 多頭止損:當(dāng)前持多單,達(dá)到虧損金額

  • 空頭止損:當(dāng)前持空單,達(dá)到虧損金額

  • 多頭止盈,當(dāng)前持多單,達(dá)到盈利金額

  • 空頭止盈,當(dāng)前持空單,達(dá)到盈利金額

策略編寫

依次打開:fmz.com網(wǎng)站 > 登錄 > 控制中心 > 策略庫 > 新建策略 > 點(diǎn)擊右上角下拉菜單選擇Python語言,開始編寫策略,注意看下面代碼中的注釋。

第1步:編寫策略框架

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


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

編寫策略框架,這個(gè)在之前的章節(jié)已經(jīng)學(xué)習(xí)過,一個(gè)是onTick函數(shù),另一個(gè)是main函數(shù),其中在main函數(shù)中無限循環(huán)執(zhí)行onTick函數(shù)。

第2步:定義全局變量

up_line = 0  # 上軌
down_line = 0  # 下軌
trade_count = 0  # 當(dāng)天交易次數(shù)

因?yàn)樯宪壓拖萝壷皇窃?9:30這個(gè)時(shí)間點(diǎn)才統(tǒng)計(jì)計(jì)算,其余時(shí)間不做統(tǒng)計(jì),所以我們需要把這兩個(gè)變量寫到循環(huán)的外面。另外為了在日內(nèi)交易中限制交易次數(shù),也把trade_count變量寫到循環(huán)外面。在onTick策略主函數(shù)內(nèi)使用這兩個(gè)全局變量之前,需要使用global關(guān)鍵字引用。

第3步:獲取數(shù)據(jù)

exchange.SetContractType("rb888")  # 訂閱期貨品種
bar_arr = _C(exchange.GetRecords, PERIOD_M1)  # 獲取1分鐘K線數(shù)組
current_close = bar_arr[-1]['Close']  # 獲取最新價(jià)格
if len(bar_arr) < 50:  # 如果小于50根K線
    return  # 返回繼續(xù)等待數(shù)據(jù)

要想獲取數(shù)據(jù),首先要使用發(fā)明者量化API中的SetContractType函數(shù)訂閱期貨品種,然后使用GetRecords函數(shù)獲取K線數(shù)組,也可以在使用GetRecords函數(shù)時(shí)傳入指定PERIOD_M11分鐘的K線數(shù)組。

緊接著就是獲取最新的價(jià)格,用來判斷當(dāng)前價(jià)格與上下軌之間的位置關(guān)系,同時(shí)在下單交易使用Buy或Sell函數(shù)時(shí),需要傳入指定的價(jià)格。另外別忘了過濾K線數(shù)量,因?yàn)槿绻鸎線過少,就會(huì)出現(xiàn)無法計(jì)算指標(biāo)報(bào)錯(cuò)。

第4步:處理時(shí)間函數(shù)

def current_time():
    current_time = bar_arr[-1]['Time']  # 獲取當(dāng)前K線時(shí)間戳
    time_local = time.localtime(current_time / 1000)  # 處理時(shí)間戳
    hour = time.strftime("%H", time_local)  # 格式化時(shí)間戳,并獲取小時(shí)
    minute = time.strftime("%M", time_local)  # 格式化時(shí)間戳,并獲取分鐘
    if len(minute) == 1:
        minute = "0">

在計(jì)算上下軌和下單交易時(shí),需要判斷當(dāng)前的時(shí)間是否符合我們指定的交易時(shí)間,所以為了方便判斷,我們需要處理一下當(dāng)前K線的具體小時(shí)數(shù)和分鐘數(shù)。

第5步:計(jì)算上下軌

global up_line, down_line, trade_count  # 引入全局變量
current_time = current_time()  # 處理時(shí)間
if current_time == 930:  # 如果最新的K線時(shí)間是09:30
    up_line = TA.Highest(bar_arr, 30, 'High') + count  # 前30根K線最高價(jià)
    down_line = TA.Lowest(bar_arr, 30, 'Low') - count  # 前30根K線最低價(jià)
    trade_count = 0  # 重置交易次數(shù)為0

要計(jì)算上下軌,首先要引入我們之前定義的全局變量,使用global關(guān)鍵字即可。想象一下我們需要計(jì)算的是09:00~09:30之間的最高價(jià)和最低價(jià),因?yàn)槲覀兪鞘褂?分鐘的K線數(shù)據(jù),也就是說當(dāng)時(shí)間為09:30的時(shí)候,剛好有30根K線,那么我們直接計(jì)算這30根K線的最高價(jià)和最低價(jià)就可以了。

第6步:獲取持倉

position_arr = _C(exchange.GetPosition)  # 獲取持倉數(shù)組
if len(position_arr) > 0:  # 如果持倉數(shù)組長度大于0
    position_arr = position_arr[0]  # 獲取持倉字典數(shù)據(jù)
    if position_arr['ContractType'] == 'rb888':  # 如果持倉品種等于訂閱品種
        if position_arr['Type'] % 2 == 0:  # 如果是多單
            position = position_arr['Amount']  # 賦值持倉數(shù)量為正數(shù)
        else:
            position = -position_arr['Amount']  # 賦值持倉數(shù)量為負(fù)數(shù)
        profit = position_arr['Profit']  # 獲取持倉盈虧
else:
    position = 0  # 賦值持倉數(shù)量為0
    profit = 0  # 賦值持倉盈虧為0

持倉狀態(tài)牽涉到策略邏輯,我們前十節(jié)課程一直都是使用虛擬持倉,但在真實(shí)的交易環(huán)境中最好是使用GetPosition函數(shù),獲取真實(shí)的持倉信息,包括:持倉方向、持倉盈虧、持倉數(shù)量等等。

第7步:下單交易

# 如果臨近收盤或者達(dá)到止盈止損
if current_time > 1450 or profit > stop * 3 or profit < -stop:
    if position > 0:  # 如果持多單
        exchange.SetDirection("closebuy")  # 設(shè)置交易方向和類型
        exchange.Sell(current_close - 1, 1)  # 平多單
    elif position < 0:  # 如果持空單
        exchange.SetDirection("closesell")  # 設(shè)置交易方向和類型
        exchange.Buy(current_close + 1, 1)  # 平空單
# 如果當(dāng)前無持倉,并且小于指定交易次數(shù),并且在指定交易時(shí)間內(nèi)
if position == 0 and trade_count < 2 and 930 < current_time < 1450:
    if current_close > up_line:  # 如果價(jià)格大于上軌
        exchange.SetDirection("buy")  # 設(shè)置交易方向和類型
        exchange.Buy(current_close + 1, 1)  # 開多單
        trade_count = trade_count + 1  # 交易次數(shù)加一次
    elif current_close < down_line:  # 如果價(jià)格小于下軌
        exchange.SetDirection("sell")  # 設(shè)置交易方向和類型
        exchange.Sell(current_close - 1, 1)  # 開空單
        trade_count = trade_count + 1  # 交易次數(shù)加一次

為了避免策略出現(xiàn)邏輯錯(cuò)誤,最好是將平倉邏輯寫到開倉邏輯的前面。在這個(gè)策略中,開倉時(shí)首先要判斷當(dāng)前的持倉狀態(tài)、是否在指定的交易時(shí)間內(nèi),然后再判斷當(dāng)前價(jià)格與上下軌之間的關(guān)系。平倉則是先判斷是否接近尾盤,或者是否達(dá)到止盈止損條件。

HANS123是一種非常典型且非常有效的自動(dòng)化交易策略,它的基本原理是開盤一定時(shí)間內(nèi)突破前一個(gè)市場的最高價(jià)或最低價(jià)順勢(shì)做多或做空,經(jīng)過對(duì)止損止盈等參數(shù)的優(yōu)化這套系統(tǒng)可以應(yīng)用到幾乎所有的外匯品種中并且盈利穩(wěn)定。這也是一種入場較早的交易模式,配合適當(dāng)過濾技術(shù),或可提高其勝算。

以上是“HANS123策略的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI