您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“HANS123策略的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“HANS123策略的示例分析”這篇文章吧。
前言
HANS123策略最早主要應(yīng)用于外匯市場,其交易方式比較簡單,屬于趨勢(shì)突破系統(tǒng),這種交易方式可以在趨勢(shì)形成的第一時(shí)間入場,因此得到很多交易員的青睞,迄今為止HANS123已經(jīng)擴(kuò)展了許多版本,今天我們就一起來認(rèn)識(shí)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è)資訊頻道!
免責(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)容。