コモディティ・フューチャーズR-ブレイカー戦略

作者: リン・ハーン優しさ, 作成日:2020-06-02 08:57:10, 更新日:2023-11-02 19:52:44

img

概要

R-Breaker戦略は,リチャード・サイデンバーグによって開発され,1994年に発表された.米国"Futures Truth"誌によって15年連続で最も収益性の高い取引戦略のトップ10に選ばれました.他の戦略と比較して,R-Breakerはトレンドとトレンド逆転を組み合わせる取引戦略です.大きな利益を得るためにトレンド市場を捕獲できるだけでなく,市場のトレンドが逆転すると,利益を得るためにイニシアティブを取ることができ,トレンド逆転を追跡することができます.

抵抗とサポート

簡単に言うと,R-Breaker戦略は価格サポートとレジスタンス戦略です.昨日の最高値,最低値,閉値に基づいて7つの価格を計算します:中央価格 (ピボット) と3つのサポートレベル (s1 s2, s3),3つのレジスタンスレベル (r1, r2, r3). 次に,現在の価格とこれらのサポートとレジスタンスレベルとの位置関係に応じて,購入と販売のためのトリガー条件を形成し,あるアルゴリズム調整を通じて,これらの7つの価格間の距離を調整し,トランザクションのトリガー値をさらに変更します.

  • 割引価格 (レジスタンスレベル r3) = 昨日の最高価格+2 * (中央価格 - 昨日の最低価格) /2

  • 販売価格の観測 (レジスタンスレベル r2) = 中央価格 + (昨日の最高価格 - 昨日の最低価格)

  • 逆売り価格 (レジスタンスレベル r1) = 2 * 中央価格 - 昨日の最低価格

  • 中央価格 (ピボット) = (昨日の最高価格+昨日の閉値+昨日の最低価格) /3

  • 逆購買価格 (サポートレベルs1) = 2 * 中央価格 - 昨日の最高価格

  • 購入価格の観察 (サポートレベルs2) = 中央価格 - (昨日の最高価格 - 昨日の最低価格)

  • 割引値 (サポートレベルs3) = 昨日の最低値 - 2 * (昨日の最高値 - 中央値)

このことから,R-Breaker戦略は,昨日の価格に基づいてグリッドのような価格ラインを描き,これらの価格ラインを1日1回更新することを見ることができます.技術分析では,サポートとレジスタンスレベル,および両者の役割は互いに変換することができます.価格がレジスタンスレベルを成功裏に破ると,レジスタンスレベルがサポートレベルになります.価格がサポートレベルを成功裏に破ると,サポートレベルがレジスタンスレベルになります.

実際の取引では,これらのサポートレベルとレジスタンスレベルは,トレーダーにオープンと閉鎖ポジションの方向と正確な取引ポイントを指示します. 特定の開閉条件を持つトレーダーは,日内価格,中央価格,レジスタンスレベル,サポートレベルに応じて柔軟にカスタマイズすることができ,またこれらのグリッド価格ラインに基づいてポジションを管理することができます.

戦略の論理

次に,R-Breaker 戦略がこれらのサポートとレジスタンスレベルを使用する方法を見てみましょう.その論理はまったく複雑ではありません.ホールディングポジションがない場合は,トレンドモードに入ります.価格がブレイクスルー購入価格よりも大きいとき,ロングポジションを開く.価格がブレイクスルー販売価格よりも低いとき,ショートポジションを開く.

  • トレンドモード

オープン・ロング・ポジション:ホールディング・ポジションがなく,価格がブレイク・購入価格より高い場合

オープン・ショートポジション:ホールディングポジションがない場合,価格がブレイク・セールス価格より低い場合

ロングポジションを閉じる:ロングポジションを保持し,その日の最高価格が観測販売価格よりも高く,価格が逆販売価格よりも低い場合

ショートポジションを閉じる:ショートポジションを保持し,その日の最低価格が観察した購入価格よりも低く,価格が逆購買価格よりも大きい場合

  • バックモード

オープン・ロング・ポジション: ショート・ポジションを保持し,その日の最低価格が観測買い価格より低く,その価格が逆買い価格より大きい場合

オープンショートポジション:あなたがロングポジションを保持し,その日の最高価格が観測販売価格よりも高く,価格が逆販売価格よりも低い場合

ロングポジションを閉じる:ロングポジションが保持され,価格がブレイク販売価格より低い場合

ショートポジションを閉じる:ショートポジションを保持し,価格がブレイク購入価格より高い場合

ロングポジションを保持している場合,逆転モードに入ります.ロングポジションを保持している場合,当日の最高価格が観察販売価格よりも高く,価格が逆販売価格を下回ると,ロングポジションは閉鎖され,ショートポジションは同期的に開かれます.ショートポジションを保持している場合,当日の最低価格が観察購入価格よりも低く,価格が逆購入価格を突破すると,ショートポジションは閉鎖され,ロングポジションは開かれます.

戦略の書き込み

'''backtest
start: 2019-01-01 00:00:00
end: 2020-01-01 00:00:00
period: 5m
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
'''

# Strategy main function
def onTick():
    # retrieve data
    exchange.SetContractType(contract_type)   # Subscribe to futures products
    bars_arr = exchange.GetRecords(PERIOD_D1)  # Get daily K line array
    if len(bars_arr) < 2:  # If the number of K lines is less than 2
        return
    yesterday_open = bars_arr[-2]['Open']     # Yesterday's opening price
    yesterday_high = bars_arr[-2]['High']     # Yesterday's highest price
    yesterday_low = bars_arr[-2]['Low']       # Yesterday's lowest price
    yesterday_close = bars_arr[-2]['Close']   # Yesterday's closing price

    # Calculation
    pivot = (yesterday_high + yesterday_close + yesterday_low) / 3 # Pivot point
    r1 = 2 * pivot - yesterday_low # Resistance level 1
    r2 = pivot + (yesterday_high - yesterday_low) # Resistance level 2
    r3 = yesterday_high + 2 * (pivot - yesterday_low) # Resistance level 3
    s1 = 2 * pivot - yesterday_high  # Support level 1
    s2 = pivot - (yesterday_high - yesterday_low)  # Support level 2
    s3 = yesterday_low - 2 * (yesterday_high - pivot)  # Support level 3

    today_high = bars_arr[-1]['High'] # Today's highest price
    today_low = bars_arr[-1]['Low'] # Today's lowest price
    current_price = _C(exchange.GetTicker).Last # Current price

    # Get positions
    position_arr = _C(exchange.GetPosition)  # Get array of positions
    if len(position_arr) > 0:  # If the position array length is greater than 0
        for i in position_arr:
            if i['ContractType'] == contract_type:  # If the position variety equals the subscription variety
                if i['Type'] % 2 == 0:  # If it is long position
                    position = i['Amount']  # The number of assigned positions is positive
                else:
                    position = -i['Amount']  # The number of assigned positions is negative
                profit = i['Profit']  # Get position profit and loss
    else:
        position = 0  # The number of assigned positions is 0
        profit = 0  # The value of the assigned position is 0
        
    if position == 0:  # If there is no position
        if current_price > r3:  # If the current price is greater than Resistance level 3
            exchange.SetDirection("buy")  # Set transaction direction and type
            exchange.Buy(current_price + 1, 1)  # open long position
        if current_price < s3:  # If the current price is less than Support level 3
            exchange.SetDirection("sell")  # Set transaction direction and type
            exchange.Sell(current_price - 1, 1)  # open short position
        
    if position > 0:  # if holding long position
        if today_high > r2 and current_price < r1 or current_price < s3:  # If today's highest price is greater than Resistance level 2, and the current price is less than Resistance level 1
            exchange.SetDirection("closebuy")  # Set transaction direction and type
            exchange.Sell(current_price - 1, 1)  # close long position
            exchange.SetDirection("sell")  # Set transaction direction and type
            exchange.Sell(current_price - 1, 1)  # open short position

    if position < 0:  # if holding short position
        if today_low < s2 and current_price > s1 or current_price > r3:  # If today's lowest price is less than Support level 2, and the current price is greater than Support level 1
            exchange.SetDirection("closesell")  # Set transaction direction and type
            exchange.Buy(current_price + 1, 1)  # close short position
            exchange.SetDirection("buy")  # Set transaction direction and type
            exchange.Buy(current_price + 1, 1)  # open long position

            
# Program main function
def main():
    while True:     # loop
        onTick()    # Execution strategy main function
        Sleep(1000) # Sleep for 1 second

完全な戦略をコピー

FMZのプラットフォームで公開されています (FMZ.COM設定なしでバックテストすることができます:https://www.fmz.com/strategy/187009

概要

R-Breaker戦略が人気がある理由は,純粋にトレンド追跡戦略ではなく,トレンドアルファと逆アルファの両方の収益を得るための複合戦略である.この記事の戦略は,適切なパラメータと多様性を最適化することなく,デモのみである.さらに,完全な戦略にはストップ損失機能も含まれ,興味のある友人はそれを改善することができます.


関連性

もっと