양방향 적응형 볼린저 밴드 추세 추종 전략


생성 날짜: 2024-02-04 15:30:46 마지막으로 수정됨: 2024-02-04 15:30:46
복사: 4 클릭수: 607
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

양방향 적응형 볼린저 밴드 추세 추종 전략

개요

이 전략은 트렌드 방향을 식별하기 위해 쌍방향의 적응형 브린 띠 지표를 사용하며, 시장 가격 단위로 트렌드 추적을 수행하여 효율적인 트렌드 추적 거래를 수행합니다.

전략 원칙

  1. 일정한 주기에 따라 계산된 브린의 중철, 상철 및 하철
  2. 가격 돌파는 더 많은 추적을 하고, 돌파는 빈 추적을 합니다.
  3. 시장 가격 단위로 빠른 진입
  4. 스톱로스 포지션을 설정하고, 스톱 포지션을 포지션 관리

우위 분석

  1. 브린 벨트 지표에 적응하여 시장의 변동에 민감하여 트렌드 전환을 신속하게 판단할 수 있습니다.
  2. 시장 가격 표를 사용하여 경기장에 빠르게 진입하여 미끄러지는 위험을 줄이십시오.
  3. 자동으로 손실을 막고, 위험을 엄격히 통제하고, 수익을 고정합니다.

위험 분석

  1. 브린 벨트 자체는 지연성이 있어 가짜 돌파구를 완전히 피할 수 없습니다.
  2. 시장 가격표는 거래 가격을 통제할 수 없습니다.
  3. 정지 및 중지값을 합리적으로 설정해야 합니다.

최적화 방향

  1. 트렌드 판단의 민감성을 최적화하기 위해 브린 띠의 변수를 조정합니다.
  2. 거래량이나 MACD와 같은 지표 필터링 가짜 돌파구를 추가합니다.
  3. 스톱패스 및 스톱스테프의 설정을 최적화

요약하다

이 전략은 부린 밴드 판단 트렌드 방향과 변화의 장점을 최대한 활용하고, 빠른 출구와 함께 시장 가격 표를 쌍방향으로 추적하여 위험을 통제하는 전제 하에서 초과 수익을 얻습니다. 부린 밴드 매개 변수를 더 최적화하고 보조 필터링 지표를 추가하고, 손해 중지 논리를 조정하는 등의 수단을 통해 더 나은 전략 성능을 얻을 수 있습니다. 이 전략 아이디어는 명확하고 쉽게 구현되며, 효율적이고 신뢰할 수있는 트렌드 추적 거래 전략입니다.

전략 소스 코드
/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 1h
basePeriod: 15m
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/
// © CryptoRox

//@version=4
//Paste the line below in your alerts to run the built-in commands.
//{{strategy.order.alert_message}}
strategy("Automated - Fibs with Market orders", "Strategy", true)

//Settings 
testing = input(false, "Live")
//Use epochconverter or something similar to get the current timestamp.
starttime = input(1600976975, "Start Timestamp") * 1000
//Wait XX seconds from that timestamp before the strategy starts looking for an entry.
seconds = input(60, "Start Delay") * 1000
testPeriod = true


leverage = input(1, "Leverage")
tp = input(1.0, "Take Profit %") / leverage
dca = input(-1.0, "DCA when < %") / leverage *-1
fibEntry = input("1", "Entry Level", options=["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"])

//Strategy Calls
equity = strategy.equity
avg = strategy.position_avg_price
symbol = syminfo.tickerid
openTrades = strategy.opentrades
closedTrades = strategy.closedtrades
size = strategy.position_size

//Fibs
lentt = input(60, "Pivot Length")
h = highest(lentt)
h1 = dev(h, lentt) ? na : h
hpivot = fixnan(h1)
l = lowest(lentt)
l1 = dev(l, lentt) ? na : l
lpivot = fixnan(l1)
z = 400
p_offset= 2
transp = 60
a=(lowest(z)+highest(z))/2
b=lowest(z)
c=highest(z)

fib0 = (((hpivot - lpivot)) + lpivot)
fib1 = (((hpivot - lpivot)*.21) + lpivot)
fib2 = (((hpivot - lpivot)*.3) + lpivot)
fib3 = (((hpivot - lpivot)*.5) + lpivot)
fib4 = (((hpivot - lpivot)*.62) + lpivot)
fib5 = (((hpivot - lpivot)*.7) + lpivot)
fib6 = (((hpivot - lpivot)* 1.00) + lpivot)
fib7 = (((hpivot - lpivot)* 1.27) + lpivot)
fib8 = (((hpivot - lpivot)* 2) + lpivot)
fib9 = (((hpivot - lpivot)* -.27) + lpivot)
fib10 = (((hpivot - lpivot)* -1) + lpivot)

notna = nz(fib10[60])
entry = 0.0
if fibEntry == "1"
    entry := fib10
if fibEntry == "2"
    entry := fib9
if fibEntry == "3"
    entry := fib0
if fibEntry == "4"
    entry := fib1
if fibEntry == "5"
    entry := fib2
if fibEntry == "6"
    entry := fib3
if fibEntry == "7"
    entry := fib4
if fibEntry == "8"
    entry := fib5
if fibEntry == "9"
    entry := fib6
if fibEntry == "10"
    entry := fib7
profit = avg+avg*(tp/100)
pause = 0
pause := nz(pause[1])
paused = time < pause

fill = 0.0
fill := nz(fill[1])
count = 0.0
count := nz(fill[1])

filled = count > 0 ? entry > fill-fill/100*dca : 0
signal = testPeriod and notna and not paused and not filled ? 1 : 0

neworder = crossover(signal, signal[1])
moveorder = entry != entry[1] and signal and not neworder ? true : false
cancelorder = crossunder(signal, signal[1]) and not paused
filledorder = crossunder(low[1], entry[1]) and signal[1]

last_profit = 0.0
last_profit := nz(last_profit[1])

// if neworder and signal
//     strategy.order("New", 1, 0.0001, alert_message='New Order|e=binancefuturestestnet s=btcusdt b=long q=0.0011 fp=' + tostring(entry)) 
// if moveorder
//     strategy.order("Move", 1, 0.0001, alert_message='Move Order|e=binancefuturestestnet s=btcusdt b=long c=order|e=binancefuturestestnet s=btcusdt b=long q=0.0011 fp=' + tostring(entry))
if filledorder and size < 1
    fill := entry
    count := count+1 
    pause := time + 60000
    p = close+close*(tp/100)
    strategy.entry("Buy", 1, 1,  alert_message='Long|e=binancefuturestestnet s=btcusdt b=long q=0.0011 t=market')
if filledorder and size >= 1
    fill := entry
    count := count+1 
    pause := time + 60000
    strategy.entry("Buy", 1, 1,  alert_message='Long|e=binancefuturestestnet s=btcusdt b=long q=0.0011 t=market')

// if cancelorder and not filledorder
//     pause := time + 60000
//     strategy.order("Cancel", 1, 0.0001,  alert_message='Cancel Order|e=binancefuturestestnet s=btcusdt b=long c=order')

if filledorder
    last_profit := profit

closeit = crossover(high, profit) and size >= 1
if closeit
    strategy.entry("Close ALL", 0, 0, alert_message='Close Long|e=binancefuturestestnet s=btcusdt b=long c=position t=market')
    count := 0
    fill := 0.0
    last_profit := 0.0
    
//Plots
// bottom = signal ? color.green : filled ? color.red : color.white
// plot(entry, "Entry", bottom)