양적 지그자그 전략

저자:차오장, 날짜: 2023-11-21 13:43:24
태그:

img

전반적인 설명

이 전략의 목적은 촛불 색상, 부피 및 무작위 방법과 같은 다른 입력 변수가 시노스 파동 형태로 가격 변화를 예측하는 데 사용될 수 있는지 테스트하는 것입니다. 전략은 이러한 변수를 시노스 파동 형태로 변환합니다. 정해진 수에 도달하면 구매 또는 판매 결정이됩니다.

전략 원칙

이 전략은 세 부분으로 나뉘어 있다. 첫 번째 부분은 촛불의 색상의 변화를 감지한다. 같은 색의 여러 촛불 후에 다른 색의 촛불이 나타나면 시노스 파동이 방향을 바꿉니다. 두 번째 부분은 볼륨이 평균보다 높거나 낮는지 감지한다. 평균이 깨지면 파동이 방향을 바꿉니다. 세 번째 부분은 동전 던지는 것을 시뮬레이션하는 무작위 방법을 사용합니다. 무작위 결과가 다르면 파동이 방향을 바꿉니다. 이 세 파동이 설정된 수에 축적되면 거래 결정이 이루어집니다.

이 코드는 세 개의 파동에 대한 현재의 방향, 피크 수 및 이전 촛불의 위치를 추적하여 파동의 실행을 제어합니다. 피크 수가 매개 변수 설정에 도달하면 실행 방향을 변경합니다. 이 루프는 시노스 파동의 실행을 시뮬레이션합니다.

이점 분석

이 시노스 파동 이론은 의미가 있고 시뮬레이션 된 파동 형태는 실제 시장과 약간의 상관관계를 가지고 있습니다. 그러나이 전략의 테스트를 통해 실제로 무작위 결과라는 것을 알 수 있습니다. 변수의 조합이 파동 형태를 더 비슷하게 보이게하는 것은 거래 결과를 개선하지 않습니다.

따라서 이 전략의 한 가지 장점은 "시장이 예측 가능"이라는 잘못된 개념을 반박하는 것입니다. 시장의 변수는 가격에 영향을 미치지만 예측할 수 없으며 무작위 결정도 비슷한 결과를 얻을 수 있습니다.

위험 분석

이 전략의 가장 큰 위험은 무작위 거래에서 이익과 손실을 결정하는 것이 어렵다는 것입니다. 다른 매개 변수에서 결과를 예측하는 것도 어렵고 수익성이 있는지 사전에 결정하는 것은 불가능합니다.

또한, 시노스 파동 예측 이론 자체는 잘못된 것입니다. 시장 변화는 단순한 순환성으로 시뮬레이션하기에는 너무 복잡합니다. 따라서이 전략은 실제 거래에 사용할 수 없습니다.

위험을 줄이기 위해, 파라미터 범위를 결정하기 위해 무작위 결과를 더 분석하거나 거래 신호를 확인하기 위해 다른 분석 방법을 결합해야합니다.

최적화 방향

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

  1. 샘플 공간을 확장하기 위해 더 많은 변수를 파동으로 변환
  2. 3개의 전류파를 조합해서 가장 좋은 이동 조합을 찾습니다.
  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)


더 많은