您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“HANS123策略的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“HANS123策略的示例分析”這篇文章吧。
前言
HANS123策略最早主要應用于外匯市場,其交易方式比較簡單,屬于趨勢突破系統,這種交易方式可以在趨勢形成的第一時間入場,因此得到很多交易員的青睞,迄今為止HANS123已經擴展了許多版本,今天我們就一起來認識HANS123策略。
策略原理
有的人認為,上午開盤是市場分歧最大的時候,很容易出現價格走勢方向不明,寬幅震蕩的情況。經過30分鐘左右的時間,市場充分消化完各種隔夜信息,價格走勢將趨于理性回歸正常。也就是說:前30分鐘左右的行情走勢,基本上構成了今天整體的交易格局。
上軌:開盤30分鐘內最高價
下軌:開盤30分鐘內最低價
此時產生的相對高低點,就形成道氏理論中所說的有效高低點,HANS123策略就是以此建立的交易邏輯。在國內期貨市場上,上午09:00開盤,09:30就可以判斷今天究竟是做多還是做空。當價格向上突破高點時,價格很容易繼續上升;價格向下突破低點時,價格很容易繼續下跌。
多頭開倉:當前無持倉,并且價格向上突破上軌
空頭開倉:當前無持倉,并且價格向下突破下軌
雖然突破策略能在趨勢形成時,第一時間入場。但這個優勢也是把雙刃劍,入場靈敏導致的結果就是,價格突破失敗。所以設置止損是非常有必要的。同時為了達到贏沖輸縮的策略邏輯,也要設置止盈。
多頭止損:當前持多單,達到虧損金額
空頭止損:當前持空單,達到虧損金額
多頭止盈,當前持多單,達到盈利金額
空頭止盈,當前持空單,達到盈利金額
策略編寫
依次打開:fmz.com網站 > 登錄 > 控制中心 > 策略庫 > 新建策略 > 點擊右上角下拉菜單選擇Python語言,開始編寫策略,注意看下面代碼中的注釋。
第1步:編寫策略框架
# 策略主函數 def onTick(): pass # 程序入口 def main(): while True: # 進入無限循環模式 onTick() # 執行策略主函數 Sleep(1000) # 休眠1秒
編寫策略框架,這個在之前的章節已經學習過,一個是onTick函數,另一個是main函數,其中在main函數中無限循環執行onTick函數。
第2步:定義全局變量
up_line = 0 # 上軌 down_line = 0 # 下軌 trade_count = 0 # 當天交易次數
因為上軌和下軌只是在09:30這個時間點才統計計算,其余時間不做統計,所以我們需要把這兩個變量寫到循環的外面。另外為了在日內交易中限制交易次數,也把trade_count變量寫到循環外面。在onTick策略主函數內使用這兩個全局變量之前,需要使用global關鍵字引用。
第3步:獲取數據
exchange.SetContractType("rb888") # 訂閱期貨品種 bar_arr = _C(exchange.GetRecords, PERIOD_M1) # 獲取1分鐘K線數組 current_close = bar_arr[-1]['Close'] # 獲取最新價格 if len(bar_arr) < 50: # 如果小于50根K線 return # 返回繼續等待數據
要想獲取數據,首先要使用發明者量化API中的SetContractType函數訂閱期貨品種,然后使用GetRecords函數獲取K線數組,也可以在使用GetRecords函數時傳入指定PERIOD_M11分鐘的K線數組。
緊接著就是獲取最新的價格,用來判斷當前價格與上下軌之間的位置關系,同時在下單交易使用Buy或Sell函數時,需要傳入指定的價格。另外別忘了過濾K線數量,因為如果K線過少,就會出現無法計算指標報錯。
第4步:處理時間函數
def current_time(): current_time = bar_arr[-1]['Time'] # 獲取當前K線時間戳 time_local = time.localtime(current_time / 1000) # 處理時間戳 hour = time.strftime("%H", time_local) # 格式化時間戳,并獲取小時 minute = time.strftime("%M", time_local) # 格式化時間戳,并獲取分鐘 if len(minute) == 1: minute = "0">
在計算上下軌和下單交易時,需要判斷當前的時間是否符合我們指定的交易時間,所以為了方便判斷,我們需要處理一下當前K線的具體小時數和分鐘數。
第5步:計算上下軌
global up_line, down_line, trade_count # 引入全局變量 current_time = current_time() # 處理時間 if current_time == 930: # 如果最新的K線時間是09:30 up_line = TA.Highest(bar_arr, 30, 'High') + count # 前30根K線最高價 down_line = TA.Lowest(bar_arr, 30, 'Low') - count # 前30根K線最低價 trade_count = 0 # 重置交易次數為0
要計算上下軌,首先要引入我們之前定義的全局變量,使用global關鍵字即可。想象一下我們需要計算的是09:00~09:30之間的最高價和最低價,因為我們是使用1分鐘的K線數據,也就是說當時間為09:30的時候,剛好有30根K線,那么我們直接計算這30根K線的最高價和最低價就可以了。
第6步:獲取持倉
position_arr = _C(exchange.GetPosition) # 獲取持倉數組 if len(position_arr) > 0: # 如果持倉數組長度大于0 position_arr = position_arr[0] # 獲取持倉字典數據 if position_arr['ContractType'] == 'rb888': # 如果持倉品種等于訂閱品種 if position_arr['Type'] % 2 == 0: # 如果是多單 position = position_arr['Amount'] # 賦值持倉數量為正數 else: position = -position_arr['Amount'] # 賦值持倉數量為負數 profit = position_arr['Profit'] # 獲取持倉盈虧 else: position = 0 # 賦值持倉數量為0 profit = 0 # 賦值持倉盈虧為0
持倉狀態牽涉到策略邏輯,我們前十節課程一直都是使用虛擬持倉,但在真實的交易環境中最好是使用GetPosition函數,獲取真實的持倉信息,包括:持倉方向、持倉盈虧、持倉數量等等。
第7步:下單交易
# 如果臨近收盤或者達到止盈止損 if current_time > 1450 or profit > stop * 3 or profit < -stop: if position > 0: # 如果持多單 exchange.SetDirection("closebuy") # 設置交易方向和類型 exchange.Sell(current_close - 1, 1) # 平多單 elif position < 0: # 如果持空單 exchange.SetDirection("closesell") # 設置交易方向和類型 exchange.Buy(current_close + 1, 1) # 平空單 # 如果當前無持倉,并且小于指定交易次數,并且在指定交易時間內 if position == 0 and trade_count < 2 and 930 < current_time < 1450: if current_close > up_line: # 如果價格大于上軌 exchange.SetDirection("buy") # 設置交易方向和類型 exchange.Buy(current_close + 1, 1) # 開多單 trade_count = trade_count + 1 # 交易次數加一次 elif current_close < down_line: # 如果價格小于下軌 exchange.SetDirection("sell") # 設置交易方向和類型 exchange.Sell(current_close - 1, 1) # 開空單 trade_count = trade_count + 1 # 交易次數加一次
為了避免策略出現邏輯錯誤,最好是將平倉邏輯寫到開倉邏輯的前面。在這個策略中,開倉時首先要判斷當前的持倉狀態、是否在指定的交易時間內,然后再判斷當前價格與上下軌之間的關系。平倉則是先判斷是否接近尾盤,或者是否達到止盈止損條件。
HANS123是一種非常典型且非常有效的自動化交易策略,它的基本原理是開盤一定時間內突破前一個市場的最高價或最低價順勢做多或做空,經過對止損止盈等參數的優化這套系統可以應用到幾乎所有的外匯品種中并且盈利穩定。這也是一種入場較早的交易模式,配合適當過濾技術,或可提高其勝算。
以上是“HANS123策略的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。