
この戦略は,ブロックグラフ (Renko) をベースにした一方向の多頭取引システムであり,時間フィルター機構を組み合わせて,特定の取引時間のために設計されています. この戦略は,ATR (実際の波動幅の平均値) を使って,ブロックのサイズを動的に調整し,価格運動を形成するブロックを追跡することによって,上昇傾向を認識し,指定された取引時間内にのみ多頭取引を実行します. 戦略の核心は,ブロックグラフを活用して,市場騒音をフィルターし,継続的な価格変動を捕捉し,同時に,市場が非アクティブな時期を回避し,取引効率と資金の安全性を向上させることです.
この戦略は以下の核心原則に基づいています.
ブロック図の構造機構ブロックの大きさは,固定値またはATRベースの動的調整の2つの方法によって決定されます.ATRモードでは,ブロックの大きさは,特定の周期 ((デフォルト5) のATR値の倍数 ((デフォルト1.0)) で,ブロックの大きさは,市場の変動に応じて自律的に調整することができます.
方向を決定する論理策略は,価格の変化を追跡し,価格が前のブロックの結束価格に比べて上昇するとブロックの大きさを上回ると上昇ブロックが形成され,ブロックの大きさを上回ると下落ブロックが形成され,価格の変化がブロックの大きさを2倍を超えるとトレンドリバースが発生する.
取引シグナル生成: ブロックの方向が決して定義されない場合や,上昇が上昇に転じるときに買取シグナルを生成する. ブロックの方向が決して定義されない場合や,上昇が減少に転じるときに売り出せシグナルを生成する.
タイムフィルター策略: 指定された取引時間 (デフォルトは4:35から14:30) の内でのみ取引を行う.この時間は通常,主要市場のアクティブ時間に対応する.取引時間から出ると,システムは自動的にポジションを平らげ,夜間リスクを避ける.
一方向取引モデル策略:多頭取引のみを実行し,空白操作は行わない.看板傾向が明白または空白が禁止されている市場環境に適している.
この戦略は,コード分析に基づいて,以下の顕著な利点があります.
騒音フィルターブロック図は,市場のノイズをフィルターする能力を持ち,特定の値を超える価格変動のみで新しいブロックが形成され,わずかな価格変動に対する過剰な反応を効果的に回避します.
適応する:ATRでブロックのサイズを動的に調整することで,戦略は異なる市場環境と波動的な条件に適応し,高い波動期にはブロックのサイズを大きくし,低い波動期にはブロックのサイズを小さくします.
時間のリスク管理タイムフィルターは,市場が最も活発で流動性のある時間帯のみで取引を確実にし,夜間および朝の営業などの流動性の不足または異常な波動を回避します.
方向が明確になりました戦略は上昇傾向を捉え,論理は簡潔で明快で,多空交換による頻繁な取引と手数料の損失を避けています.
ビジュアルアシスタント: 戦略は,取引先が市場動態と戦略のパフォーマンスを直感的に理解できるように,買いや売りのシグナルラベルとブロックの高低点の可視化オプションを提供します.
資金管理戦略: 資金の量化取引モデルを採用し,初期資本に基づいてポジションの大きさを自動的に計算し,資金管理の複雑さを軽減します.
この戦略は合理的に設計されていますが,以下の潜在的なリスクがあります.
遅滞反応ブロックグラフは本質的に遅滞の指標であり,新しいブロックの形成は価格が特定の移動幅に達することを必要とし,入場と出場の相対的な遅延を引き起こし,急速な反転の市場で最高の取引ポイントを逃す可能性があります.
ショートラインの柔軟性がない: 戦略は新しいブロックが形成されたときにのみ信号を発し,短期間の利益の機会を逃す可能性があり,特に揺れ動いている市場ではうまく機能しません.
一方向制限戦略は,長期にわたって下落傾向にある時,戦略の効果が著しく低下する.
タイムフィルターの危険性: 固定取引時間設定は,非取引時間内の重要な機会を逃す可能性があり,取引時間の交差点では,不必要な平仓と再入場操作が発生する可能性があります.
パラメータ感度: 戦略の性能はブロックサイズパラメータの設定に大きく依存し,不適切なパラメータの選択は,過度取引や機会を逃す可能性があります.
解決:
この戦略は,コード分析により,以下の点で最適化できます.
多指標融合:RSI,MACD,または移動平均の交差などの他の技術指標と組み合わせて,確認信号として,入場品質を向上させる.これは,価格の形状にのみ依存する偽信号を避けるために,特に揺れ動いている市場で.
ダイナミック・ストップ・メカニズム:ATRベースのダイナミックストップなどのストップトラッキング機能を導入し,上スペースを保持しながら既得利益を保護する.これは大きなトレンドを捉えるために特に重要です.
双方向取引拡大:空頭取引機能の追加により,戦略は下落の市場でも同様に利益を得ることができ,戦略の全天候適応性を向上させる.
スマートタイムフィルター: 固定時間フィルタを市場活動に基づくダイナミック時間フィルタにアップグレードします.例えば,取引量分析を組み合わせ,流動性の高い時期に積極的な取引,流動性の低い時期に保守的な操作.
多周期分析: 複数の時間枠分析を導入し,例えば,より高いレベルの時間枠のトレンド方向を取引フィルタ条件として使用し,大きなトレンド方向が一致している場合にのみ取引する.
オプティマイゼーションパラメータの自在化: 市場状況の動向に応じてATR周期と倍数を調整するパラメータの自己適応メカニズムを開発し,異なる市場環境に戦略をより良く適応させる.
リスク暴露制御: ポジション管理アルゴリズムを追加し,市場の変動と信号の強さの動態に応じて取引規模を調整し,リスク暴露を制御する.
これらの最適化方向は,戦略の安定性と適応性を向上させ,不利な市場条件下での損失を軽減し,有利な市場条件下での収益性を最大化することを目的としています.
ブロックグラフ時間フィルター 単向多頭取引戦略は,価格動力と時間フィルターを組み合わせたトレンド追跡システムである.ブロックグラフの構築機構により,戦略は市場ノイズを効果的にフィルターし,継続的な価格変動を捉えることに焦点を当てている.時間フィルターにより,戦略は,市場が非アクティブな時期を回避し,夜間ポジションのリスクを低減する.
この戦略の主要な優点は,簡潔で明確な取引論理,自主的なブロックサイズ設計,そして厳格な時間管理で,波動が大きいが,全体的に上昇傾向にある市場に特に適しています.しかしながら,その片道取引特性と遅延反応は,注意すべき限界でもあります.
多指標確認,ダイナミック・ストップ・ロズメンの導入,双方向取引能力,インテリジェント・タイム・フィルタリングなどの最適化措置を導入することにより,この戦略は,異なる市場環境におけるそのパフォーマンスをさらに向上させる見込みがある. 安定した取引を追求し,より明確な取引シグナルと引き換えに一部の柔軟性を犠牲にしたい投資家にとって,これは考慮すべき戦略的枠組みである.
/*backtest
start: 2025-06-22 00:00:00
end: 2025-07-22 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":200000}]
args: [["RunMode",1,358374]]
*/
//@version=5
strategy("Renko Long-Only Strategy with Time Filter", overlay=true, default_qty_value = 10)
// --- 输入参数 ---
atrLength = input.int(5, "ATR Period", minval=1)//ATR周期
atrMult = input.float(1.0, "ATR Multiplier", minval=0.1, step=0.1)//ATR乘数
showWicks = input(false, "Show Wick Lines")//是否显示上下影线
showLabels = input(true, "Show Buy/Sell Labels")//是否显示买卖标签
// --- 交易时间设置(24小时制,从4:30 AM到2:30 PM)---
startHour = input.int(4, "Start Hour (24h)", minval=0, maxval=23)//开始交易小时
startMinute = input.int(30, "Start Minute", minval=0, maxval=59)//开始交易分钟
endHour = input.int(14, "End Hour (24h)", minval=0, maxval=23)//结束交易小时
endMinute = input.int(25, "End Minute", minval=0, maxval=59)//结束交易分钟
// --- 时间计算 ---
//检查当前是否在交易时间范围内
isTradingTime() =>
timeHour = hour(time("1"))//获取当前小时
timeMinute = minute(time("1"))//获取当前分钟
// 将时间转换为自午夜起的分钟数进行比较
currentTime = timeHour * 60 + timeMinute//当前时间(分钟)
sessionStart = startHour * 60 + startMinute//交易开始时间(分钟)
sessionEnd = endHour * 60 + endMinute//交易结束时间(分钟)
currentTime >= sessionStart and currentTime <= sessionEnd//判断是否在交易时间范围内
inTradingHours = isTradingTime()//当前是否在交易时间内
timeToClose = not inTradingHours and inTradingHours[1]//刚刚退出交易时间,需要平仓
// --- 砖块计算 ---
var float boxSize = na//砖块大小
var float lastClose = na//最后一个砖块的收盘价
var int direction = 0//方向:0=未定义,1=上涨,-1=下跌
var float wickHigh = na//上影线最高点
var float wickLow = na//下影线最低点
var bool newBrick = false//是否形成新砖块
var int prevDir = 0//前一个方向
// --- 全局信号变量 ---
var bool buySignal = false//买入信号
var bool sellSignal = false//卖出信号
// 更新基于ATR的砖块大小
boxSize :=ta.atr(atrLength) * atrMult//计算砖块大小
// 检测砖块形成条件
upMove = not na(lastClose) and (close - lastClose >= boxSize)//上涨移动
downMove = not na(lastClose) and (lastClose - close >= boxSize)//下跌移动
//反转条件:当前为上升趋势但下跌超过2倍砖块大小,或当前为下降趋势但上涨超过2倍砖块大小
reversal = (direction == 1 and downMove and (lastClose - close >= boxSize * 2)) or
(direction == -1 and upMove and (close - lastClose >= boxSize * 2))
// 生成新砖块
if na(lastClose)//初始化
lastClose := close//设置初始收盘价
wickHigh := high//设置初始最高价
wickLow := low//设置初始最低价
else if upMove and direction >= 0//继续上升趋势
lastClose := lastClose + boxSize//更新收盘价
prevDir := direction//保存前一个方向
direction := 1//设置当前方向为上升
wickHigh := high//更新上影线
wickLow := low//更新下影线
newBrick := true//标记形成新砖块
else if downMove and direction <= 0//继续下降趋势
lastClose := lastClose - boxSize//更新收盘价
prevDir := direction//保存前一个方向
direction := -1//设置当前方向为下降
wickHigh := high//更新上影线
wickLow := low//更新下影线
newBrick := true//标记形成新砖块
else if reversal//趋势反转
lastClose := direction == 1 ? lastClose - boxSize : lastClose + boxSize//根据当前方向反向更新收盘价
prevDir := direction//保存前一个方向
direction := direction * -1//反转方向
wickHigh := high//更新上影线
wickLow := low//更新下影线
newBrick := true//标记形成新砖块
else//没有新砖块形成
wickHigh := math.max(wickHigh, high)//更新上影线最高点
wickLow := math.min(wickLow, low)//更新下影线最低点
newBrick := false//标记没有形成新砖块
// 更新信号(必须在全局范围内)
buySignal := direction == 1 and prevDir != 1//方向从非上升变为上升时产生买入信号
sellSignal := direction == -1 and prevDir != -1//方向从非下降变为下降时产生卖出信号
// --- 策略逻辑 ---
// 只在形成新砖块、K线确认且在交易时间内进入
enterLong = buySignal and newBrick and barstate.isconfirmed and inTradingHours//买入条件
exitLong = (sellSignal and newBrick and barstate.isconfirmed) or timeToClose//卖出条件
// 执行交易
if (enterLong)
strategy.entry("Long", strategy.long)//开仓做多
if (exitLong)
strategy.close("Long")//平仓
// --- 绘图 ---
color brickColor = direction == 1 ? color.green : direction == -1 ? color.red : color.gray//根据方向设置砖块颜色
plot(lastClose, "Renko Close", brickColor, 2, plot.style_linebr)//绘制Renko收盘价
// 如果启用,绘制影线
plot(showWicks ? wickHigh : na, "High", color.new(brickColor, 70), 1, plot.style_circles)//绘制上影线
plot(showWicks ? wickLow : na, "Low", color.new(brickColor, 70), 1, plot.style_circles)//绘制下影线
// 绘制交易时间背景
bgcolor(inTradingHours ? color.new(color.blue, 90) : na)//在交易时间内显示浅蓝色背景