
この戦略の核心的な考えは,時間とATR指標を組み合わせて買入タイミングとストップポイントを設定することです.戦略は,指定された時間点で定時買入シグナルを発信し,その時の閉店価格を買入価格として,それから買入価格にATR値を追加してストップポイントとして設定します.このようにして,不適切な買入タイミングをフィルターすることができ,同時にATRを使用してリスクを制御できます.
この戦略は以下の部分から構成されています.
入力パラメータ:購入時間timeTradeとATRパラメータatrLength。 timeTradeが購入時間を決定し,atrLengthがATRの周期パラメータを決定する。
ATR指標を計算する:atrLengthパラメータに基づいてATR指標の値を計算するatrValue。
購入条件を定義します. 時と分の組み合わせがtimeTradeに等しいときに購入シグナルを生成します.
購入指示を発行: 購入条件を満たしたときに追加し,購入価格buypriceを記録する.
ストップ・ロスを設定する:ストップ・ロスは購入価格にATR値を加える。価格がストップ・ロスを突破するとストップ・ロスは退出する。
図: ストップダメージの水平線を描く.
この戦略の最大の利点は,時間とATR指標を使って購入のタイミングと停止のポイントを二重確認することです.これは,盲目的に市場の購入をフォローすることを回避し,リスクを効果的に制御しています.次に,ATRの設定による停止のポイントは動的であり,市場の変動程度に応じて合理的な停止範囲を設定することができます.最後に,戦略の論理はシンプルで,容易に理解し,追跡できます.
この戦略には以下のリスクがあります.
購入のタイミングを間違えたり,良いタイミングを逃したり,好ましくない市場から購入したりする可能性があります.
ATRパラメータの設定が不適切で,ストップポイントが大きすぎても小さすぎても,戦略の効果に影響する.
長線トレンドを効果的に追跡できないため,短線操作に適しています.
基本的な分析要素は考慮されていません.
この戦略は,以下の点でさらに最適化できます.
複数の要因モデルを組み合わせて,より科学的購入時間を決定する.
波動率モデルと組み合わせてATRパラメータの設定を最適化する.
トレンド追跡機能が追加され,より長いポジション期間に対応できる.
基本的分析に組み込まれて,購入のタイミングが合理的か判断する.
この戦略は,全体として,よりシンプルで直観的なHFTのintraday取引戦略である.核心的な考え方は,時間と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)")