دوہری حرکت پذیر اوسط بولنگر بینڈس رجحان حکمت عملی کے بعد

مصنف:چاؤ ژانگ، تاریخ: 2023-11-01 14:15:11
ٹیگز:

img

جائزہ

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

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

یہ حکمت عملی سادہ بولنگر بینڈ اور بہتر بولنگر بینڈ دونوں پر لاگو ہوتی ہے۔

سادہ بولنگر بینڈ درمیانی بینڈ کے لئے قریبی قیمتوں کے ایس ایم اے کا استعمال کرتے ہیں ، جبکہ بہتر بولنگر بینڈ قریبی قیمتوں کے ای ایم اے کا استعمال کرتے ہیں۔

اوپری اور نچلی بینڈ کا حساب وسط بینڈ ± N معیاری انحراف کے مطابق کیا جاتا ہے۔

یہ حکمت عملی اوپر اور نیچے کی بینڈ کے درمیان پھیلاؤ کی بنیاد پر رجحان کی طاقت کا اندازہ کرتی ہے۔ جب پھیلاؤ ایک حد سے کم ہوتا ہے تو ، یہ رجحان کی پیروی کے لئے رجحان کی مدت کا آغاز ظاہر کرتا ہے۔

خاص طور پر ، جب قیمت نچلے بینڈ کی طرف بڑھتی ہے تو ، یہ لمبی ہوتی ہے۔ جب قیمت اوپری بینڈ کی طرف بڑھتی ہے تو ، یہ پوزیشن بند کردیتی ہے۔ اسٹاپ نقصان کا طریقہ مقررہ فیصد ہے۔ ٹریلنگ اسٹاپ کو بھی فعال کیا جاسکتا ہے۔

منافع حاصل کرنا درمیانی بینڈ یا اوپری بینڈ کے قریب بند ہونے پر منحصر ہے۔

حکمت عملی نقصانات کو روکنے کے لئے صرف منافع پر فروخت کرنے کا انتخاب بھی کر سکتی ہے.

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

اس حکمت عملی کے فوائد:

  1. ڈبل بولنگر بینڈ کارکردگی کو بہتر بناتا ہے

سادہ اور بہتر بولنگر بینڈ کا موازنہ کرکے، یہ اعلی کارکردگی کے لئے بہتر ورژن کا انتخاب کرسکتا ہے.

  1. پھیلاؤ رجحان کی طاقت کا فیصلہ کرتا ہے

جب پھیلاؤ تنگ ہوجاتا ہے تو ، یہ ایک مضبوط رجحان کی نشاندہی کرتا ہے۔ رجحان کی پیروی میں جیت کی شرح زیادہ ہوتی ہے۔

  1. لچکدار منافع لینے اور سٹاپ نقصان

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

  1. نقصانات کے خلاف حفاظتی میکانزم

صرف منافع کے ساتھ فروخت کرنے سے نقصان میں اضافہ نہیں ہوتا۔

خطرے کا تجزیہ

خطرات میں شامل ہیں:

  1. استعمال کا خطرہ

رجحان کے بعد اپنے آپ میں کمی کا خطرہ ہوتا ہے۔ ذہنی طور پر مسلسل نقصانات برداشت کرنے کی ضرورت ہے۔

  1. وِپسا خطرہ

جب بینڈ وسیع ہوتے ہیں تو ، مارکیٹ سائیڈ ویز ہوسکتی ہے۔ حکمت عملی کم موثر ہے۔ جب تک رجحان دوبارہ شروع نہیں ہوتا تب تک تجارت کو روکنے کی ضرورت ہے۔

  1. اسٹاپ نقصان کا خطرہ

مقررہ فیصد سٹاپ نقصان بہت جارحانہ ہو سکتا ہے. زیادہ اعتدال پسند سٹاپ کی ضرورت ہے جیسے ATR سٹاپ.

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

حکمت عملی کو بہتر بنایا جا سکتا ہے:

  1. بولنگر بینڈ پیرامیٹرز

مختلف مارکیٹوں کے لئے بہترین مجموعے تلاش کرنے کے لئے مختلف ایم اے لمبائی، معیاری انحراف کے کئی بار آزمائیں.

  1. فلٹرز شامل کریں

بیلنگر سگنل کے اوپر MACD، KD جیسے فلٹرز شامل کریں تاکہ وِپسا مارکیٹوں کے دوران تجارت کو کم کیا جا سکے۔

  1. منافع اور سٹاپ نقصان

مختلف ٹریلنگ اسٹاپ طریقوں کی جانچ کریں۔ یا اتار چڑھاؤ ، اے ٹی آر وغیرہ کی بنیاد پر اسٹاپ نقصان کو بہتر بنائیں۔

  1. منی مینجمنٹ

ہر تجارت کے مطابق پوزیشن سائزنگ کو بہتر بنائیں۔ مختلف اضافی حکمت عملیوں کی جانچ کریں۔

نتیجہ

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


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 00:00:00
period: 1h
basePeriod: 15m
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/
// © JCGMarkets 

//@version=4
strategy("B.Bands | Augmented | Intra-range | Long-Only", shorttitle = "BB|A|IR|L", initial_capital=5000, commission_value=0.075, slippage = 1, overlay = true)

//Technical Indicators Data
show_simp   = input(false, title="Trade on Simple Bollinger Bands ", type= input.bool, group="Select Strategy System")
show_augm   = input(true, title="Trade on Augmented Bollinger Bands", type= input.bool, group="Select Strategy System") 
periods     = input(20, title="Periods for Moving Average", type =input.integer, minval = 2, step = 1, group="Technical Inputs")
std         = input(2, title="Std", type = input.float, minval=0.1 , step = 0.1, group="Technical Inputs")

// Strategy data
max_spread_bb   = input(20000.0, title="Max Spread Tolerance Beetween Bands", type=input.float, step=0.1, group="Strategy Inputs")
entry_source    = input(close, title="Entry data source", type=input.source, group="Strategy Inputs")
exit_source     = input(high, title="Exit data source", type=input.source, group="Strategy Inputs")
take_profit     = input("middle", title = "Profit to band:", options = ["middle", "opposite"], group="Strategy Inputs")
stop_loss       = input(3.00, title="Stop Loss %", type=input.float, step=0.05, group="Strategy Inputs")
trailing        = input(false, title="Activate trailing stop?", type = input.bool, group="Strategy Inputs")
stop_perc       = input(6.00, title="Trailing %", type=input.float, step=0.125, group="Strategy Inputs") * 0.01
sell_profit     = input(false, title="Only sell in profit (Stop Loss still active) ", type= input.bool, group="Strategy Inputs")


var SL = 0.0
var SLT= 0.0


//Simple BB Calculation -> adapt if needed with different std for upper-lower, sma-ema, etc 
middle_sim = sma(close, periods)

//Augmented BB Calculation -> adapt if needed with different std for upper lower, etc
middle_augm  = ema(close, periods)
middle_upp = ema(high, periods)
middle_low = ema(low, periods)

//Multiplier
dev      = stdev(close, periods) * std

//Upper & Lower Bands
upper = (middle_sim + dev)
lower = (middle_sim - dev)

//Augmented Bands
upper_augm = (middle_upp + dev)
lower_augm = (middle_low - dev)

//Bands Spread
spread   = upper - lower
spread_augm   = upper_augm - lower_augm

//From date
filter_from    =   input(  true,    title="===> From", group="Date Control")
from_y         =   input(  2010,    title = "from year", group="Date Control")
from_m         =   input(     1,    title = "from month", minval =1, maxval=12, group="Date Control")
from_d         =   input(     1,    title = "from day",  minval=1, maxval=31, group="Date Control")

//To date
filter_to   =    input( true,   title="===> To", group="Date Control")
to_y        =    input( 2030,   title = "To year", group="Date Control")
to_m        =    input(    1,   title = "To month", minval =1, maxval=12, group="Date Control")
to_d        =    input(    1,  title = "To day",  minval=1, maxval=31, group="Date Control")

// Date Condition
In_date() =>  true

in_position = strategy.position_size > 0 

// Trailing stop 
SLT := if in_position and In_date()
    stop_inicial = entry_source * (1 - stop_perc)
    max(stop_inicial, SLT[1])
else
    0

slts = (low <= SLT) and (trailing == true)


//Essential Trade logics
entry_long = (entry_source <= lower) and (spread < max_spread_bb)
entry_long_augm = (entry_source <= lower_augm) and (spread_augm < max_spread_bb)

// Simple Bollinger Conditions

if (not in_position and show_simp and In_date())
    if entry_long
        // Trigger buy order
        position_size = round( strategy.equity / close ) // All available equity for this strategy example
        strategy.entry("Entry", strategy.long, qty = position_size )
        SL := close * (1 - (stop_loss / 100)) // You could determine wether or not implement stop loss with bool input and if condition here.


if in_position and show_simp and not sell_profit and In_date()
    //Exits if not sell in profit
    if take_profit == "middle" 
        strategy.exit("Target", "Entry", limit = middle_sim, stop = SL, comment="Exit")
    if take_profit == "opposite"
        strategy.exit("Target", "Entry", limit = upper, stop = SL, comment="Exit")    

if in_position and show_simp and sell_profit and In_date()
    //Exits if sell in profit
    if take_profit == "middle" 
        strategy.exit("Target", "Entry", limit = (strategy.openprofit > 0 ? middle_sim: na), stop = SL, comment="Exit")
    if take_profit == "opposite"
        strategy.exit("Target", "Entry", limit = (strategy.openprofit > 0 ? upper: na), stop = SL, comment="Exit")    



if in_position and show_simp and slts and In_date()
    //Trailing activation
    strategy.close("Entry", comment="SLT")

if not In_date()
    //Exit due out of date range
    strategy.close("Entry", comment="Out of date range")



// Augmented Bollinger Conditions

if (not in_position and show_augm and In_date()) 
    if entry_long_augm
        // Trigger buy order
        position_size = round( strategy.equity / close )
        strategy.entry("Entry_A", strategy.long, qty = position_size )
        SL := close * (1 - (stop_loss / 100) )

if in_position and show_augm and not sell_profit and In_date()
    //Exits and not sell in profit
    if take_profit == "middle"
        strategy.exit("Target", "Entry_A", limit = middle_augm, stop = SL, comment="Exit")
    if take_profit == "opposite"
        strategy.exit("Target", "Entry_A", limit = upper_augm, stop = SL, comment="Exit")            
        

if in_position and show_augm and sell_profit and In_date() 
    //Exit only in profit
    if take_profit == "middle"
        strategy.exit("Target", "Entry_A", limit = (strategy.openprofit > 0 ? middle_augm:na), stop = SL, comment="Exit")
    if take_profit == "opposite"
        strategy.exit("Target", "Entry_A", limit = (strategy.openprofit > 0 ? upper_augm: na) , stop = SL, comment="Exit") 


if in_position  and show_augm and slts and In_date()
    //Trigger trailing
    strategy.close("Entry_A", comment="SLT")
    
if not In_date()
    //Out of date trigger
    strategy.close("Entry_A", comment= "Out of date range")




// Plotting

plot(in_position ? SL > 0 ? SL : na : na , style = plot.style_circles, color = color.red, title = "Stop Loss")
plot(in_position ? trailing ? SLT > 0 ? SLT : na : na : na , style = plot.style_circles, color = color.blue, title = "Trailing Stop" )

s = plot(show_simp ? upper : na , color = color.aqua)
plot(show_simp ? middle_sim : na , color=color.red)
i = plot(show_simp ? lower : na , color = color.aqua)
fill(s,i, color=color.new(color.aqua,90))


plot(show_augm ? middle_augm : na , color=color.blue)
s_a = plot( show_augm ? upper_augm : na, color=color.orange)
i_a = plot( show_augm ? lower_augm : na, color= color.orange)
fill(s_a,i_a, color=color.new(color.orange, 90))

مزید