
이 전략은 블록 그래프 (Renko) 를 기반으로 한 한방향 다중 거래 시스템으로, 시간 필터 메커니즘을 결합하여 특정 거래 시기를 위해 설계되었습니다. 이 전략은 ATR (진실 변동의 평균) 을 사용하여 블록 크기를 동적으로 조정합니다. 가격 운동이 형성된 블록을 추적하여 상승 추세를 식별하고 지정된 거래 시간 내에만 다중 거래합니다. 전략의 핵심은 블록 그래프를 사용하여 시장 소음을 필터링하고 지속적인 가격 변화를 포착하며 시장의 비활성 시기를 피하면서 거래 효율성과 자금 안전성을 향상시킵니다.
이 전략은 다음과 같은 핵심 원칙에 기반을 두고 있습니다.
블록 그래프 구조 메커니즘: 시스템은 두 가지 방법으로 블록 크기를 결정한다 - 고정 값 또는 ATR 기반의 동적 조정. ATR 모드에서 블록 크기는 특정 주기 ((비용 5) 의 ATR 값을 곱한 배수 ((비용 1.0)) 로 조정하여 블록 크기를 시장의 변동성에 따라 조정할 수 있다.
방향 결정 논리전략: 가격 변화를 추적합니다. 가격이 이전 블록과 비교하여 종결 가격 상승이 블록 크기를 초과하면 상승 블록이 형성됩니다. 블록 크기를 초과하면 하락 블록이 형성됩니다. 가격 변화가 블록 크기를 두 배 이상하면 트렌드 반전이 발생합니다.
거래 신호 생성: 블록 방향이 결코 정의되지 않거나 하락이 상승으로 바뀌면 구매 신호가 발생; 블록 방향이 결코 정의되지 않거나 상승이 하락으로 바뀌면 판매 신호가 발생.
시간 필터전략: 지정된 거래 시간 내에만 거래를 수행합니다. 이 시간대는 일반적으로 주요 시장의 활성 시간에 해당합니다. 거래 시간을 벗어날 때 시스템은 자동으로 포지션을 평정하여 밤새 위험을 피합니다.
일방 거래 모드전략: 다자 거래만 실행하고, 포이킹을 하지 않는 전략, 부자 추세가 분명하거나 포이킹이 금지된 시장 환경에 적합하다.
코드 분석에 기초하여, 이 전략은 다음과 같은 중요한 장점을 가지고 있습니다.
노이즈 필터덩어리 도표는 시장의 소음을 필터링 할 수있는 자연스러운 능력을 가지고 있으며, 특정 하위치를 초과 한 가격 변화 만 새로운 덩어리가 형성 될 수 있으며, 소규모 가격 변동에 대한 과잉 반응을 효과적으로 방지합니다.
적응 조절: 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)//在交易时间内显示浅蓝色背景