이것은 판단을 위한 여러 기술적 지표를 통합하고 다양한 방향과 단계에서 다단계 피라미드 명령을 구현하여 확장과 종료의 목표를 달성하는 비교적 복잡한 모멘텀 브레이크업 전략입니다.
이 전략은 주로 모멘텀 지표 MACD, 과잉 구매 및 과잉 판매 지표 RSI 및 볼링거 밴드를 결합하여 방향 판단을 수행합니다. MACD 라인이 0보다 높고 RSI가 과잉 판매 라인의 아래에있을 때 긴 신호입니다. MACD 라인이 0보다 낮고 RSI가 과잉 구매 라인의 위에있을 때 짧은 신호입니다. 거래 신호를 추가 확인하기 위해 볼링거 밴드의 상부 및 하부 레일의 브레이크도 포함합니다.
특정 구현에서, 전략은 먼저 기본 요소를 확인하기 위해 MACD 라인과 RSI의 성능을 판단합니다. 그 다음 볼링거 밴드 상부 및 하부 레일의 브레이크에 따라 다른 크기의 피라미드 주문을 취합니다. 올리는 표현으로, 볼링거 밴드 하부 레일 근처에서 크기가 증가하면서 점차 길어집니다. 하락하는 표현으로, 볼링거 밴드 상부 레일 근처에서 크기가 증가하면서 점차 짧아집니다. 다른 방향과 다른 가격으로 확장하여 더 큰 축적 수익을 얻을 수 있습니다.
한편, 전략은 또한 최대 및 최저 가격을 추적하여 스톱 로스를 설정하고 수익을 취하며 이에 따라 주문을 관리합니다. 일반적으로이 전략은 여러 분석 도구를 결합하고 단계적 인 피라미딩을 통해 더 나은 수익을 얻습니다.
여러 지표를 결합하면 하나의 도구에 대한 잘못된 판단을 피할 수 있습니다.
여러 단계로 확장하면 수익률을 높일 수 있습니다.
스톱 로즈와 리프트를 설정하면 높은 스파이크로 인한 손실을 피할 수 있습니다.
통제할 수 있는 인력 감축으로 큰 손실은 없을 겁니다.
볼링거 밴드 상부 및 하부 레일의 브레이크오웃은 100% 신뢰할 수 없으며 일부 잘못된 신호를 볼 수 있습니다. 촛불 패턴, 볼륨과 같은 다른 지표를 추가하는 것을 고려할 수 있습니다.
단계적 피라미딩은 시장의 속도를 정확하게 파악해야 하며, 빠른 반전은 엄청난 손실을 초래할 수 있습니다. 확장 단계를 줄일 수 있습니다.
거래 도구의 유동성을 지켜야 합니다. 낮은 유동성은 대량 피라미딩에 적합하지 않습니다.
백테스트 ≠ 라이브, 스프레드와 수수료와 같은 비용은 라이브 트레이딩에서 고려해야합니다.
볼링거 기간, STD 곱셈, 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)