週日のカスタム取引戦略

作者: リン・ハーンチャオチャン, 日時: 2023-09-26 20:49:44
タグ:

概要

これはビットコインのカスタム・ロング/ショート・トレーディング戦略で,週の異なる日にロングまたはショートリングをバックテストすることができます.価格は毎週週,ある方向または別の方向に動きます.この戦略は,これをキャピタライズするために,一連の日付をテストすることができます.

スクリプトが意図されたように動作し,TradingViewから最大限の履歴データを持っていることを確認するために,パフォーマンスと取引履歴を表示するときに,毎日タイムフレームにあることを確認してください.

戦略の論理

戦略の基本的な論理は,ユーザが毎週,ロング,ショート,またはゼロの取引を選択できるようにすることです.

まず,ユーザが開始月,日,年,終了月,日,年を含むバックテストの日付範囲を設定できます.

週間の各日の数値表現を 保存します 日曜0から土曜6まで

別の配列 timeframes_options は,毎日の長期,短期,または無期取引の選択を格納するために使用されます.これは入力オプションで設定されます.

forループでは,戦略が現在の取引日がタイムフレーム配列の1日と一致するかどうかをチェックします.そうであれば,オプションが前日と異なる場合は,最初にすべてのオープンポジションを閉じます.

オプションが"None"でない場合,選択した長または短値に基づいて適切な方向にポジションを開く.

ストラテジーは,毎週の設定に基づいて,設定された日付範囲で長/短取引することができます.

利点分析

この戦略の主な利点は,高度にカスタマイズ可能なロング/ショート取引を提供することです.ユーザーは,週の各日ごとに取引方向を選択する上で完全な自由を持っています.

固定された週間の取引戦略とは異なり,これは柔軟に調整できます.不良なパフォーマンスの日は他の日にのみ取引するように簡単に修正できます.

バックテストの日付範囲も非常に柔軟で,どの日付組み合わせが最もうまく機能するか確認するために,ユーザーが指定した任意の期間をテストすることができます.

トレーディングロジックは非常に明確でシンプルで,理解し,修正しやすい.ユーザーはコードなしでパラメータを調整することができます.

戦略は,方向変更でポジションを毎日自動閉じて,不必要なリスクを回避します.

リスク分析

主なリスクは,ユーザが選択した日取引選択がすべての日付範囲に適合しない可能性があることです.

例えば,平日の長時間と短い週末は,ある時期には効果的ですが,他の時期には失敗するかもしれません.

したがって,日付範囲は慎重にテストされ,バックテストの結果に依存しない必要があります.パラメータの調整は市場の条件を考慮する必要があります.

また,方向が毎日変わると,損失を間に合うように切れないこともあります.しかし,戦略は自動閉鎖でこれを軽減しようとします.

全体的に見ると,この戦略は最適化に依存しており,異なる市場条件に適したパラメータセットを見つけるのに十分なテストが必要です.

オプティマイゼーションの方向性

この戦略はいくつかの点で改善できる.

  1. 日々の方向変更にストップ・ロスのロジックを追加し,引き上げを制限するためにポジションが収益性のあるときにトラッキング・ストップを設定します

  2. フィルターを追加し,特定の日の高値/低値を突破するときにのみシグナルを取って,トレンドのない取引を避けます.

  3. 高波動期間のポジションサイズを減らすこと,波動が低いときのポジションサイズを増加させ,リスクを制御する.

  4. 機械学習を取引日の選択に追加し 歴史的データに基づいて各日の確率を判断し ダイナミックな日々の方向性を生成します

  5. 取引を一時停止してオフサイドに捕まらないようにする.

結論

この戦略は,日々の方向選択を通じて非常に柔軟な長/短取引能力を提供します.ユーザーは最適なパラメータのテストを自由に組み合わせることができます.しかし,高い最適化要件があり,異なる市場に適した設定を見つけるために広範なテストが必要です.ストップ,フィルター,動的調整などの強化を追加することでリスクを軽減し,強度を向上することができます.慎重なパラメータ最適化により,戦略は効果的な日々の方向性取引ツールになることができます.


/*backtest
start: 2022-09-19 00:00:00
end: 2023-09-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

//@version=4
// strategy("Day of Week Custom Buy/Sell Strategy", overlay=true, currency=currency.USD, default_qty_value=1.0,initial_capital=30000.00,default_qty_type=strategy.percent_of_equity)

frommonth = input(defval = 6, minval = 01, maxval = 12, title = "From Month")
fromday = input(defval = 14, minval = 01, maxval = 31, title = "From day")
fromyear = input(defval = 2021, minval = 1900, maxval = 2100, title = "From Year")

tomonth = input(defval = 12, minval = 01, maxval = 12, title = "To Month")
today = input(defval = 31, minval = 01, maxval = 31, title = "To day")
toyear = input(defval = 2100, minval = 1900, maxval = 2100, title = "To Year")

timeframes = array.new_int(7, 1)
timeframes_options = array.new_string(7, 'None')

array.set(timeframes,0,7)
array.set(timeframes_options,0, input(defval='None', options=['Long','Short','None'], title='sunday'))
array.set(timeframes,1,1)
array.set(timeframes_options,1, input(defval='Long', options=['Long','Short','None'], title='monday'))
array.set(timeframes,2,2)
array.set(timeframes_options,2, input(defval='Long', options=['Long','Short','None'], title='tuesday'))
array.set(timeframes,3,3)
array.set(timeframes_options,3, input(defval='Long', options=['Long','Short','None'], title='wednesday'))
array.set(timeframes,4,4)
array.set(timeframes_options,4, input(defval='None', options=['Long','Short','None'], title='thursday'))
array.set(timeframes,5,5)
array.set(timeframes_options,5, input(defval='None', options=['Long','Short','None'], title='friday'))
array.set(timeframes,6,6)
array.set(timeframes_options,6, input(defval='None', options=['Long','Short','None'], title='saturday'))



for i = 0 to array.size(timeframes) - 1
    
    if dayofweek == array.get(timeframes, i) and array.get(timeframes_options, i) != array.get(timeframes_options, i==0?6:i-1)
        strategy.close_all()

    if dayofweek == array.get(timeframes, i) and array.get(timeframes_options, i)!='None' and array.get(timeframes_options, i) != array.get(timeframes_options, i==0?6:i-1)
        if array.get(timeframes_options, i) == 'Long'
            strategy.entry("Long", strategy.long, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))
        else if array.get(timeframes_options, i) == 'Short'
            strategy.entry("Short", strategy.short, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))


もっと