Bollinger Bands ATR ٹریلنگ اسٹاپ حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-01-03 11:20:06
ٹیگز:

img

جائزہ

یہ حکمت عملی بولنگر بینڈ اشارے اور اوسط حقیقی رینج (اے ٹی آر) اشارے کو یکجا کرتی ہے تاکہ ٹریلنگ اسٹاپ نقصان کے فنکشن کے ساتھ بریک آؤٹ ٹریڈنگ حکمت عملی تشکیل دی جاسکے۔ تجارتی سگنل اس وقت پیدا ہوتے ہیں جب قیمتیں مخصوص معیاری انحراف کے بولنگر بینڈ کو توڑ دیتی ہیں۔ اسی وقت ، اے ٹی آر اشارے کا استعمال اسٹاپ نقصان کا حساب کرنے اور رسک / انعام تناسب کو کنٹرول کرنے کے لئے منافع لینے کے لئے کیا جاتا ہے۔ اس کے علاوہ ، اس حکمت عملی میں ٹائم فلٹر اور پیرامیٹر کی اصلاح جیسی خصوصیات بھی ہیں۔

حکمت عملی منطق

مرحلہ 1 ، درمیانی بینڈ ، اوپری بینڈ اور نچلے بینڈ کا حساب لگائیں۔ درمیانی بینڈ قیمت کا سادہ چلتا ہوا اوسط (ایس ایم اے) ہے ، اور اوپری اور نچلی بینڈ قیمت کے معیاری انحراف کے ضرب ہیں۔ جب قیمت نچلی بینڈ سے اوپر کی طرف ٹوٹ جاتی ہے تو ، طویل ہوجائیں۔ جب قیمت اوپری بینڈ سے نیچے کی طرف ٹوٹ جاتی ہے تو ، مختصر ہوجائیں۔

مرحلہ 2 ، اے ٹی آر اشارے کا حساب لگائیں۔ اے ٹی آر اشارے قیمت کی اوسط اتار چڑھاؤ کی عکاسی کرتا ہے۔ اے ٹی آر کی قیمت کے مطابق ، لمبی پوزیشنوں اور مختصر پوزیشنوں کے لئے اسٹاپ نقصان مرتب کریں۔ اسی وقت ، خطرہ / انعام کے تناسب کو کنٹرول کرنے کے لئے اے ٹی آر کی قیمت پر مبنی منافع لینے کی پوزیشن مرتب کریں۔

مرحلہ 3، اہم خبروں کے نتیجے میں شدید اتار چڑھاؤ سے بچنے کے لئے صرف مخصوص وقت کی مدت میں تجارت کرنے کے لئے ٹائم فلٹر کا استعمال کریں۔

مرحلہ 4، ٹریلنگ اسٹاپ میکانزم۔ زیادہ منافع میں مقفل کرنے کے لئے تازہ ترین اے ٹی آر پوزیشن کی بنیاد پر اسٹاپ نقصان کو ایڈجسٹ کرتے رہیں۔

فوائد کا تجزیہ

  1. بولنگر بینڈ خود قیمت کے توازن کو ایک واحد چلتی اوسط سے زیادہ مؤثر طریقے سے ظاہر کرتا ہے۔

  2. اے ٹی آر اسٹاپ نقصان کنٹرول ہر تجارت کے خطرے / منافع کا تناسب؛

  3. ٹریلنگ اسٹاپ منافع میں مقفل کرنے کے لئے مارکیٹ کی اتار چڑھاؤ کی بنیاد پر خود بخود ایڈجسٹ ہوتا ہے۔

  4. وسیع پیمانے پر حکمت عملی کے پیرامیٹرز اعلی حسب ضرورت کی اجازت دیتے ہیں.

خطرے کا تجزیہ

  1. جب مارکیٹ مستحکم ہوتی ہے تو کئی چھوٹے نقصانات ہو سکتے ہیں۔

  2. بولنگر بینڈ کے کراس اوور کے ساتھ ناکام بریک آؤٹ الٹ؛

  3. راتوں رات سیشنوں اور اہم خبروں کے واقعات سے وابستہ زیادہ خطرات۔

انسداد اقدامات:

  1. سختی سے خطرے کے انتظام کے اصولوں پر عمل کریں، ہر تجارت کے نقصان کو کنٹرول کریں؛
  2. جیت کی شرح کو بہتر بنانے کے لئے پیرامیٹرز کو بہتر بنائیں؛
  3. اعلی خطرے کے ادوار سے بچنے کے لئے وقت فلٹر کا اطلاق کریں۔

اصلاح کی ہدایات

  1. مختلف پیرامیٹرز کے مجموعے کی جانچ کریں؛
  2. OBV کی طرح ٹائمنگ اشارے کا اضافہ؛
  3. مشین لرننگ ماڈل کو شامل کریں.

نتیجہ

یہ حکمت عملی رجحان توازن اور بریک آؤٹ سمتوں کا تعین کرنے کے لئے بولنگر بینڈ ، اے ٹی آر کو خطرہ / انعام تناسب کو کنٹرول کرنے کے لئے اسٹاپ نقصان اور منافع حاصل کرنے کا حساب لگانے کے لئے ، اور منافع میں مقفل کرنے کے لئے ٹریلنگ اسٹاپ کو جوڑتی ہے۔ اس کے فوائد اعلی حسب ضرورت ، قابل کنٹرول خطرات ، اور قلیل مدتی انٹرا ڈے ٹریڈنگ کے لئے موزوں ہیں۔ پیرامیٹر کی اصلاح اور مشین لرننگ کے ذریعے جیت کی شرح اور منافع میں مزید بہتری حاصل کی جاسکتی ہے۔


/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 1m
basePeriod: 1m
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/
// © sadeq_haddadi

//@version=5

strategy('Bollinger Bands + ATR / trail- V2', overlay=true ) // Interactive Brokers rate)



//date and time
startDate   = input(title="Start Date", defval=timestamp("01 Aug 2023 00:00 +0000"), tooltip="Date & time to begin analysis",group = 'Time Filter')
endDate     = input(title="End Date", defval=timestamp("1 Jan 2099 00:00 +0000"), tooltip="Date & time to stop analysis")
timeSession = input(title="Time Session To Analyze", defval="0300-1700", tooltip="Time session to analyze")
inSession(sess) => true

// indicators 

length = input.int(20, minval=1,group = 'Bollinger Band')
maType = input.string("SMA", "Basis MA Type", options = ["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
src = input(close, title="Source")
mult1 = input.float(2.0, minval=0.001, maxval=50, title="StdDev1")
mult2 = input.float(3.0, minval=0.001, maxval=50, title="StdDev2")

ma(source, length, _type) =>
    switch _type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

basis = ma(src, length, maType)
dev1 = mult1 * ta.stdev(src, length)
dev2 = mult2 * ta.stdev(src, length)
upper1 = basis + dev1
lower1 = basis - dev1
upper2 = basis + dev2
lower2 = basis - dev2
offset = input.int(0, "Offset", minval = -500, maxval = 500)
plot(basis, "Basis", color=#2962FF, offset = offset,linewidth=2)
p1 = plot(upper1, "Upper", color=color.new(color.white,50), offset = offset,linewidth=2)
p2 = plot(lower1, "Lower", color=color.new(color.white,50), offset = offset,linewidth=2)
p3 = plot(upper2, "Upper", color=color.new(color.white,80), offset = offset,linewidth=1)
p4 = plot(lower2, "Lower", color=color.new(color.white,80), offset = offset,linewidth=1)

fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))
fill(p3, p4, title = "Background", color=color.rgb(33, 150, 243, 95))

show_crosses = input(false, "Show Cross the Bands?")

plotshape(show_crosses and ta.crossover(close, upper2)  ? src : na, "S", style = shape.triangledown, location =location.abovebar, color = color.yellow, size = size.tiny)
plotshape(show_crosses and ta.crossunder(low, lower2) ? src : na ,"L", style = shape.triangleup, location =  location.belowbar, color = color.purple, size = size.tiny)

second_entry = input(true, "Show second deviation entry point?")

//atr

length_ATR = input.int(title="Length", defval=5, minval=1,group = 'ATR')
smoothing = input.string(title="Smoothing", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"])
m = input.float(1, "Multiplier")
src1 = input(high)
src2 = input(low)
pline = input.bool(title = 'show ATR lines ?', defval=false)



ma_function(source, length_ATR) =>
	if smoothing == "RMA"
		ta.rma(source, length_ATR)
	else
		if smoothing == "SMA"
			ta.sma(source, length_ATR)
		else
			if smoothing == "EMA"
				ta.ema(source, length_ATR)
			else
				ta.wma(source, length_ATR)
				
a = ma_function(ta.tr(true), length_ATR) * m
x = ma_function(ta.tr(true), length_ATR) * m + src1
x2 = src2 - ma_function(ta.tr(true), length_ATR) * m

PP1 = plot(pline ? x :na , title = "ATR Short Stop Loss", color= color.new(color.red,20) )
PP2 = plot(pline ? x2:na , title = "ATR Long Stop Loss",  color=color.new(color.green,20) )

Tp_to_Sl = input.float(1.5, "TP/SL")
candle_size =  input.float(10, "candle/pip")
distance_source =  input.float(1.5, "distance to midline/pip")
//strategy

buyCondition = low[2] < lower1 and  ta.crossover(close[1], lower1)  and strategy.position_size == 0 and (close[1] - open[1]) < candle_size * 0.0001 and close > open and ( basis - close) > distance_source * 0.0001

sellCondition = high[2] > upper1 and ta.crossunder(close[1], upper1)  and strategy.position_size == 0 and (open[1] - close[1]) < candle_size * 0.0001 and close < open  and (close - basis) > distance_source * 0.0001
//
buyCondition2 = low[2] < lower2 and  ta.crossover(close[1], lower2)  and (close[1] - open[1]) < candle_size * 0.0001 and close > open and ( basis - close) > distance_source * 0.0001
sellCondition2 = high[2] > upper2 and ta.crossunder(close[1], upper2)   and (open[1] - close[1]) < candle_size * 0.0001 and close < open  and (close - basis) > distance_source * 0.0001

plotshape(second_entry and  sellCondition2 ? src : na, "S", style = shape.triangledown, location =location.abovebar, color = color.rgb(241, 153, 177), size = size.tiny)
plotshape(second_entry and buyCondition2 ? src : na ,"L", style = shape.triangleup, location =  location.belowbar, color = color.rgb(177, 230, 168), size = size.tiny)
//
since_buy  =ta.barssince(buyCondition)
since_sell =ta.barssince(sellCondition)
entry_price = ta.valuewhen(buyCondition or sellCondition, src, 0)

sl_long = ta.valuewhen(buyCondition, x2[1], 0)
sl_short = ta.valuewhen(sellCondition, x[1], 0)
buyprofit = entry_price + (Tp_to_Sl*( entry_price - sl_long))
sellprofit= entry_price + (Tp_to_Sl*( entry_price - sl_short))

//alert_massage = "new strategy position is {{strategy.position_size}}"
//prof = ta.crossover(high,upper1)
//buyexit=ta.valuewhen(prof,upper1,0)

if buyCondition and inSession(timeSession)

    strategy.entry( id = "long", direction = strategy.long , alert_message='Open Long Position' )

if sellCondition and inSession(timeSession)
   
    strategy.entry(id= "short", direction = strategy.short, alert_message='Open Short Position')

//trail-stop loss
use_trailing = input.bool(title = 'use trailing stop loss?', defval=true)
pricestop_long=0.00
pricestop_short=100000.00
if (strategy.position_size > 0)
   
    if use_trailing == false
        pricestop_long := sl_long
    else
        pricestop_long := math.max (x2, pricestop_long[1]) //trail - long

if (strategy.position_size < 0)
   
    if use_trailing == false
        pricestop_short := sl_short
    else
        pricestop_short := math.min (x, pricestop_short[1])  // trail - short 

if strategy.position_size > 0 
   
    strategy.exit(id = 'close', limit =  buyprofit , stop = pricestop_long  )

if strategy.position_size < 0 

    strategy.exit(id = 'close', limit = sellprofit  , stop = pricestop_short  )

alertcondition(buyCondition or sellCondition, 'Enter_position')



مزید