これは,ビットコインに使用されるカスタマイズされた多空頭取引戦略である.これは,1週間の異なる取引日に応じて,多空または空白を反省することを可能にします.価格は,毎週異なる取引日に1つの方向または別の方向に移動する傾向があり,この戦略は,このことを利用するために,一連の日付で異なる取引日をテストすることを可能にします.
スクリプトが想定通りに動作し,できるだけ多くの歴史データをTrading Viewから取得できるように,パフォーマンスと取引履歴を閲覧する際に日線図を使用することを確認してください.
この戦略の核心的な論理は,ユーザが1週間に1日ごとに多頭取引,空頭取引,または何も取引しないことを選択することを許すことである.
まず,ユーザーに,開始月,日,年,終了月,日,年など,測定の日付範囲を設定できるようにします.
それから,時間枠の配列を用いて,日曜日の0から土曜日の6まで,1日の数字を記憶します.
別の数列 timeframes_optionsは,毎日多頭,空頭,または取引しないという選択を保存するために使用されます.これは,入力オプションで設定されます.
forループでは,現在の取引日がタイムフレームの配列の中の特定の日と一致しているかどうかをチェックします. もし一致し,オプションが前日とは異なる場合は,まず,すべての未定のポジションをクローズします.
オプションが無でない場合は,選択した多頭または空頭に応じて対応する方向のポジションを開きます.
この戦略は,設定された日付の範囲で,毎日の週間の設定に基づいて多空頭取引を行うことができます.
この戦略の主な利点は,高度にカスタマイズされた多空頭取引を提供することです. ユーザーは,1週間毎にどの方向で取引するかを自由に選択できます.
固定された毎週取引戦略とは異なり,この戦略は柔軟に調整できます.ある日の結果が望ましくない場合は,他の日だけ取引を簡単に変更できます.
デート範囲も非常に柔軟で,ユーザーが指定した時間帯をテストして,どの日付の組み合わせが最も効果的かを確認できます.
取引の論理は,非常に明確でシンプルで,容易に理解し,修正できます.ユーザはプログラミングを必要とせずにパラメータを調整できます.
この戦略は,毎日方向が変わると,未定のポジションを自動的に平らげ,不必要なリスクを回避します.
この戦略の主なリスクは,ユーザが設定した日取引の選択肢が必ずしも全ての日程範囲に適しているわけではないことです.
例えば,週休の空き時間は,ある時間帯では有効であることが証明され,他の時間帯では失敗する可能性があります.
したがって,異なる日付の範囲を慎重にテストし,一度の反測結果に依存しないようにする必要があります.パラメータの調整は,特定の市場の状況に合わせてする必要があります.
もう一つのリスクは,毎日の方向の変化で平仓を時効的に停止できないこと。これは損失の拡大につながる可能性がある。しかし,この戦略は,自動平仓によってこの問題を軽減しようとしている。
一般的に,この戦略はパラメータ最適化に依存しており,異なる市場条件に適したパラメータの組み合わせを見つけるために十分なテストが必要です.
この戦略は,以下の方法で最適化できます.
日常の方向の変化に際して,ストップロジックを追加し,ポジションが利益を得ている時に移動ストップを設定し,撤回を最小限に抑える.
フィルターを追加し,価格が特定の日の高点または低点を破るときにシグナルを発信し,トレンドがないときに繰り返し取引を避ける.
高波動期にはポジションの規模を小さく,低波動期にはポジションを大きくすることで,リスクをコントロールできます.
取引日に機械学習を加えることで,歴史データに基づいて毎日の取引確率を判断し,ダイナミックな毎日の方向性を生成します.
金融の重大事件の発生時に取引を一時停止し,被套を回避するなど,突発的な事件の処理ロジックを増やす.
この戦略は,毎日の方向を選択することで,高度に柔軟な多空頭取引能力を提供する.ユーザーは,最適なパラメータを見つけるために,自由に組み合わせテストすることができます.しかし,この戦略は,高い最適化要求があり,異なる市場に適した設定を見つけるために大量のテストが必要です.止損,フィルター,動的調整などの最適化手段を追加することで,リスクを軽減し,安定性を向上させることができます.慎重にパラメータを最適化した場合,この戦略は,高効率の毎日の方向取引ツールになることができます.
/*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)))