
이 전략은 이동 평균과 거래량 기술 지표에 기반하여, 긴 줄을 따라 추락을 막는 양적 전략을 설계했다. 주가가 20 일선에 서 있고, 그날의 구매량이 판매량보다 많고 지난 n 일간의 평균 거래량보다 많을 때, 시장이 다단 상태라고 여겨지며, 구매한다. 주가가 경로를 벗어나고, 그날의 판매량이 구매량보다 많고 지난 n 일간의 평균 거래량보다 많을 때, 시장이 공백 상태라고 여겨지며, 판매한다.
이 전략은 두 가지 지표에 기초하여 판단됩니다.
쌍평균선: 계산 20일선과 60일선, 20일선에서 60일선을 통과하면 시장이 부진 상태에 있다고 생각하며, 20일선 아래 60일선을 통과하면 시장이 하락 상태에 있다고 생각한다.
거래량: 매일의 거래 구매량과 판매량을 계산하고, 구매량이 판매량보다 많고 지난 n 일간의 평균 거래량보다 많으면 다단계 거래로 판단하고, 판매량이 구매량보다 많고 지난 n 일간의 평균 거래량보다 많으면 공백 거래로 판단한다.
구체적인 거래 전략과 논리는 다음과 같습니다.
다단 입시: 종식 가격대가 20일선에 서고, 그날의 매수량이 매수량과 지난 n일 평균 거래량보다 많을 때, 시장이 보잉 상태에 있다고 생각하며, 변동률에 따라 부린 대역을 계산하고, 종식 가격이 부린 대역의 중간 궤도와 하단 궤도 사이에 있으면 입시한다.
공허 입시: 종결 가격이 하향으로 떨어지고, 그날의 매출량이 매수량과 지난 n 일간의 평균 거래량보다 많을 때, 시장이 부어 상태에 있다고 간주하고, 변동률에 따라 불린 대역을 계산하고, 종결 가격이 불린 대역 하향보다 작으면 입시 공백한다.
정지 및 손실: 합리적인 정지 및 손실을 설정하여 수익을 고정하거나 손실을 줄이십시오. 주가가 출입 가격보다 5% 크게 상승했을 때 정지하십시오. 손실이 10%에 도달했을 때 정지하십시오.
이 전략은 다음과 같은 장점을 가지고 있습니다.
이중 평균선과 거래량 지표가 결합되어 단일 기술 지표 판단의 맹 영역을 피합니다.
다른 파라미터를 사용하는 브린 띠는 특정 거래 가격을 결정하여 입구를 더 정확하게 만듭니다.
스톱 스톱 손실 전략은 합리적이고 수익을 고정하고 위험을 통제하는 데 도움이 됩니다.
재검토 효과는 좋고, 수익은 안정적이며, 실제로 양적 거래에 사용할 수 있다.
이 전략에는 몇 가지 위험도 있습니다.
양평선 전략은 오류 신호를 발생시키며, 결합된 양력 지표의 필터링이 필요하다.
부린 영역의 파라미터를 잘못 설정하면 너무 빈번하거나 드물게 입학할 수 있다.
고정 스톱 스톱 손실 지점이 잘못 설정되어 전략 수익에 영향을 줄 수 있습니다.
많은 양의 역사 자료가 재검토가 필요하며, 디스크의 손실이 발생할 수 있습니다.
이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.
평행선 시스템의 변수를 최적화하여 최적의 평행선 조합을 찾는다.
브린 벨트 파라미터를 최적화하여 더 정확한 진입을 가능하게 한다.
동적으로 스톱 스톱 손실 지점을 조정하고, 시장 상황에 따라 합리적인 수익/손실 비율을 설정한다.
다른 기술 지표 판단을 추가하여 전략의 정확성을 향상시킵니다.
기계학습을 통해 자동적으로 우수변수들을 찾아내어 전략을 더 거칠게 만들 수 있다.
이 전략은 전반적으로 매우 실용적인 양적 거래 전략으로, 재검토 성능이 좋으며, 구현하기 쉬운, 위험 제어 가능한, 실장 용으로 적합한 안정적인 전략으로, 양적 거래자가 학습할 가치가 있습니다. 물론, 전략 최적화 공간이 여전히 큽니다. 더 많은 양적 거래 전문가의 개선이 기대됩니다.
/*backtest
start: 2023-12-21 00:00:00
end: 2023-12-28 00:00:00
period: 1m
basePeriod: 1m
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
strategy("prototype",initial_capital=0.01,commission_type=strategy.commission.percent,commission_value=0.1, format=format.volume, precision=0,overlay=true)
// SETTING //
length1=input(1)
length3=input(3)
length7=input(7)
length14=input(14)
length20=input(20)
length60=input(60)
length120=input(120)
ma1= sma(close,length1)
ma3= sma(close,length3)
ma7= sma(close,length7)
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")
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
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=(close>Supper and BV>SV and BV>Davgvol)
bull2=(close>ma20 and BV>SV and BV>Davgvol)
bux =(close<Supper and close>Slower and volume<Wavgvol)
bear=(close<Slower and close<lower and SV>BV and SV>Wavgvol)
hi=highest(exit,10)
imInATrade = strategy.position_size != 0
highestPriceAfterEntry = valuewhen(imInATrade, high, 0)
// STRATEGY LONG //
if (bull and close>ma3 and ma20>ma60 and rsi<70)
strategy.entry("Long",strategy.long,0.1)
if (strategy.position_avg_price*1.05<close)
strategy.close("Long",0.1)
else if (highestPriceAfterEntry*0.999<close and close>strategy.position_avg_price*1.002)
strategy.close("Long",0.1)
else if (highestPriceAfterEntry*0.997<close and close>strategy.position_avg_price*1.002)
strategy.close("Long",0.1)
else if (highestPriceAfterEntry*0.995<close and close>strategy.position_avg_price*1.002)
strategy.close("Long",0.1)
else if (strategy.openprofit < strategy.position_avg_price*0.9-close)
strategy.close("Long",0.1)
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////