
이 전략은 부린 띠 지표와 거래량 지표를 결합하여, 높은 거래량 환경에서 부린 띠를 돌파하는 강력한 기회를 식별하여 구매 작업을 수행한다. 이동 평균 지표와 결합하여 트렌드 방향을 결정하고, 임종 포지션의 위험을 줄인다.
이 전략은 주로 3 가지 요소를 고려합니다: 가격, 운동량 및 추세. 가격이 브린을 뚫고 구매 영역으로 진입했을 때, 많은 자금의 유입으로 거래량이 급증하여 강력한 동향 지원과 동력이 있음을 나타냅니다. 이 때 더 많은 포지션을 열습니다.
거래 신호는 정확하고, 가짜 브레이크를 피한다. 거래량 지표와 결합하여 실제 강세를 보이는 경우에만 구매하여 포지션 위험을 줄인다.
이동 평균을 통해 트렌드 방향을 판단하여 적시에 손실을 막고 공백 손실을 줄일 수 있습니다.
여러 지표들을 통합하여 의사결정을 위한 정량화 전략이 구현되었으며, 파라미터는 다양한 품종과 주기에 맞게 유연하게 조정될 수 있다.
코드 구조가 명확하고, 전략 가독성이 증가한다. 분단 모듈 조직 지표 계산, 거래 신호, 청산 상고 논리 등이 후기 유지보수를 용이하게 한다.
부린 밴드는 변동 범위 지표로서, 극단적 인 시장을 위해 유효하지 않을 수 있습니다. 비정상적인 변동이 발생하면 구매 신호를 놓치거나 거짓 신호를 생성 할 수 있습니다.
거래량이 부족하면 전략이 수익을 내지 못한다. 시장 전체 거래량이 부족하면 구매 신호를 발생시키더라도 수익을 내지 못한다.
이동 평균은 동향을 판단하는 지표로서도 무효가 될 수 있으며, 완전히 손실을 멈추는 것을 보장할 수 없다.
매개 변수 설정이 잘못되면 전략 수익에도 영향을 줄 수 있다. 예를 들어 거래 시간 창이 너무 짧게 설정되어 트렌드 반전이 놓치게 된다.
더 많은 추세를 판단하고, 저항 지점을 지원하는 기술 지표를 추가하고, K선 형태, 통로 지표, 핵심 지지 지점 등과 같은 손실 제지를 향상시키는 것을 고려할 수 있습니다.
기계학습 모델의 진정한 돌파구를 판단할 가능성을 높이고, 가짜 신호율을 낮추는 것이다. 예를 들어 LSTM와 같은 딥러닝 모델이다.
자금 관리 전략의 최적화, 예를 들어, 동적으로 위치를 조정하고, 스톱 라인을 추적합니다. 단일 손실의 영향을 줄입니다.
더 많은 품종과 시간 주기 파라미터를 테스트한다. 브린 밴드 파라미터, 거래량 파라미터 등을 조정하고, 시장에 적응하는 전략을 최적화한다.
이 전략은 브린밴드 지표와 거래량 지표를 통합하여 강세를 보이는 상황에서 구매할 때를 식별한다. 동시에 이동 평균 지표를 사용하여 트렌드를 판단하고, 적시에 상쇄한다. 단일 기술 지표에 비해 더 높은 정확도와 상쇄 능력을 가지고 있다. 모듈화된 설계, 트렌드 판단 및 상쇄 전략의 추가로, 최적화 유지하기 쉬운 돌파구 거래 전략을 형성한다.
/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 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/
// © KAIST291
//@version=4
initial_capital=1000
strategy("prototype", overlay=true)
length1=input(1)
length3=input(3)
length7=input(7)
length9=input(9)
length14=input(14)
length20=input(20)
length60=input(60)
length120=input(120)
ma1= sma(close,length1)
ma3= sma(close,length3)
ma7= sma(close,length7)
ma9= sma(close,length9)
ma14=sma(close,length14)
ma20=sma(close,length20)
ma60=sma(close,length60)
ma120=sma(close,length120)
rsi=rsi(close,14)
// BUYING VOLUME AND SELLING VOLUME //
BV = iff( (high==low), 0, volume*(close-low)/(high-low))
SV = iff( (high==low), 0, volume*(high-close)/(high-low))
vol = iff(volume > 0, volume, 1)
dailyLength = input(title = "Daily MA length", type = input.integer, defval = 50, minval = 1, maxval = 100)
weeklyLength = input(title = "Weekly MA length", type = input.integer, defval = 10, minval = 1, maxval = 100)
//-----------------------------------------------------------
Davgvol = sma(volume, dailyLength)
Wavgvol = sma(volume, weeklyLength)
//-----------------------------------------------------------
length = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
mult2= input(1.5, minval=0.001, maxval=50, title="exp")
mult3= input(1.0, minval=0.001, maxval=50, title="exp1")
mult4= input(2.5, minval=0.001, maxval=50, title="exp2")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
dev2= mult2 * stdev(src, length)
Supper= basis + dev2
Slower= basis - dev2
dev3= mult3 * stdev(src, length)
upper1= basis + dev3
lower1= basis - dev3
dev4= mult4 * stdev(src, length)
upper2=basis + dev4
lower2=basis - dev4
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))
//----------------------------------------------------
exit=(close-strategy.position_avg_price / strategy.position_avg_price*100)
bull=( BV>SV and BV>Davgvol)
bull2=(BV>SV and BV>Davgvol)
bux =(close>Supper and close>Slower and volume<Davgvol)
bear=(SV>BV and SV>Davgvol)
con=(BV>Wavgvol and rsi>80)
imInATrade = strategy.position_size != 0
highestPriceAfterEntry = valuewhen(imInATrade, high, 0)
// STRATEGY LONG //
if (bull and close>upper1 and close>Supper and high>upper and rsi<80)
strategy.entry("Long",strategy.long)
if (strategy.position_avg_price*1.02<close)
strategy.close("Long")
else if (low<ma9 and strategy.position_avg_price<close)
strategy.close("Long")
else if (ma20>close and strategy.position_avg_price<close )
strategy.close("Long")
else if (rsi>80 and strategy.position_avg_price<close)
strategy.close("Long")
else if (strategy.openprofit < strategy.position_avg_price*0.9-close)
strategy.close("Long")
else if (high<upper and strategy.position_avg_price<close)
strategy.close("Long")
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
strategy.entry("Short",strategy.short,when=low<ma20 and low<lower1 and close<Slower and crossunder(ma60,ma120))
if (close<strategy.position_avg_price*0.98)
strategy.close("Short")
else if (rsi<20)
strategy.close("Short")