
이것은 여러 기술적 지표와 거래 개념을 결합한 복잡한 양적 거래 전략이다. 이 전략은 주로 주문 블록 (Order Block), 트렌드 변화 탐지, 이동 평균 교차 및 여러 시간 프레임 분석을 기반으로 거래 신호를 생성한다. 전략의 핵심 아이디어는 더 큰 시간 프레임 (일 시간) 의 트렌드 방향에서, 더 작은 시간 프레임 (다음 5 분) 의 가격 행동과 기술 지표를 사용하여 정확한 진입과 출구를 하는 것이다.
주문 블록 (Order Block): 전략은 사용자 정의 함수를 사용하여 주문 블록을 계산합니다. 이것은 중요한 가격 수준이며, 일반적으로 대규모 기관의 주문을 나타내는 집중된 영역입니다.
트렌드 변화 탐지: 단순 이동 평균 ((SMA) 의 교차를 사용하여 잠재적인 트렌드 변화를 식별한다.
다중 시간 프레임 분석: 1시간 시간 프레임에 50주기 및 200주기의 지수 이동 평균 ((EMA) 을 계산하여 더 큰 시장 추세를 결정한다.
입장 조건:
출구 전략: 고정된 비율의 중지 및 중지 손실 수준을 사용하여 위험을 관리하고 수익을 잠금합니다.
다차원 분석: 여러 시간 프레임과 기술 지표가 결합되어 더 포괄적인 시장 관점을 제공합니다.
트렌드 추적: 큰 트렌드 방향으로 거래함으로써 수익 가능성을 높인다.
정확한 입학: 입학을 최적화하기 위해 주문 블록과 단기 트렌드 변화를 활용하십시오.
위험 관리: 미리 설정된 스톱 및 스톱 손실 비율을 사용하여 거래 당 위험을 효과적으로 제어합니다.
적응력: 전략의 매개 변수가 조정되어 다른 시장 환경에 적응할 수 있다.
과도한 거래: 격렬한 변동이 있는 시장에서 거래 신호가 자주 발생하여 거래 비용이 증가할 수 있다.
슬라이드 포인트 위험: 유동성이 낮은 시장에서 실제 실행 가격은 이상적인 가격과 큰 오차가 있을 수 있다.
트렌드 반전 위험: 트렌드 반전 지점 근처에서, 전략은 연속적인 손실을 입을 수 있다.
매개 변수 민감성: 정책 성능은 매개 변수 설정에 매우 민감할 수 있으며 지속적인 최적화가 필요합니다.
시장 환경 의존성: 경사 시장 또는 급격한 변동 시장에서 전략 효과가 좋지 않을 수 있다.
동적 변수 조정: 시장의 변동성에 따라 자동으로 조정되는 스톱 스톱 손실 비율을 고려하십시오.
필터 추가: 가짜 신호를 줄이기 위해 추가 기술 지표 또는 시장 감정 지표를 도입하십시오.
시간 필터: 거래 시간 창 제한을 추가하여 유동성이 낮은 시기를 피하십시오.
포지션 관리: 더 복잡한 포지션 관리 전략, 예를 들어 변동성에 기반한 포지션 조정.
회수 및 최적화: 보다 광범위한 역사 데이터 회수를 통해 최적의 변수 조합을 찾아내는 것.
시장 상황을 인식하는 것: 다양한 시장 상태를 인식하고 그에 따라 전략을 조정하는 알고리즘을 개발하십시오.
이것은 복합적이고 논리적으로 복잡한 수량 거래 전략으로, 다중 시간 프레임 분석, 주문 블록 이론 및 트렌드 추적 기술을 결합합니다. 전략은 큰 트렌드 방향에서 정확한 입구를 찾아 거래의 성공률을 높이는 것을 목표로합니다. 그러나, 전략은 그 복잡성으로 인해 과도한 적합성 및 변수 감수성 등에 직면합니다.
/*backtest
start: 2024-06-28 00:00:00
end: 2024-07-28 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("S&P 500", overlay=true)
// Parámetros
length = input(14, "Longitud")
src = input(close, "Fuente")
profit_percent = input.float(0.08955, "Porcentaje de ganancia", step=0.00001, minval=0)
stop_loss_percent = input.float(0.04477, "Porcentaje de stop loss", step=0.00001, minval=0)
// Función para calcular el Order Block
order_block(src, len) =>
highest = ta.highest(high, len)
lowest = ta.lowest(low, len)
mid = (highest + lowest) / 2
ob = src > mid ? highest : lowest
ob
// Cálculo del Order Block
ob = order_block(src, length)
// Función para detectar cambios de tendencia
trend_change(src, len) =>
up = ta.crossover(src, ta.sma(src, len))
down = ta.crossunder(src, ta.sma(src, len))
[up, down]
// Detectar cambios de tendencia
[trend_up, trend_down] = trend_change(src, length)
// Calcular EMA 50 y EMA 200 en timeframe de 1 hora
ema50_1h = request.security(syminfo.tickerid, "60", ta.ema(close, 50))
ema200_1h = request.security(syminfo.tickerid, "60", ta.ema(close, 200))
// Condiciones de EMA
ema_buy_condition = ema50_1h > ema200_1h
ema_sell_condition = ema50_1h < ema200_1h
// Señales de compra y venta
buy_signal = trend_up and close > ob and ema_buy_condition
sell_signal = trend_down and close < ob and ema_sell_condition
// Ejecutar la estrategia
if (buy_signal)
strategy.entry("Compra", strategy.long)
if (sell_signal)
strategy.entry("Venta", strategy.short)
// Calcular precios de toma de ganancias y stop loss
if (strategy.position_size != 0)
entry_price = strategy.position_avg_price
is_long = strategy.position_size > 0
take_profit = entry_price * (1 + (is_long ? 1 : -1) * profit_percent / 100)
stop_loss = entry_price * (1 + (is_long ? -1 : 1) * stop_loss_percent / 100)
strategy.exit(is_long ? "Long TP/SL" : "Short TP/SL", limit=take_profit, stop=stop_loss)
// Visualización
plot(ob, "Order Block", color.purple, 2)
plot(ta.sma(src, length), "SMA", color.blue)
plot(ema50_1h, "EMA 50 1h", color.yellow)
plot(ema200_1h, "EMA 200 1h", color.white)
bgcolor(buy_signal ? color.new(color.green, 90) : sell_signal ? color.new(color.red, 90) : na)