
이 전략은 보다 복잡한 동력 돌파 전략이며, 동시에 여러 기술 지표들을 결합하여 판단하고, 서로 다른 방향과 단계의 여러 차례의 진입을 달성하여 중개의 목적을 달성한다.
이 전략은 주로 동력 지표 MACD, 오버 바이 오버 시 지표 RSI 및 브린 밴드 다공평 방향 판단을 합니다. MACD 라인이 0보다 높고 RSI가 오버 시 라인보다 낮으면 다공평 신호이며, MACD 라인이 0보다 낮고 RSI가 오버 바이 라인을 초과하면 공평 신호입니다. 브린 밴드 상하 경로 판단을 통해 거래 신호를 추가 확인합니다.
구체적인 구현에서, 전략은 먼저 MACD 라인 및 RSI의 성능을 판단하여 기본 사항을 확인합니다. 그 다음 부린이 궤도 상·하의 돌파구에 따라 다양한 수를 배치하여 포지션을 구축합니다. 다중 단계에서는 부린이 궤도 하단 근처에서 점차적으로 더 많은 포지션을 추가하고 포지션의 폭이 점점 커집니다. 공백 단계에서는 부린이 궤도 상단 근처에서 점차적으로 공백을 추가하고 공백량은 점차적으로 커집니다. 이렇게 다른 방향과 다른 가격의 대량 중개로 더 큰 누적 이익을 얻을 수 있습니다.
동시에, 전략은 최고 가격과 최저 가격의 추적과 결합하여 중지 및 정지를 설정하고, 주문을 적절히 관리합니다. 전반적으로, 이 전략은 여러 가지 분석 도구를 통합하여 분량 중개로 더 나은 수익을 얻습니다.
브린带上下轨突破는 100% 신뢰할 수 있는 거래 신호가 아니며, 약간의 가짜 신호 위험이 있을 수 있다. K선 형태, 거래량 등과 같은 다른 지표를 추가하는 것을 고려할 수 있다.
점진적으로 포지션을 올리는 것은 시장의 속도를 정확하게 파악하는 것이 필요하며, 급격한 변동이 발생하면 큰 손실이 발생할 수 있습니다. 포지션을 추가하는 횟수를 적절히 줄일 수 있습니다.
거래 품종의 유동성에 주의를 기울여야 하며, 유동성이 낮은 품종은 더 많은 수의 분량배당을 사용하지 않는 것이 좋습니다.
리포트 데이터는 실디와 동일하지 않으며, 실디에서의 수수료, 슬라이드 등의 비용도 고려해야 한다. 적절히 느슨한 스톱 로드 幅을 남길 수 있다.
다른 변수 조합을 테스트할 수 있습니다. 예를 들어, 브린 밴드 주기, 표준 차이의 배수, RSI 변수 등이 있습니다.
고정 분량, 켈리 기준 등 다른 중도 전략들을 탐구할 수 있습니다.
기계 학습과 같은 방법을 결합하여 매개 변수를 구현할 수 있는 동적 최적화
더 많은 자료를 도입할 수 있습니다. 예를 들어, 텍스트 감정 분석, 소셜 데이터 등이 시장 상황을 판단하는데 도움을 줄 수 있습니다.
미래에셋의 시간차를 탐색하여 경매를 할 수 있으며, 수익 공간을 더욱 넓힐 수 있습니다.
이 전략은 여러 가지 기술 지표를 종합적으로 사용하며, 분량 중매 방식을 취하고, 스톱 손실 차단 관리 위험을 설정하며, 더 완전한 추세 추적 전략입니다. 그러나 여전히 경고 잘못된 신호 및 급격한 조정의 위험이 필요하며, 적절한 매개 변수 및 자금 관리 방법은 더 안정적인 초과 수익을 얻을 수 있습니다. 기계 학습과 같은 수단을 추가로 결합하여 동적으로 최적화하면 이 전략의 성능은 향상될 여지가 있으며, 장기 추적 및 축적 가치가 있습니다.
/*backtest
start: 2022-10-11 00:00:00
end: 2023-10-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(title="Incremental Order size +", shorttitle="Strategy", overlay=true, default_qty_value=1, pyramiding=10)
//Heiken Ashi
isHA = input(false, "HA Candles", bool)
//MACD
fastLength = 12
slowlength = 26
MACDLength = 9
MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD
//Bollinger Bands Exponential
src = open
len = 18
e = ema(src,len)
evar = (src - e)*(src - e)
evar2 = (sum(evar,len))/len
std = sqrt(evar2)
Multiplier = input(3, minval = 0.01, title = "# of STDEV's")
upband = e + (Multiplier * std)
dnband = e - (Multiplier * std)
//EMA
ema3 = ema(close, 3)
//RSIplot
length = 45
overSold = 90
overBought = 10
price = close
vrsi = rsi(price, length)
notna = not na(vrsi)
macdlong = crossover(delta, 0)
macdshort = crossunder(delta, 0)
rsilong = notna and crossover(vrsi, overSold)
rsishort = notna and crossunder(vrsi, overBought)
lentt = input(14, "Pivot Length")
//The length defines how many periods a high or low must hold to be a "relevant pivot"
h = highest(lentt)
//The highest high over the length
h1 = dev(h, lentt) ? na : h
//h1 is a pivot of h if it holds for the full length
hpivot = fixnan(h1)
//creates a series which is equal to the last pivot
l = lowest(lentt)
l1 = dev(l, lentt) ? na : l
lpivot = fixnan(l1)
//repeated for lows
last_hpivot = h1 ? time : nz(last_hpivot[1])
last_lpivot = l1 ? time : nz(last_lpivot[1])
long_time = last_hpivot > last_lpivot ? 0:1
//FIBS
z = input(100, "Z-Index")
p_offset= 2
transp = 60
a=(lowest(z)+highest(z))/2
b=lowest(z)
c=highest(z)
fibonacci = input(0, "Fibonacci") / 100
//Fib Calls
fib0 = (((hpivot - lpivot)* fibonacci) + 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)
//Heiken Ashi Candles
data2 = isHA ? heikenashi(syminfo.tickerid) : syminfo.tickerid
res5 = input("5", "Resolution")
//HT Fibs
hfib0 = security(data2, res5, fib0[1])
hfib1 = security(data2, res5, fib1[1])
hfib2 = security(data2, res5, fib2[1])
hfib3 = security(data2, res5, fib3[1])
hfib4 = security(data2, res5, fib4[1])
hfib5 = security(data2, res5, fib5[1])
hfib6 = security(data2, res5, fib6[1])
hfib7 = security(data2, res5, fib7[1])
hfib8 = security(data2, res5, fib8[1])
hfib9 = security(data2, res5, fib9[1])
hfib10 = security(data2, res5, fib10[1])
vrsiup = vrsi > vrsi[1] and vrsi[1] > vrsi[2]
vrsidown = vrsi < vrsi[1] and vrsi[1] < vrsi[2]
long = cross(close, fib0) and delta > 0 and vrsi < overSold and vrsiup
short = cross(close, fib6) and delta < 0 and vrsi > overBought and vrsidown
// long2 = cross(close, fib0) and delta > 0 and vrsi < overSold and vrsiup
// short2 = cross(close, fib6) and delta < 0 and vrsi > overBought and vrsidown
// long = cross(close, fib0) and delta > 0 and vrsi < overSold and vrsiup
// short = cross(close, fib6) and delta < 0 and vrsi > overBought and vrsidown
// long = cross(close, fib0) and delta > 0 and vrsi < overSold and vrsiup
// short = cross(close, fib6) and delta < 0 and vrsi > overBought and vrsidown
// long = cross(close, fib0) and delta > 0 and vrsi < overSold and vrsiup
// short = cross(close, fib6) and delta < 0 and vrsi > overBought and vrsidown
// long = cross(close, fib0) and delta > 0 and vrsi < overSold and vrsiup
// short = cross(close, fib6) and delta < 0 and vrsi > overBought and vrsidown
// long = cross(close, fib0) and delta > 0 and vrsi < overSold and vrsiup
// short = cross(close, fib6) and delta < 0 and vrsi > overBought and vrsidown
// long = cross(close, fib0) and delta > 0 and vrsi < overSold and vrsiup
// short = cross(close, fib6) and delta < 0 and vrsi > overBought and vrsidown
// long = cross(close, fib0) and delta > 0 and vrsi < overSold and vrsiup
// short = cross(close, fib6) and delta < 0 and vrsi > overBought and vrsidown
reverseOpens = input(false, "Reverse Orders", bool)
if (reverseOpens)
tmplong = long
long := short
short := tmplong
//Strategy
ts = input(99999, "TS")
tp = input(30, "TP")
sl = input(10, "SL")
last_long = long ? time : nz(last_long[1])
last_short = short ? time : nz(last_short[1])
in_long = last_long > last_short
in_short = last_short > last_long
long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)
last_open_long = long ? open : nz(last_open_long[1])
last_open_short = short ? open : nz(last_open_short[1])
last_open_long_signal = long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal = short_signal ? open : nz(last_open_short_signal[1])
last_high = not in_long ? na : in_long and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low = not in_short ? na : in_short and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])
long_ts = not na(last_high) and high <= (last_high - ts) and high >= last_open_long_signal
short_ts = not na(last_low) and low >= (last_low + ts) and low <= last_open_short_signal
long_tp = high >= (last_open_long + tp) and long[1] == 0
short_tp = low <= (last_open_short - tp) and short[1] == 0
long_sl = low <= (last_open_long - sl) and long[1] == 0
short_sl = high >= (last_open_short + sl) and short[1] == 0
last_hfib_long = long_signal ? fib1 : nz(last_hfib_long[1])
last_hfib_short = short_signal ? fib5 : nz(last_hfib_short[1])
last_fib7 = long ? fib7 : nz(last_fib7[1])
last_fib10 = long ? fib10 : nz(last_fib10[1])
last_fib8 = short ? fib8 : nz(last_fib8[1])
last_fib9 = short ? fib9 : nz(last_fib9[1])
last_long_signal = long_signal ? time : nz(last_long_signal[1])
last_short_signal = short_signal ? time : nz(last_short_signal[1])
last_long_tp = long_tp ? time : nz(last_long_tp[1])
last_short_tp = short_tp ? time : nz(last_short_tp[1])
last_long_ts = long_ts ? time : nz(last_long_ts[1])
last_short_ts = short_ts ? time : nz(last_short_ts[1])
long_ts_signal = crossover(last_long_ts, last_long_signal)
short_ts_signal = crossover(last_short_ts, last_short_signal)
last_long_sl = long_sl ? time : nz(last_long_sl[1])
last_short_sl = short_sl ? time : nz(last_short_sl[1])
long_tp_signal = crossover(last_long_tp, last_long)
short_tp_signal = crossover(last_short_tp, last_short)
long_sl_signal = crossover(last_long_sl, last_long)
short_sl_signal = crossover(last_short_sl, last_short)
last_long_tp_signal = long_tp_signal ? time : nz(last_long_tp_signal[1])
last_short_tp_signal = short_tp_signal ? time : nz(last_short_tp_signal[1])
last_long_sl_signal = long_sl_signal ? time : nz(last_long_sl_signal[1])
last_short_sl_signal = short_sl_signal ? time : nz(last_short_sl_signal[1])
last_long_ts_signal = long_ts_signal ? time : nz(last_long_ts_signal[1])
last_short_ts_signal = short_ts_signal ? time : nz(last_short_ts_signal[1])
true_long_signal = long_signal and last_long_sl_signal > last_long_signal[1] or long_signal and last_long_tp_signal > last_long_signal[1] or long_signal and last_long_ts_signal > last_long_signal[1]
true_short_signal = short_signal and last_short_sl_signal > last_short_signal[1] or short_signal and last_short_tp_signal > last_short_signal[1] or short_signal and last_short_ts_signal > last_short_signal[1]
// strategy.entry("BLUE", strategy.long, when=long)
// strategy.entry("RED", strategy.short, when=short)
g = delta > 0 and vrsi < overSold and vrsiup
r = delta < 0 and vrsi > overBought and vrsidown
long1 = cross(close, fib1) and g and last_long_signal[1] > last_short_signal// and last_long_signal > long
short1 = cross(close, fib5) and r and last_short_signal[1] > last_long_signal// and last_short_signal > short
last_long1 = long1 ? time : nz(last_long1[1])
last_short1 = short1 ? time : nz(last_short1[1])
last_open_long1 = long1 ? open : nz(last_open_long1[1])
last_open_short1 = short1 ? open : nz(last_open_short1[1])
long1_signal = crossover(last_long1, last_long_signal)
short1_signal = crossover(last_short1, last_short_signal)
last_long1_signal = long1_signal ? time : nz(last_long1_signal[1])
last_short1_signal = short1_signal ? time : nz(last_short1_signal[1])
long2 = cross(close, fib2) and g and last_long1_signal > last_long_signal[1] and long1_signal == 0 and last_long_signal[1] > last_short_signal
short2 = cross(close, fib4) and r and last_short1_signal > last_short_signal[1] and short1_signal == 0 and last_short_signal[1] > last_long_signal
last_long2 = long2 ? time : nz(last_long2[1])
last_short2 = short2 ? time : nz(last_short2[1])
last_open_short2 = short2 ? open : nz(last_open_short2[1])
long2_signal = crossover(last_long2, last_long1_signal) and long1_signal==0
short2_signal = crossover(last_short2, last_short1_signal) and short1_signal==0
last_long2_signal = long2_signal ? time : nz(last_long2_signal[1])
last_short2_signal = short2_signal ? time : nz(last_short2_signal[1])
//Trade 4
long3 = cross(close, fib3) and g and last_long1_signal > last_long_signal[1] and long1_signal == 0 and last_long_signal[1] > last_short_signal
short3 = cross(close, fib3) and r and last_short1_signal > last_short_signal[1] and short1_signal == 0 and last_short_signal[1] > last_long_signal
last_long3 = long3 ? time : nz(last_long3[1])
last_short3 = short3 ? time : nz(last_short3[1])
last_open_short3 = short3 ? open : nz(last_open_short3[1])
long3_signal = crossover(last_long3, last_long2_signal) and long2_signal==0
short3_signal = crossover(last_short3, last_short2_signal) and short2_signal==0
last_long3_signal = long3_signal ? time : nz(last_long3_signal[1])
last_short3_signal = short3_signal ? time : nz(last_short3_signal[1])
//Trade 5
long4 = long and last_long1_signal > last_long_signal[1] and long1_signal == 0 and last_long_signal[1] > last_short_signal
short4 = short and last_short1_signal > last_short_signal[1] and short1_signal == 0 and last_short_signal[1] > last_long_signal
last_long4 = long4 ? time : nz(last_long4[1])
last_short4 = short4 ? time : nz(last_short4[1])
long4_signal = crossover(last_long4, last_long3_signal) and long2_signal==0 and long3_signal==0
short4_signal = crossover(last_short4, last_short3_signal) and short2_signal==0 and short3_signal==0
last_long4_signal = long4_signal ? time : nz(last_long4_signal[1])
last_short4_signal = short4_signal ? time : nz(last_short4_signal[1])
//Trade 6
long5 = long and last_long1_signal > last_long_signal[1] and long1_signal == 0 and last_long_signal[1] > last_short_signal
short5 = short and last_short1_signal > last_short_signal[1] and short1_signal == 0 and last_short_signal[1] > last_long_signal
last_long5 = long5 ? time : nz(last_long5[1])
last_short5 = short5 ? time : nz(last_short5[1])
long5_signal = crossover(last_long5, last_long4_signal) and long3_signal==0 and long4_signal==0
short5_signal = crossover(last_short5, last_short4_signal) and short3_signal==0 and short4_signal==0
last_long5_signal = long5_signal ? time : nz(last_long5_signal[1])
last_short5_signal = short5_signal ? time : nz(last_short5_signal[1])
//Trade 7
long6 = long and last_long1_signal > last_long_signal[1] and long1_signal == 0 and last_long_signal[1] > last_short_signal
short6 = short and last_short1_signal > last_short_signal[1] and short1_signal == 0 and last_short_signal[1] > last_long_signal
last_long6 = long6 ? time : nz(last_long6[1])
last_short6 = short6 ? time : nz(last_short6[1])
long6_signal = crossover(last_long6, last_long5_signal) and long2_signal==0 and long4_signal==0 and long5_signal==0
short6_signal = crossover(last_short6, last_short5_signal) and short2_signal==0 and short4_signal==0 and short5_signal==0
last_long6_signal = long6_signal ? time : nz(last_long6_signal[1])
last_short6_signal = short6_signal ? time : nz(last_short6_signal[1])
//Trade 8
long7 = long and last_long1_signal > last_long_signal[1] and long1_signal == 0 and last_long_signal[1] > last_short_signal
short7 = short and last_short1_signal > last_short_signal[1] and short1_signal == 0 and last_short_signal[1] > last_long_signal
last_long7 = long7 ? time : nz(last_long7[1])
last_short7 = short7 ? time : nz(last_short7[1])
long7_signal = crossover(last_long7, last_long6_signal) and long2_signal==0 and long4_signal==0 and long5_signal==0 and long6_signal==0
short7_signal = crossover(last_short7, last_short6_signal) and short2_signal==0 and short4_signal==0 and short5_signal==0 and short6_signal==0
last_long7_signal = long7_signal ? time : nz(last_long7_signal[1])
last_short7_signal = short7_signal ? time : nz(last_short7_signal[1])
//Trade 9
long8 = long and last_long1_signal > last_long_signal[1] and long1_signal == 0 and last_long_signal[1] > last_short_signal
short8 = short and last_short1_signal > last_short_signal[1] and short1_signal == 0 and last_short_signal[1] > last_long_signal
last_long8 = long8 ? time : nz(last_long8[1])
last_short8 = short8 ? time : nz(last_short8[1])
long8_signal = crossover(last_long8, last_long7_signal) and long2_signal==0 and long4_signal==0 and long5_signal==0 and long6_signal==0 and long7_signal==0
short8_signal = crossover(last_short8, last_short7_signal) and short2_signal==0 and short4_signal==0 and short5_signal==0 and short6_signal==0 and short7_signal==0
last_long8_signal = long8_signal ? time : nz(last_long8_signal[1])
last_short8_signal = short8_signal ? time : nz(last_short8_signal[1])
//Trade 10
long9 = long and last_long1_signal > last_long_signal[1] and long1_signal == 0 and last_long_signal[1] > last_short_signal
short9 = short and last_short1_signal > last_short_signal[1] and short1_signal == 0 and last_short_signal[1] > last_long_signal
last_long9 = long9 ? time : nz(last_long9[1])
last_short9 = short9 ? time : nz(last_short9[1])
long9_signal = crossover(last_long9, last_long8_signal) and long2_signal==0 and long4_signal==0 and long5_signal==0 and long6_signal==0 and long7_signal==0 and long8_signal==0
short9_signal = crossover(last_short9, last_short8_signal) and short2_signal==0 and short4_signal==0 and short5_signal==0 and short6_signal==0 and short7_signal==0 and short8_signal==0
last_long9_signal = long9_signal ? time : nz(last_long9_signal[1])
last_short9_signal = short9_signal ? time : nz(last_short9_signal[1])
strategy.entry("Long", strategy.long, qty=1, when=long_signal)
strategy.entry("Short", strategy.short, qty=1, when=short_signal)
strategy.entry("Long", strategy.long, qty=2, when=long1_signal)
strategy.entry("Short1", strategy.short, qty=2, when=short1_signal)
strategy.entry("Long", strategy.long, qty=4, when=long2_signal)
strategy.entry("Short2", strategy.short, qty=4, when=short2_signal)
strategy.entry("Long", strategy.long, qty=8, when=long3_signal)
strategy.entry("Short3", strategy.short, qty=8, when=short3_signal)
strategy.entry("Long", strategy.long, qty=5, when=long4_signal)
strategy.entry("Short", strategy.short, qty=5, when=short4_signal)
strategy.entry("Long", strategy.long, qty=6, when=long5_signal)
strategy.entry("Short", strategy.short, qty=6, when=short5_signal)
strategy.entry("Long", strategy.long, qty=7, when=long6_signal)
strategy.entry("Short", strategy.short, qty=7, when=short6_signal)
strategy.entry("Long", strategy.long, qty=8, when=long7_signal)
strategy.entry("Short", strategy.short, qty=8, when=short7_signal)
strategy.entry("Long", strategy.long, qty=9, when=long8_signal)
strategy.entry("Short", strategy.short, qty=9, when=short8_signal)
strategy.entry("Long", strategy.long, qty=10, when=long9_signal)
strategy.entry("Short", strategy.short, qty=10, when=short9_signal)
short1_tp = low <= (last_open_short1 - tp) and short1[1] == 0
short2_tp = low <= (last_open_short2 - tp) and short2[1] == 0
short3_tp = low <= (last_open_short3 - tp) and short3[1] == 0
short1_sl = high >= (last_open_short1 + sl) and short1[1] == 0
short2_sl = high >= (last_open_short2 + sl) and short2[1] == 0
short3_sl = high >= (last_open_short3 + sl) and short3[1] == 0
close_long = cross(close, fib6)
close_short = cross(close, fib0)
// strategy.close("Long", when=close_long)
// strategy.close("Long", when=long_tp)
// strategy.close("Long", when=long_sl)
// strategy.close("Short", when=long_signal)
// strategy.close("Short1", when=long_signal)
// strategy.close("Short2", when=long_signal)
// strategy.close("Short3", when=long_signal)
strategy.close("Short", when=short_tp)
strategy.close("Short1", when=short1_tp)
strategy.close("Short2", when=short2_tp)
strategy.close("Short3", when=short3_tp)
strategy.close("Short", when=short_sl)
strategy.close("Short1", when=short1_sl)
strategy.close("Short2", when=short2_sl)
strategy.close("Short3", when=short3_sl)