양적 파선 전략


생성 날짜: 2023-11-21 13:43:24 마지막으로 수정됨: 2023-12-01 15:01:07
복사: 1 클릭수: 622
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

양적 파선 전략

개요

이 전략의 목적은 K선 색상, 교차량 및 무작위 방법과 같은 다양한 입력 변수를 테스트하여 시너지 파동 방식으로 가격 변화를 예측할 수 있는지 확인하는 것입니다. 전략은 이러한 변수를 시너지 파동 형태로 변환하여 정해진 횟수가 도달하면 구매 또는 판매 결정을 내립니다.

전략 원칙

전략은 세 부분으로 나뉘어져 있는데, 첫 번째 부분은 K선의 색 변화를 검출한다. 동일한 색의 K선 몇 개 후에 다른 색이 나타났을 때, 시너지파가 변한다. 두 번째 부분은 트래픽이 평균보다 높거나 낮은지 검출하고, 평균을 돌파할 때 파가 변한다.

코드는 세 개의 파동의 현재 방향, 파도 정점, 그리고 상위 K 선의 상태를 추적하여 파동의 동작을 제어한다. 파도 정점이 파라미터를 설정했을 때 동작 방향을 변경한다. 이 순환을 통해 음파 동작을 시뮬레이션한다.

우위 분석

이 시인파 이론은 상당히 타당해 보이며, 시뮬레이션된 파형도 실제 시장과 약간의 연관성이 있다. 그러나 이 전략의 테스트를 통해 실제로는 무작위적인 결과라는 것을 발견할 수 있다. 어떤 변수의 조합의 파형이 더 비슷해 보인다는 것은 거래 결과를 향상시키지 못한다.

따라서 이 전략의 장점 중 하나는 시장이 을 예측할 수 있다는 잘못된 인식을 반박하는 것이다. 시장의 변수가 실제로 가격에 영향을 미치지만 예측할 수 없으며, 무작위적인 결정도 비슷한 결과를 얻을 수 있다.

위험 분석

이 전략의 가장 큰 위험은 무작위 거래에서 수익을 결정하기가 어렵다는 것입니다. 다른 파라미터의 결과를 예측하기가 어렵고, 수익성이 있는지 미리 결정할 수 없습니다.

또한, 시너지파 예측 이론은 그 자체로 틀린 것이다. 시장의 변화는 너무 복잡해서 단순한 주기적 모형을 이용해서 불가능하다. 따라서 이 전략은 실장 거래에 실제로 적용될 수 없다.

위험을 줄이기 위해, 임의의 결과를 더 분석하여 파라미터 범위를 결정하거나, 다른 분석 방법과 결합하여 거래 신호를 검증하는 것이 필요합니다.

최적화 방향

이 전략은 다음과 같은 방향으로 최적화될 수 있습니다.

  1. 더 많은 변수를 파동으로 변환하여 샘플 공간을 확장합니다.
  2. 현재 세 개의 파동을 조합하여 최적의 횡단 조합을 찾습니다.
  3. 손해배상 비율을 설정하는 방법
  4. 출전 논리를 최적화하고, 최적의 변수를 찾기 위해 재검토를 수행합니다.

요약하다

이 전략은 서로 다른 음파를 테스트함으로써 시장의 예측 불가능한 본질을 설명한다. 또한 파형 순환을 사용하여 예측하는 잘못된 이론을 반박한다.

다음 단계에서는 변수, 조합 파형, 스톱 로즈 설정 및 최적화 파라미터를 추가하여 전략의 실시 가용성을 향상시킬 수 있습니다. 그러나 중요한 것은 시장의 변화는 복잡하고 변동적이며 예측하기가 쉽지 않다는 것을 이해하는 것입니다.

전략 소스 코드
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Gentleman-Goat

//@version=5
strategy("Sine Wave Theory",overlay=false, precision = 2, initial_capital = 1000,shorttitle = "SINE_W_T")

var bar_change_wave_direction = input.int(defval=1,title="Starting Wave Direction",group="Bar Change")
bar_change_sine_wave_number = input.int(defval=28,title="Sine Wave #",group="Bar Change")
bar_change_sine_wave_res = input.timeframe(defval="D",title="Resolution",group="Bar Change")
bar_change_trade = input.bool(defval=true,title="Trade",group="Bar Change")

var volume_wave_direction = input.int(defval=1,title="Starting Wave Direction",group="Volume")
avg_volume_length = input.int(7,title="Lookback Length",group="Volume")
volume_sine_wave_number = input.int(defval=28,title="Sine Wave #",group="Volume")
volume_sine_wave_res = input.timeframe(defval="D",title="Resolution",group="Volume")
volume_trade = input.bool(defval=false,title="Trade",group="Volume")

var coin_flip_wave_direction = input.int(defval=1,title="Starting Wave Direction",group="Coin Flip")
coin_flip_sine_wave_number = input.int(defval=28,title="Sine Wave #",group="Coin Flip")
coin_flip_seed = input.int(defval=1,title="Seed #",group="Coin Flip")
coin_flip_trade = input.bool(defval=false,title="Trade",group="Coin Flip")

avg_volume = ta.sma(volume,avg_volume_length)

//Green or Red Candle
bar_color = close>open ? color.green : color.red
bar_color_time_adj = request.security(syminfo.tickerid, bar_change_sine_wave_res, bar_color)

//Above or Below Average
volume_state = (volume>avg_volume) ? color.blue : color.purple
volume_state_time_adj = request.security(syminfo.tickerid, volume_sine_wave_res, volume_state)
 
//Coinflip
coin_flip = math.random(0,100,coin_flip_seed)>=50 ? color.teal : color.yellow

var bar_change_wave_count = 0
var volume_wave_count = 0
var coin_flip_wave_count = 0

//Wave Counters
if(volume_state_time_adj[1] != volume_state_time_adj)
    volume_wave_count := volume_wave_count + volume_wave_direction

if(bar_color_time_adj[1] != bar_color_time_adj)
    bar_change_wave_count := bar_change_wave_count + bar_change_wave_direction

if(coin_flip[1] != coin_flip)
    coin_flip_wave_count := coin_flip_wave_count + coin_flip_wave_direction

//Direction changers
if(math.abs(bar_change_wave_count) == bar_change_sine_wave_number and bar_color_time_adj[1] != bar_color_time_adj)
    bar_change_wave_direction := bar_change_wave_direction * -1

if(math.abs(volume_wave_count) == volume_sine_wave_number and volume_state_time_adj[1] != volume_state_time_adj)
    volume_wave_direction := volume_wave_direction * -1

if(math.abs(coin_flip_wave_count) == coin_flip_sine_wave_number and coin_flip[1] != coin_flip)
    coin_flip_wave_direction := coin_flip_wave_direction * -1

//Entry positions
if(bar_change_wave_count==bar_change_sine_wave_number and bar_change_trade==true)
    strategy.entry(id="short",direction=strategy.short)
if(bar_change_wave_count==bar_change_sine_wave_number*-1 and bar_change_trade==true)
    strategy.entry(id="long",direction=strategy.long)

if(volume_wave_count==volume_sine_wave_number and volume_trade==true)
    strategy.entry(id="short-volume",direction=strategy.short)
if(volume_wave_count==volume_sine_wave_number*-1 and volume_trade==true)
    strategy.entry(id="long-volume",direction=strategy.long)

if(coin_flip_wave_count==coin_flip_sine_wave_number and coin_flip_trade==true)
    strategy.entry(id="short-coinflip",direction=strategy.short)
if(coin_flip_wave_count==coin_flip_sine_wave_number*-1 and coin_flip_trade==true)
    strategy.entry(id="long-coinflip",direction=strategy.long)

hline(0, title='Center', color=color.white, linestyle=hline.style_dashed, linewidth=1)
plot(bar_change_wave_count,title="Bar Change", color=bar_color, linewidth=2)
plot(volume_wave_count,title="Volume Average Change", color=volume_state, linewidth=2)
plot(coin_flip_wave_count,title="Coin Flip Change", color=coin_flip, linewidth=2)