이것은 여러 기술적 지표와 거래 개념을 결합한 복잡한 수치적 거래 전략이다. 전략은 주로 오더 블록, 트렌드 변화 탐지, 이동 평균 크로스오버 및 멀티 타임프레임 분석을 기반으로 거래 신호를 생성합니다. 핵심 아이디어는 더 작은 시간 프레임 (5 분) 에 가격 액션과 기술적 지표를 사용하여 더 큰 시간 프레임 (1 시간) 에 트렌드의 방향으로 정확하게 진입하고 종료하는 것입니다.
주문 블록: 전략은 주문 블록을 계산하기 위해 사용자 정의 함수를 사용합니다. 이는 일반적으로 집중된 기관 주문 영역을 나타내는 중요한 가격 수준입니다.
트렌드 변화 탐지: 단순한 이동 평균 (SMA) 의 크로스오버를 사용하여 잠재적 인 트렌드 변화를 식별합니다.
멀티 타임프레임 분석: 더 넓은 시장 트렌드를 결정하기 위해 1 시간 프레임에서 50 기간 및 200 기간 기하급수적 이동 평균 (EMA) 을 계산합니다.
입국 조건:
출구 전략: 위험 관리 및 수익을 차단하기 위해 고정 비율의 수익 및 스톱 손실 수준을 사용합니다.
다차원 분석: 여러 시간 프레임과 기술적 지표를 결합하여 보다 포괄적인 시장 관점을 제공합니다.
트렌드 추종: 더 큰 트렌드 방향으로 거래함으로써 수익성있는 거래의 확률을 증가시킵니다.
정확한 엔트리: 엔트리 타이밍을 최적화하기 위해 주문 블록과 단기 트렌드 변화를 사용합니다.
리스크 관리: 미리 설정된 수익률과 스톱-러스 비율을 사용하여 각 거래의 위험을 효과적으로 제어합니다.
적응력: 전략 매개 변수를 다른 시장 환경에 적응하도록 조정할 수 있습니다.
과잉 거래: 매우 변동적인 시장에서 거래 신호를 자주 생성하여 거래 비용을 증가시킬 수 있습니다.
미끄러짐 위험: 유동성이 낮은 시장에서 실제 실행 가격은 이상 가격에서 크게 벗어날 수 있습니다.
트렌드 역전 위험: 트렌드 전환점 근처에서 전략은 연속적인 손실을 입을 수 있습니다.
매개 변수 민감성: 전략 성능은 매개 변수 설정에 매우 민감할 수 있으며 지속적인 최적화를 요구합니다.
시장 환경 의존성 (Market Environment Dependence): 전략은 시장의 범위 또는 빠르게 변동하는 시장에서 잘 수행되지 않을 수 있습니다.
동적 매개 변수 조정: 시장 변동성에 따라 자동으로 수익률 및 스톱 손실 비율을 조정하는 것을 고려하십시오.
추가 필터: 잘못된 신호를 줄이기 위해 추가 기술 또는 시장 정서 지표를 도입하십시오.
시간 필터링: 낮은 유동성 기간을 피하기 위해 거래 시간 창 제한을 추가합니다.
포지션 관리: 변동성 기반 포지션 크기 등 보다 정교한 포지션 관리 전략을 구현합니다.
백테스팅 및 최적화: 최적의 매개 변수 조합을 찾기 위해 더 광범위한 역사 데이터 백테스팅을 수행합니다.
시장 환경 인식: 다른 시장 상태를 식별하고 그에 따라 전략을 조정하는 알고리즘을 개발합니다.
이 전략은 다중 타임프레임 분석, 오더 블록 이론, 트렌드 추적 기법을 결합한 포괄적이고 논리적으로 복잡한 양적 거래 전략이다. 더 큰 트렌드의 방향으로 정확한 입구점을 찾는 것을 목표로, 전략은 거래의 성공률을 향상시키는 것을 목표로 한다. 그러나, 복잡성으로 인해, 전략은 또한 과잉 적합성 및 매개 변수 민감성 등의 과제에 직면한다. 미래 최적화는 동적 매개 변수 조정, 추가 필터 및 더 정교한 위치 관리 방법을 포함한 전략의 적응성과 견고성 향상에 초점을 맞추어야 한다. 전반적으로, 이 전략은 고주파 거래에 대한 우수한 틀을 제공하지만 신중한 구현과 지속적인 모니터링 및 조정을 필요로 한다.
/*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)