この戦略の主な考え方は,買い込みタイミングとストップ損失点を設定するために,時間とATR指標を組み合わせることです.戦略は,指定された時間点でタイミング付きの買い信号を発行し,その時点の閉じる価格を購入価格として使用し,その後,購入価格プラスATR値でストップ損失点を設定します.これは,リスクを制御するためにATRを使用しながら,不適切な買い込みタイミングをフィルタリングすることができます.
戦略は以下の主要な部分で構成されています.
入力パラメータ:買い込み時間 timeTradeとATRパラメータ atrLengthを含む. timeTradeは買い込み時間を決定し, atrLengthはATRの期間パラメータを決定します.
ATR指標を計算する: atrLengthパラメータに基づいてATR値 atrValueを計算する.
買い条件を定義: 時数と分数の組み合わせが timeTrade に等しいとき,買い信号を生成します.
購入命令を発行: 購入条件が満たされたとき,買い価格を記録します.
ストップ・ロスのポイントを設定:ストップ・ロスのポイントは,購入価格プラスATR値で設定されます.価格がこのポイントを突破するとストップ・ロスの出口です.
ストップ・ロスのレベルラインをプロットする.
この戦略の最大の利点は,バイインタイミングとストップロスのポイントを時間とATR指標で二重確認することです.これは,市場を盲目的にフォローしてバイインすることを避け,リスクを効果的に制御します.第二に,ATRによって設定されたストップロスのポイントは動的に変化しており,市場の変動に応じて合理的なストップロスの範囲を設定できます.最後に,戦略論理は単純で理解し,追跡しやすいです.
この戦略の主なリスクは以下のとおりです.
買い込み時間の設定が不適切なら より良い買い込み機会を逃すか 望ましくない市場で買い込みする可能性があります
ATRの不適切なパラメータ設定は,ストップ・ロストポイントが大きすぎたり小さすぎたりした場合,戦略のパフォーマンスに影響を与える.
長期的動向を効果的に追跡できないため,短期的な操作に適しています.
基本的な分析要素は考慮されません.
この戦略は,次の側面でさらに最適化できます.
多因子モデルを組み合わせることで より科学的な買い込み時間を決定する.
ATRパラメータの設定を最適化する 変動モデルを組み合わせる
傾向を追跡するメカニズムを強化し,より長い保持期間に対応する.
基本分析を組み込み,買い入りのタイミングの合理性を判断する
一般的に,これは比較的シンプルで直感的な高周波の日中取引戦略です. 基本的なアイデアは,バイインタイムとストップロスのポイントを決定するために,時間の二重確認とATR指標を使用することです. 利点は制御可能なリスクであり,比較的容易な実装です. しかし,バイインタイムの不十分な選択や不十分なパラメータ最適化などの問題もあります. より多くの要因,ダイナミックパラメータ最適化,トレンドトラッキングなどの導入から将来の最適化を行うことができます.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Time-based Strategy with ATR Take Profit", overlay=true) // Initialize take profit levels var float takeProfitLevel = na var float takeProfitLevelForSell = na var float buyprice = na var float sellprice = na // Input for the time when the trade should be executed tradeTime = input(0700, "Trade Execution Time (HHMM)", "Specify the time in HHMM format", group="Time Settings") // Calculate ATR for the last 5 minutes atrLength = input(14, "ATR Length", "Specify ATR length", group="ATR Settings") atrValue = request.security(syminfo.tickerid, "5", ta.atr(atrLength)) // Define conditions for buy and sell buyCondition = hour * 100 + minute == tradeTime // and strategy.position_size == 0 sellCondition = hour * 100 + minute == tradeTime // and strategy.position_size > 0 // Execute Buy and Sell orders if (buyCondition) strategy.entry("Buy", strategy.long) buyprice := close takeProfitLevel := buyprice + atrValue strategy.exit("Take Profit BUY", from_entry="Buy", limit =takeProfitLevel) // if (sellCondition) // strategy.entry("Sell", strategy.short) // sellprice := close // takeProfitLevelForSell := sellprice -atrValue // strategy.exit("Take Profit Sell", from_entry="Sell", limit=takeProfitLevelForSell) // Plot horizontal lines for take profit levels plot(takeProfitLevel, color=color.green, title="Take Profit Level (Buy)") plot(takeProfitLevelForSell, color=color.red, title="Take Profit Level (Sell)")