この戦略は,移動平均値,ボリンジャーバンド,およびボリューム重量平均価格 (VWAP) 指標を組み合わせます.黄金十字が形成され,急速な移動平均値が遅い値を超えるとロングポジションに入ります.この戦略はボリンジャーバンドチャネルも利用し,価格が下のバンドに触れたときにのみ入ることを考慮し,市場変動のなかで頻繁なエントリーと出口を避けます.
基本論理は,トレンド方向を決定するための移動平均値と,購入シグナルのための変動範囲を特定するためのボリンジャー帯に依存する.特に,以下の主要なルールがあります.
50 日間の EMA と 200 日間の EMA を使ってゴールデンクロスシステムを構築します.高速な EMA がスローな EMA を越えると上昇傾向が確認されます.
価格がVWAP以上になると 価格が上昇段階にあり 長いポジションを好むことを示します
価格がボリンジャー下帯に触れたり突破したりすると,価格がリバウンドポイントに近い可能性があることを示唆し,良い機会を提供します.
価格がボリンジャー上位帯を超えると利益を得てロングポジションを終了する.
これらのルールを組み合わせることで,この戦略は牛市で適切なロングエントリーを見つけ,利益を確保するためにストップ・ロスト/プロフィート・テイクを設定することができます.
金十字系は主要なトレンド方向を決定し,統合中に小さな勝利と損失を避けます.
VWAPは価格波の方向性を測定し,より正確な購入信号を表示します.
ボリンジャー帯は,ストップ・ロスト/プロフィート・テイク・ロックを設定しながら,買い物を lokalizeすることで回復力を高めます.
複数の確認指標が信頼性を高めます
黄金の十字架は誤った信号を与えます. MA 期間を調整し,他の確認を追加します.
不適切なボリンガーパラメータは 戦略を無効にします 期間と標準偏差を最適化します
ストップ・ロスの限界が大きすぎると 損失を効果的に制限できない.制御可能なリスクを確保するためにストップ・ロスの範囲を絞る.
最適な組み合わせを見つけるために異なるパラメータをテストすることで MAの組み合わせを最適化します
テストボリンジャー周期とパラメータセット よりよい帯域幅と変動性
リスク制御のバランスと早急なトリガー回避のためにストップ損失範囲をテストし調整する.
この戦略は,MA,ボリンジャーおよびVWAP分析をエントリに統合することで,機会を発見し,リスクを制御するバランスをとっています.継続的な精細調整と最適化は,時間とともに部門と市場の動向を活用することを可能にします.
/*backtest start: 2022-11-14 00:00:00 end: 2023-11-20 00:00:00 period: 1d basePeriod: 1h 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/ // © mohanee //@version=4 strategy(title="VWAP and BB strategy [$$]", overlay=true,pyramiding=2, default_qty_value=1, default_qty_type=strategy.fixed, initial_capital=10000, currency=currency.USD) fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 6, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2020, title = "From Year", minval = 1970) // To Date Inputs toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 8, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2020, title = "To Year", minval = 1970) // Calculate start/end date and time condition DST = 1 //day light saving for usa //--- Europe London = iff(DST==0,"0000-0900","0100-1000") //--- America NewYork = iff(DST==0,"0400-1300","0500-1400") //--- Pacific Sydney = iff(DST==0,"1300-2200","1400-2300") //--- Asia Tokyo = iff(DST==0,"1500-2400","1600-0100") //-- Time In Range timeinrange(res, sess) => time(res, sess) != 0 london = timeinrange(timeframe.period, London) newyork = timeinrange(timeframe.period, NewYork) startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = time >= startDate and time <= finishDate is_price_dipped_bb(pds,source1) => t_bbDipped=false for i=1 to pds t_bbDipped:= (t_bbDipped or close[i]<source1) ? true : false if t_bbDipped==true break else continue t_bbDipped is_bb_per_dipped(pds,bbrSrc) => t_bbDipped=false for i=1 to pds t_bbDipped:= (t_bbDipped or bbrSrc[i]<=0) ? true : false if t_bbDipped==true break else continue t_bbDipped // variables BEGIN shortEMA = input(50, title="fast EMA", minval=1) longEMA = input(200, title="slow EMA", minval=1) //BB smaLength = input(7, title="BB SMA Length", minval=1) bbsrc = input(close, title="BB Source") strategyCalcOption = input(title="strategy to use", type=input.string, options=["BB", "BB_percentageB"], defval="BB") //addOnDivergence = input(true,title="Add to existing on Divergence") //exitOption = input(title="exit on RSI or BB", type=input.string, options=["RSI", "BB"], defval="BB") //bbSource = input(title="BB source", type=input.string, options=["close", "vwap"], defval="close") //vwap_res = input(title="VWAP Resolution", type=input.resolution, defval="session") stopLoss = input(title="Stop Loss%", defval=1, minval=1) //variables END longEMAval= ema(close, longEMA) shortEMAval= ema(close, shortEMA) ema200val = ema(close, 200) vwapVal=vwap(close) // Drawings //plot emas plot(shortEMAval, color = color.green, linewidth = 1, transp=0) plot(longEMAval, color = color.orange, linewidth = 1, transp=0) plot(ema200val, color = color.purple, linewidth = 2, style=plot.style_line ,transp=0) //bollinger calculation mult = input(2.0, minval=0.001, maxval=50, title="StdDev") basis = sma(bbsrc, smaLength) dev = mult * stdev(bbsrc, smaLength) upperBand = basis + dev lowerBand = basis - dev offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500) bbr = (bbsrc - lowerBand)/(upperBand - lowerBand) //bollinger calculation //plot bb //plot(basis, "Basis", color=#872323, offset = offset) p1 = plot(upperBand, "Upper", color=color.teal, offset = offset) p2 = plot(lowerBand, "Lower", color=color.teal, offset = offset) fill(p1, p2, title = "Background", color=#198787, transp=95) plot(vwapVal, color = color.purple, linewidth = 2, transp=0) // Colour background //barcolor(shortEMAval>longEMAval and close<=lowerBand ? color.yellow: na) //longCondition= shortEMAval > longEMAval and close>open and close>vwapVal longCondition= ( shortEMAval > longEMAval and close>open and close>vwapVal and close<upperBand ) //and time_cond // and close>=vwapVal //Entry strategy.entry(id="long", comment="VB LE" , long=true, when= longCondition and ( strategyCalcOption=="BB"? is_price_dipped_bb(10,lowerBand) : is_bb_per_dipped(10,bbr) ) and strategy.position_size<1 ) //is_price_dipped_bb(10,lowerBand)) //and strategy.position_size<1 is_bb_per_dipped(15,bbr) //add to the existing position strategy.entry(id="long", comment="Add" , long=true, when=strategy.position_size>=1 and close<strategy.position_avg_price and close>vwapVal) //and time_cond) barcolor(strategy.position_size>=1 ? color.blue: na) strategy.close(id="long", comment="TP Exit", when=crossover(close,upperBand) ) //stoploss stopLossVal = strategy.position_avg_price * (1-(stopLoss*0.01) ) //strategy.close(id="long", comment="SL Exit", when= close < stopLossVal) //strategy.risk.max_intraday_loss(stopLoss, strategy.percent_of_equity)