これは,判断のための複数の技術指標を組み込む比較的複雑なモメンタムブレークアウト戦略であり,スケールインとアウトの目標を達成するために,さまざまな方向と段階で複数の段階のピラミッドオーダーを実装します.
この戦略は,主にモメントインジケーター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)