この戦略は,ブリン帯を突破する動きを示す指標を用い,価格がブリン帯を突破して下落するかどうかを判断し,買い/売却のシグナルを発する.
この戦略は,ブリン帯の指標に基づいてトレンドの方向を判断する.ブリン帯は,移動平均線とその標準差からなる帯状の領域である.ブリン帯の中央線はn日移動平均線であり,上線は中線+2倍標準差であり,下線は中線-2倍標準差である.価格が上線に近づくと超買い,下線に近づくと超売りである.
具体的には,戦略は,まずn日間の最高価格,最低価格を計算し,中位価格 (((最高価格+最低価格) /2) を計算する.それから,閉店価格と中位価格の距離を重み付けの移動平均を計算し,ブリン帯の中線を構成し,中線上下それぞれに2倍標準差を追加して上下線を形成する.
閉盤価格が上線を突破すると,上昇傾向にあることを示し;下線を突破すると,下降傾向にあることを示し。上線を突破すると多し,下線を突破すると空し。
さらに,戦略は逆転開場機構を導入した.価格がブリン帯を突破して軌道に乗った場合,MACDが下落している場合は逆市操作で空白を行う.
ブリン帯はトレンドの方向を判断し,ある程度のトレンド追跡能力を有する.
逆転の利得を出すために,逆転開設を設計する.
ブリン帯周期,標準差倍数などのパラメータをカスタマイズして,異なる周期の取引に対応する.
リスクの低減のため,閉め,逆開けます.
ブリン帯はしばしば高波動の株に使用され,周期が長いResourcesやインデックスなどの品種には適さないかもしれない。異なる周期パラメータの効果をテストすることができる。
突破信号は偽突破が発生する可能性がある。他の要因と組み合わせてフィルター信号ができる。
リバース・ポジション開設は,損失をさらに拡大する可能性がある. リバース・ポジション開設モジュールを閉めることができる.
撤収は大きいかもしれない. ポジションの規模を適切に調整することができる.
市場を動揺させ,方向性を不明にするため,トレンドフィルターを加えることも考えられます.
ブリン帯の標準差倍数をテストして,より適切なパラメータを探せます.
単一損失をコントロールするために,ストップ・ロスの戦略を導入することができます.
ポジション開設と追加ロジックを最適化し,取引シグナルをより明確にする.
この戦略は,ブリン帯を基礎指標として,価格トレンドの突破を判断して取引する.単純なパラメータ設定を使用して基本トレンド追跡戦略を実現することができる.しかし,ある程度の偽突破リスクが存在し,他の指標と連携してフィルタリングを行う必要がある.さらにパラメータ設定,ストップ損失戦略などを最適化してリスクを制御することができる.
This strategy uses Bollinger Bands momentum indicator for breakout trading, mainly judging if price breaks through the upper or lower Bollinger Bands for trading signals.
The strategy is primarily based on Bollinger Bands indicator to determine trend direction. Bollinger Bands consist of a middle band based on a moving average and upper/lower bands defined by standard deviations. The middle band is a n-period moving average, the upper band is middle band + 2 standard deviations, and the lower band is middle band - 2 standard deviations. When price approaches the upper band it indicates overbought conditions, and when it approaches the lower band it signals oversold conditions.
Specifically, the strategy first calculates the highest high and lowest low over last n periods, and the middle price ((highest high + lowest low)/2). It then calculates the distance between close price and middle price, uses exponential moving average of the distance to form the middle band, and adds/subtracts 2 times standard deviation above and below to form the upper and lower bands.
When close price breaks through the upper band, it signals an uptrend; when it breaks the lower band, it signals a downtrend. The strategy goes long when the upper band is broken, and goes short when the lower band is broken.
In addition, the strategy incorporates a counter-trend mechanism. When price breaks the upper band but MACD is falling, it will take a counter-trend short position.
Using Bollinger Bands to determine trend direction provides certain trend following capability.
Counter-trend design allows profiting from reversals.
Customizable parameters like period and standard deviation multiples make it adaptable to different trading horizons.
Disable counter-trend trading to reduce risk.
Bollinger Bands work best for high volatility stocks, may not be suitable for stable commodities or indices. Can test different period parameters.
Breakout signals may have false breakouts. Can add filters with other indicators.
Counter-trend trading can further increase losses. Can disable counter-trend module.
Drawdowns may be significant. Can adjust position sizing.
Consider adding trend filter to avoid whipsaw in non-directional markets.
Test different standard deviation multiples to find optimal parameters.
Incorporate stop loss to control single trade loss.
Optimize entry and add-on logic for clearer trading signals.
The strategy uses Bollinger Bands as the primary indicator and trades based on trend breakouts. With simple parameters it provides basic trend following capabilities. But false breakout risks exist, requiring additional filters. Parameters, stop loss and risk controls can be enhanced. Overall it serves as a reasonable baseline breakout strategy.
/*backtest
start: 2023-08-18 00:00:00
end: 2023-09-17 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=2
strategy("Noro's Bands Scalper Strategy v1.6", shorttitle = "Scalper str 1.6", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needbe = input(true, defval = true, title = "Bands Entry")
needct = input(false, defval = false, title = "Counter-trend entry")
bodylen = input(10, defval = 10, minval = 0, maxval = 50, title = "Body length")
trb = input(1, defval = 1, minval = 1, maxval = 5, title = "Trend bars")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
src = close
//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2
//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2
//Trend
chd = close > hd
cld = close < ld
uptrend = trb == 1 and chd ? 1 : trb == 2 and chd and chd[1] ? 1 : trb == 3 and chd and chd[1] and chd[2] ? 1 : trb == 4 and chd and chd[1] and chd[2] and chd[3] ? 1 : trb == 5 and chd and chd[1] and chd[2] and chd[3] and chd[4] ? 1 : 0
dntrend = trb == 1 and cld ? 1 : trb == 2 and cld and cld[1] ? 1 : trb == 3 and cld and cld[1] and cld[2] ? 1 : trb == 4 and cld and cld[1] and cld[2] and cld[3] ? 1 : trb == 5 and cld and cld[1] and cld[2] and cld[3] and cld[4] ? 1 : 0
trend = dntrend == 1 and high < center ? -1 : uptrend == 1 and low > center ? 1 : trend[1]
//trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1]
//Lines
colo = needbb == false ? na : black
plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band 1")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band 1")
plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2")
//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)
//Body
body = abs(close - open)
smabody = ema(body, 30) / 10 * bodylen
//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and bar == -1)) ? 1 : 0
dn7 = trend == 1 and ((bar == 1 and bar[1] == 1) or (close > hd and needbe == true)) and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and ((bar == -1 and bar[1] == -1) or (close < ld2 and needbe == true)) and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and bar == 1)) ? 1 : 0
if up7 == 1 or up8 == 1
strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00)))
if dn7 == 1 or dn8 == 1
strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00)))
if time > timestamp(toyear, tomonth, 31, 00, 00)
strategy.close_all()