یہ حکمت عملی متعدد تکنیکی اشارے پر مبنی ایک رفتار ٹریڈنگ کی حکمت عملی ہے۔ یہ حکمت عملی ایک رجحان ظاہر ہونے پر تیزی سے اندراج کا فیصلہ کرنے کے لئے ایک کثیر عنصر ماڈل کو نافذ کرنے کے لئے بولنگر بینڈ ، آر ایس آئی ، اے ٹی آر اور دیگر تکنیکی اشارے اپناتی ہے۔ اسی وقت ، یہ حکمت عملی خطرات کو مؤثر طریقے سے کنٹرول کرنے کے لئے اسٹاپ نقصان ، اعلی درجے کی اسٹاپ منافع اور دیگر رسک کنٹرول کے ذرائع کو بھی اپناتی ہے۔
اس حکمت عملی کے تجارتی سگنل بنیادی طور پر بولنگر بینڈ سے آتے ہیں۔ جب قیمت بولنگر بینڈ کی نچلی ریل کی طرف بڑھتی ہے تو ، یہ تیزی سے بڑھتی ہے ، اور جب قیمت اوپری ریل کی طرف بڑھتی ہے تو ، یہ bearish ہوتی ہے۔ جھوٹے بریکآؤٹس کو فلٹر کرنے کے ل the ، حکمت عملی میں اضافی طور پر آر ایس آئی اشارے کے قواعد شامل ہیں۔ صرف اس وقت جب آر ایس آئی اشارے نے بھی تصدیق کی ہے کہ یہ فی الحال زیادہ خرید یا فروخت والے علاقے میں ہے تو ہی تجارتی سگنل تیار کیا جائے گا۔
اس کے علاوہ ، اے ٹی آر اشارے کو اسٹاپ نقصان کو نافذ کرنے اور منافع حاصل کرنے کے لئے حکمت عملی میں استعمال کیا جاتا ہے۔ خاص طور پر ، جب کوئی پوزیشن کھولی جاتی ہے تو ، خریداری کی قیمت ریکارڈ کی جائے گی۔ اس کے بعد ، منافع کو مقفل کرنے اور خطرات کو مؤثر طریقے سے کنٹرول کرنے کے لئے اے ٹی آر اشارے کی قیمت کی بنیاد پر ٹریلنگ اسٹاپس کا استعمال کیا جائے گا۔
اس حکمت عملی کا سب سے بڑا فائدہ یہ ہے کہ مارکیٹ کو ترکیب کرنے کے لئے ملٹی فیکٹر ماڈل کا استعمال کرتے ہوئے ، یہ مارکیٹ میں ساختی مواقع کا موثر اندازہ کرسکتا ہے۔ اس سے ایک ہی اشارے سے غلط سگنل سے بچتا ہے۔ اسی وقت ، حکمت عملی کا بلٹ ان اسٹاپ نقصان اور جدید اسٹاپ منافع میکانزم بھی خطرات کو مؤثر طریقے سے کنٹرول کرسکتا ہے اور زیادہ نقصانات سے بچ سکتا ہے۔
اس حکمت عملی کا سب سے بڑا خطرہ یہ ہے کہ اگر مارکیٹ میں پرتشدد الٹ پھیر ہوتا ہے تو ، اس بات کا امکان نسبتا large بڑا ہوگا کہ متعدد اشارے بیک وقت غلط سگنل پیدا کریں گے۔ اس سے حکمت عملی کے لئے نمایاں نقصانات ہوں گے۔ اس کے علاوہ ، جب تکنیکی اشارے سگنل جاری کرتے ہیں تو ، یہ بھی مارکیٹ کی عام اتفاق رائے ہوسکتی ہے ، جو ہیرڈنگ اثرات کا شکار ہے ، اور اس طرح پھنس جاتا ہے۔
ان خطرات کو کم کرنے کے لئے ، ہم پیرامیٹرز کو مناسب طریقے سے ایڈجسٹ کرسکتے ہیں اور واضح سگنل منتخب کرسکتے ہیں۔ اسی وقت ، مارکیٹ کے اوپری اور نیچے کے قریب غلط تجارت سے بچنے کے لئے زیادہ فلٹرنگ حالات شامل کیے جاسکتے ہیں۔
حکمت عملی کو مندرجہ ذیل سمتوں میں بہتر بنایا جاسکتا ہے:
فیصلے کی درستگی کو بہتر بنانے کے لئے زیادہ تر تین جہتی کثیر عنصر ماڈل بنانے کے لئے مزید تکنیکی اشارے شامل کریں
سٹاپ نقصان منطق کو بہتر بنائیں اور مختلف مارکیٹ کے مراحل کے مطابق مختلف سٹاپ نقصان کی حکمت عملی کا انتخاب کریں
پیرامیٹرز کو متحرک طور پر بہتر بنانے اور سگنل کی وشوسنییتا کا اندازہ کرنے کے لئے مشین لرننگ اور دیگر ٹیکنالوجیز کا استعمال کریں
ایک سرایت شدہ کثیر عنصر ماڈل بنانے کے لئے صنعت، تصورات اور دیگر معلومات کو شامل کریں
کثیر عنصر ماڈل کے خیال کو معقول حد تک لاگو کرکے ، یہ حکمت عملی رجحان کی سمت کو بہت اچھی طرح سے گرفت میں لیتی ہے۔ ایک ہی وقت میں ، سائنسی رسک کنٹرول کے اقدامات بھی حکمت عملی کو قابل کنٹرول انداز میں منافع حاصل کرنے کے قابل بناتے ہیں۔ مسلسل اصلاح کے ذریعے ، اس حکمت عملی کے استحکام اور منافع میں مزید بہتری کی توقع کی جاتی ہے۔
/*backtest start: 2023-01-28 00:00:00 end: 2024-02-03 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 // THIS SCRIPT IS MEANT TO ACCOMPANY COMMAND EXECUTION BOTS // THE INCLUDED STRATEGY IS NOT MEANT FOR LIVE TRADING // THIS STRATEGY IS PURELY AN EXAMLE TO START EXPERIMENTATING WITH YOUR OWN IDEAS ///////////////////////////////////////////////////////////////////////////////// // comment out the next line to use this script as an alert script strategy(title="Dragon Bot - Default Script", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // remove the // in the next line to use this script as an alert script // study(title="Dragon Bot - Default Script", overlay=true) // Dragon-Bot default script version 2.0 // This can also be used with bot that reacts to tradingview alerts. // Use the script as "strategy" for backtesting // Comment out line 8 and de-comment line 10 to be able to set tradingview alerts. // You should also comment out (place // before it) the lines 360, 364, 368 and 372 (strategy.entry and strategy.close) to be able to set the alerts. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // In this first part of the script we setup variables and make sure the script keeps all information it used in the past. // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// longs = 0 longs := nz(longs[1]) shorts = 0 shorts := nz(shorts[1]) buyprice = 0.0 buyprice := buyprice[1] sellprice = 0.0 sellprice := sellprice[1] scaler = 0.0 scaler := scaler[1] sellprofit = input(1.0, minval=0.0, step=0.1, title="main strat profit") sellproffinal = sellprofit/100 enable_shorts = input(1, minval=0, maxval=1, title="Shorts on/off") enable_flipping = input(0, minval=0, maxval=1, title="Flipping on/off -> Go directly from long -> short or short -> long without closing ") enable_stoploss = input(0, minval=0, maxval=1, title="Stoploss on/off") sellstoploss = input(30.0, minval=0.0, step=1.0, title="Stoploss %") sellstoplossfinal = sellstoploss/100 enable_trailing = input(1, minval=0, maxval=1, title="Trailing on/off") enable_trailing_ATR = input(1, minval=0, maxval=1, title="Trailing use ATR on/off") ATR_Multi = input(1.0, minval=0.0, step=0.1, title="Multiplier for ATR") selltrailing = input(10.0, minval=0.0, step=1.0, title="Trailing %") selltrailingfinal = selltrailing/100 Backtestdate = input(0, minval=0, maxval=1, title="backtest date on/off") // Component Code by pbergden - Start backtest dates // The following code snippet is taken from an example by pbergen // All rights to this snippet remain with pbergden testStartYear = input(2018, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testStopYear = input(2019, "Backtest Stop Year") testStopMonth = input(1, "Backtest Stop Month") testStopDay = input(1, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) // A switch to control background coloring of the test period testPeriodBackground = input(title="Color Background?", type=bool, defval=true) testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na bgcolor(testPeriodBackgroundColor, transp=97) testPeriod() => true ///////////////////////////////////////////////////////////////////////////////////////////////////// // In this second part of the script we setup indicators that we can use for our actual algorithm. // ///////////////////////////////////////////////////////////////////////////////////////////////////// //ATR lengthtr = input(20, minval=1, title="ATR Length") ATRsell = input(0, minval=0, title="1 for added ATR when selling") ATR=rma(tr(true), lengthtr) Trail_ATR=rma(tr(true), 10) * ATR_Multi atr = 0.0 if ATRsell == 1 atr := ATR //OC2 lengthoc2 = input(20, minval=1, title="OC2 Length") OC2sell = input(0, minval=0, title="1 for added OC2 when selling") OC2mult = input(1, minval=1, title="OC2 multiplayer") OC= abs(open[1]-close) OC2=rma(OC, lengthoc2) oc2 = 0.0 if OC2sell == 1 oc2 := OC2*OC2mult //ADX lenadx = input(10, minval=1, title="DI Length") lensig = input(10, title="ADX Smoothing", minval=1, maxval=50) up = change(high) down = -change(low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) trur = rma(tr, lenadx) plus = fixnan(100 * rma(plusDM, lenadx) / trur) minus = fixnan(100 * rma(minusDM, lenadx) / trur) sum = plus + minus sigadx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), lensig) //StochRSI smoothKRSI = input(3, minval=1) smoothDRSI = input(3, minval=1) lengthRSI = input(14, minval=1) lengthStochRSI = input(14, minval=1) srcRSI = input(close, title="RSI Source") buyRSI = input(30, minval=1, title="RSI Buy Value") sellRSI = input(70, minval=1, title="RSI Sell Value") rsi1 = rsi(srcRSI, lengthRSI) krsi = sma(stoch(rsi1, rsi1, rsi1, lengthStochRSI), smoothKRSI) drsi = sma(krsi, smoothDRSI) // Bollinger bands lengthbb = input(20, minval=1) srcbb = input(close, title="Sourcebb") multbb = input(2.0, minval=0.001, maxval=50) bb_buy_value = input(0.5, step=0.1, title="BB Buy Value") bb_sell_value = input(0.5, step=0.1, title="BB Sell Value") basisbb = sma(srcbb, lengthbb) devbb = multbb * stdev(srcbb, lengthbb) upperbb = basisbb + devbb lowerbb = basisbb - devbb bbr = (srcbb - lowerbb)/(upperbb - lowerbb) bbbuy = basisbb - (devbb*bb_buy_value) bbsell = basisbb + (devbb*bb_sell_value) //ema very short shorter = ema(close, 2) shorterlong = ema(close, 5) //ema short short = ema(close, 10) long = ema(close, 30) //ema long shortday = ema(close, 110) longday = ema(close, 360) //ema even longer shortlongerday = ema(close, 240) longlongerday = ema(close, 720) //declaring extra timeframe value profit = request.security(syminfo.tickerid, timeframe.period, close) //////////////////////////////////////////////////////////////////////// // In the 3rd part of the script we define all the entries and exits // ///////// This third part is basically the acual algorithm //////////// /////////////////////////////////////////////////////////////////////// //Declaring function with the long entries OPENLONG_funct() => // You can add more buy entries to the script longentry1 = false longentry2 = false longentry3 = false longentry4 = false longentry5 = false makelong_funct = false if close<bbbuy and krsi<buyRSI // You could for instance add "and shortday > longday" longentry1 := close>close[1] // longentry2 := ... // if another thing we want to buy on happens // longentry3 := ... //All the buy entries go above, this last variable is what the function puts out // if you add more entries, add them in the following list too makelong_funct := longentry1 or longentry2 or longentry3 or longentry4 or longentry5 //Declaring function wit the short entries OPENSHORT_funct() => // You can add more buy entries to the script shortentry1 = false shortentry2 = false shortentry3 = false shortentry4 = false shortentry5 = false makeshort_funct = false if close>bbsell and krsi>sellRSI // You could for instance add "and shortday < longday" shortentry1 := close<close[1] // shortentry2 := ... // if another thing we want to buy on happens // shortentry3 := ... //All the buy entries go above, this last variable is what the function puts out // if you add more entries, add them in the following list too makeshort_funct := shortentry1 or shortentry2 or shortentry3 or shortentry4 or shortentry5 //Declaring function with the long exits CLOSELONG_funct() => // You can add more buy entries to the script longexit1 = false longexit2 = false longexit3 = false longexit4 = false longexit5 = false closelong_funct = false if close>bbsell and krsi>sellRSI longexit1 := close<close[1] // longexit2 := ... // if another thing we want to close on on happens you can add them here... // longexit3 := ... //All the buy entries go above, this last variable is what the function puts out // if you add more exits, add them in the following list too closelong_funct := longexit1 or longexit2 or longexit3 or longexit4 or longexit5 //Declaring function wit the short exits CLOSESHORT_funct() => // You can add more buy entries to the script shortexit1 = false shortexit2 = false shortexit3 = false shortexit4 = false shortexit5 = false closeshort_funct = false if close<bbsell and krsi<sellRSI shortexit1 := close>close[1] // shortexit2 := ... // if another thing we want to close on on happens you can add them here... // shortexit3 := ... //All the buy entries go above, this last variable is what the function puts out // if you add more exits, add them in the following list too closeshort_funct := shortexit1 or shortexit2 or shortexit3 or shortexit4 or shortexit5 ///////////////////////////////////////////////////////////////////////////////////// ////////////// End of "entries" and "exits" definition code ///////////////////////// ///////////////////////////////////////////////////////////////////////////////////// /// In the fourth part we do the actual work, as defined in the part before this //// ////////////////////// This part does not need to be changed //////////////////////// ///////////////////////////////////////////////////////////////////////////////////// //OPEN LONG LOGIC makelong = false //buy with backtesting on specific dates if Backtestdate > 0 and testPeriod() if (longs < 1 and shorts < 1) or (short > 0 and enable_flipping > 0 and enable_shorts > 0) makelong := OPENLONG_funct() //buy without backtesting on specific dates if Backtestdate < 1 if (longs < 1 and shorts < 1) or (short > 0 and enable_flipping > 0 and enable_shorts > 0) makelong := OPENLONG_funct() if makelong buyprice := close scaler := close longs := 1 shorts := 0 //OPEN SHORT LOGIC makeshort = false //buy with backtesting on specific dates if Backtestdate > 0 and testPeriod() if (shorts < 1 and longs < 1 and enable_shorts > 0) or (longs > 0 and enable_flipping > 0 and enable_shorts > 0) makeshort := OPENSHORT_funct() //buy without backtesting on specific dates if Backtestdate < 1 if (shorts < 1 and longs < 1 and enable_shorts > 0) or (longs > 0 and enable_flipping > 0 and enable_shorts > 0) makeshort := OPENSHORT_funct() if makeshort buyprice := close scaler := close shorts := 1 longs := 0 //Calculating values for traling stop if longs > 0 and enable_flipping < 1 if close > scaler+Trail_ATR and enable_trailing_ATR > 0 scaler := close if close > scaler * (1.0 + selltrailingfinal) and enable_trailing_ATR < 1 scaler := close if shorts > 0 and enable_flipping < 1 if close < scaler-Trail_ATR and enable_trailing_ATR > 0 scaler := close if close < scaler * (1.0 - selltrailingfinal) and enable_trailing_ATR < 1 scaler := close long_exit = false long_security1 = false long_security2 = false long_security3 = false //CLOSE LONG LOGIC if longs > 0 and enable_flipping < 1 if ( (buyprice + (buyprice*sellproffinal) + atr + oc2) < close) and ( (buyprice + (buyprice*sellproffinal) ) < profit) long_exit := CLOSELONG_funct() //security if enable_stoploss > 0 long_security1 := close < ( buyprice * (1.0 - sellstoplossfinal) ) if enable_trailing > 0 and enable_trailing_ATR < 1 long_security2 := close < ( scaler * (1.0 - selltrailingfinal) ) if enable_trailing > 0 and enable_trailing_ATR > 0 long_security2 := close < ( scaler - Trail_ATR) //CLOSE LONG LOGIC if longs > 0 and enable_flipping > 0 //security if enable_stoploss > 0 long_security1 := close < ( buyprice * (1.0 - sellstoplossfinal) ) if enable_trailing > 0 and enable_trailing_ATR < 1 long_security2 := close < ( scaler * (1.0 - selltrailingfinal) ) if enable_trailing > 0 and enable_trailing_ATR > 0 long_security2 := close < ( scaler - Trail_ATR) closelong = long_exit or long_security1 or long_security2 or long_security3 short_exit = false short_security1 = false short_security2 = false short_security3 = false if closelong longs := 0 //CLOSE SHORT LOGIC if shorts > 0 and enable_flipping < 1 if ( (buyprice - (buyprice*(sellproffinal) - atr - oc2) > close) and ( (buyprice - (buyprice*sellproffinal) ) > profit) ) short_exit := CLOSESHORT_funct() //security if enable_stoploss > 0 short_security1 := close > ( buyprice * (1.0 + sellstoplossfinal) ) if enable_trailing > 0 and enable_trailing_ATR < 1 short_security2 := close > ( scaler * (1.0 + selltrailingfinal) ) if enable_trailing > 0 and enable_trailing_ATR > 0 short_security2 := close > ( scaler + Trail_ATR) if shorts > 0 and enable_flipping > 0 //security if enable_stoploss > 0 short_security1 := close > ( buyprice * (1.0 + sellstoplossfinal) ) if enable_trailing > 0 and enable_trailing_ATR < 1 short_security2 := close > ( scaler * (1.0 + selltrailingfinal) ) if enable_trailing > 0 and enable_trailing_ATR > 0 short_security2 := close > ( scaler + Trail_ATR) closeshort = short_exit or short_security1 or short_security2 or short_security3 if closeshort shorts := 0 /////////////////////////////////////////////////////////////////////////////////////// ///////////// The last section takes care of the alerts ////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// plotshape(makelong, style=shape.arrowup) alertcondition(makelong, title="openlong", message="openlong") strategy.entry("BuyLONG", strategy.long, oca_name="DBCross", when= makelong, comment="Open Long") plotshape(makeshort, style=shape.arrowdown) alertcondition(makeshort, title="openshort", message="openshort") strategy.entry("BuySHORT", strategy.short, oca_name="DBCross", when= makeshort, comment="Open Short") plotshape(closelong, style=shape.arrowdown) alertcondition(closelong, title="closelong", message="closelong") strategy.close("BuyLONG", when=closelong) plotshape(closeshort, style=shape.arrowup) alertcondition(closeshort, title="closeshort", message="closeshort") strategy.close("BuySHORT", when=closeshort)