یہ حکمت عملی بنیادی طور پر
EMA چلتی اوسط مقرر کریں، ڈیفالٹ مدت 200 ہے؛
سیٹ خطرہ / منافع کا تناسب، ڈیفالٹ 1.5 ہے؛
طویل اور مختصر کے لئے توڑنے کے بعد واپس پیرامیٹرز مقرر؛
ریکارڈ کریں کہ آیا پچھلا بریک آؤٹ ایک اعلی یا کم نقطہ تھا؛
لانگ سگنل: اگر پچھلا بریک آؤٹ کم تھا تو ، قیمت ڈونچیئن اوپری بینڈ اور ای ایم اے لائن سے اوپر ٹوٹ جاتی ہے۔
مختصر سگنل: اگر پچھلا توڑ ایک اعلی تھا، قیمت ڈونچیان کے نچلے بینڈ اور ای ایم اے لائن سے نیچے توڑتا ہے؛
لانگ انٹری کے بعد، ڈونچیان کے نچلے بینڈ مائنس 5 پوائنٹس پر سٹاپ نقصان مقرر کریں، رسک/ریوارڈ ریشو اوقات سٹاپ نقصان کا فاصلہ پر منافع لیں؛
مختصر اندراج کے بعد، ڈونچیان اوپری بینڈ میں سٹاپ نقصان مقرر کریں 5 پوائنٹس کے علاوہ، خطرہ / انعام کا تناسب بار سٹاپ نقصان کی دوری پر منافع لے لو.
اس طرح ، حکمت عملی رجحان کی پیروی اور بریک آؤٹ ٹریڈنگ کو یکجا کرتی ہے ، تاکہ بڑے رجحان کے ساتھ تجارت کی جاسکے۔ دریں اثنا ، اسٹاپ نقصان اور منافع حاصل کریں ہر تجارت کے خطرے / انعام پر قابو پالیں۔
اہم رجحان کی پیروی کریں، رجحان کے خلاف تجارت سے بچیں.
ڈونچیئن چینل طویل مدتی اشارے کے طور پر، ای ایم اے فلٹر کے ساتھ مل کر، مؤثر طریقے سے رجحان کی نشاندہی کر سکتا ہے.
سٹاپ نقصان اور منافع حاصل کریں تجارت کے مطابق خطرے کو کنٹرول کرتا ہے، ممکنہ نقصانات کو محدود کرتا ہے۔
خطرہ / انعام کا تناسب بہتر بنانا منافع کا عنصر بڑھا سکتا ہے ، زیادہ منافع کا پیچھا کرتا ہے۔
لچکدار backtest پیرامیٹرز، مختلف مارکیٹوں کے لئے پیرامیٹرز کو بہتر بنا سکتے ہیں.
Donchian چینل اور EMA کبھی کبھی غلط سگنل دے سکتے ہیں.
بریکآؤٹ ٹریڈنگ آسانی سے پھنس سکتی ہے، رجحان پس منظر کو واضح طور پر شناخت کرنے کی ضرورت ہے.
فکسڈ سٹاپ نقصان اور منافع لینے کو مارکیٹ کی اتار چڑھاؤ کی بنیاد پر ایڈجسٹ نہیں کیا جا سکتا.
پیرامیٹرز کے لئے محدود اصلاح کی جگہ، لائیو کارکردگی کی ضمانت نہیں ہے.
بلیک سوان واقعات کے لئے کمزور ٹریڈنگ کے نظام، شدید نقصانات کا باعث بن سکتا ہے.
سگنل کے معیار کو بہتر بنانے کے لیے زیادہ فلٹرز جیسے آسکیلیٹرز شامل کرنے پر غور کریں۔
مارکیٹ کی اتار چڑھاؤ اور اے ٹی آر کی بنیاد پر ایڈجسٹ سٹاپ نقصان اور منافع لے لو.
مشین لرننگ کا استعمال حقیقی مارکیٹوں کے مطابق پیرامیٹرز کی جانچ اور اصلاح کے لئے کریں۔
انٹری منطق کو بہتر بنائیں جس میں حجم یا اتار چڑھاؤ کی شرط ہے تاکہ پھندوں سے بچ سکے۔
مضبوطی کے لئے ہائبرڈ ماڈل بنانے کے لئے رجحان کے بعد نظام یا مشین سیکھنے کے ساتھ مل کر.
یہ حکمت عملی ایک ٹریک بریک آؤٹ حکمت عملی ہے ، جس میں شناخت شدہ اہم رجحان کے ساتھ تجارت کا منطق ہے ، اور اسٹاپ نقصان کو ترتیب دیتے ہوئے اور ہر تجارت کے خطرے کو کنٹرول کرنے کے ل profit منافع حاصل کرتے ہوئے ، انٹری سگنل کے طور پر بریک آؤٹ لیتے ہیں۔ اس حکمت عملی کے کچھ فوائد ہیں ، لیکن اس میں بہتری کی گنجائش بھی ہے۔ مجموعی طور پر ، پیرامیٹر کی مناسب ترتیب ، انٹری ٹائمنگ ، اور دیگر تکنیکوں کے ساتھ بہتری کے ساتھ ، یہ ایک عملی رجحان کی پیروی کرنے والی حکمت عملی بن سکتی ہے۔ لیکن سرمایہ کاروں کو ہمیشہ ذہن میں رکھنا چاہئے کہ کوئی بھی تجارتی نظام مارکیٹ کے خطرے کو مکمل طور پر ختم نہیں کرسکتا ، اور رسک مینجمنٹ ضروری ہے۔
/*backtest start: 2023-09-16 00:00:00 end: 2023-10-16 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // Welcome to my second script on Tradingview with Pinescript // First of, I'm sorry for the amount of comments on this script, this script was a challenge for me, fun one for sure, but I wanted to thoroughly go through every step before making the script public // Glad I did so because I fixed some weird things and I ended up forgetting to add the EMA into the equation so our entry signals were a mess // This one was a lot tougher to complete compared to my MACD crossover trend strategy but I learned a ton from it, which is always good and fun // Also I'll explain the strategy and how I got there through some creative coding(I'm saying creative because I had to figure this stuff out by myself as I couldn't find any reference codes) // First things first. This is a Donchian Channel Breakout strategy which follows the following rules // If the price hits the upperband of the Donchian Channel + price is above EMA and the price previously hit the lowerband of the Donchian Channel it's a buy signal // If the price hits the lowerband of the Donchian Channel + price is below EMA and the price prevbiously hit the upper band of the Donchian Channel it's a sell signal // Stop losses are set at the lower or upper band with a 0.5% deviation because we are acting as if those two bands are the resistance in this case // Last but not least(yes, this gave BY FAR the most trouble to code), the profit target is set with a 1.5 risk to reward ratio // If you have any suggestions to make my code more efficient, I'll be happy to hear so from you // So without further ado, let's walk through the code // The first line is basically standard because it makes backtesting so much more easy, commission value is based on Binance futures fees when you're using BNB to pay those fees in the futures market // strategy(title="Donchian Channels", shorttitle="DC", overlay=true, default_qty_type = strategy.cash, default_qty_value = 150, initial_capital = 1000, currency = currency.USD, commission_type = "percent", commission_value = 0.036) // The built-in Donchian Channels + an added EMA input which I grouped with the historical bars from the Donchian Channels length = input(20, minval=1, group = "Indicators") lower = lowest(length) upper = highest(length) basis = avg(upper, lower) emaInput = input(title = "EMA Input", type = input.integer, defval = 200, minval = 10, maxval = 400, step = 1, group = "Indicators") // I've made three new inputs, for risk/reward ratio and for the standard pullback deviation. My advise is to not use the pullback inputs as I'm not 100% sure if they work as intended or not riskreward = input(title = "Risk/Reward Ratio", type = input.float, defval = 1.50, minval = 0.01, maxval = 100, step = 0.01, group = "Risk/Reward") pullbackLong = input(title = "Distance from Long pullback %", type = input.float, defval = 0.995, minval = 0.001, maxval = 2, step = 0.001, group = "Risk/Reward") pullbackShort = input(title = "Distance from Short pullback %", type = input.float, defval = 1.005, minval = 0.001, maxval = 2, step = 0.001, group = "Risk/Reward") // Input backtest range, you can adjust these in the input options, just standard stuff fromMonth = input(defval = 1, title = "From Month", type = input.integer, minval = 1, maxval = 12, group = "Backtest Date Range") fromDay = input(defval = 1, title = "From Day", type = input.integer, minval = 1, maxval = 31, group = "Backtest Date Range") fromYear = input(defval = 2000, title = "From Year", type = input.integer, minval = 1970, group = "Backtest Date Range") thruMonth = input(defval = 1, title = "Thru Month", type = input.integer, minval = 1, maxval = 12, group = "Backtest Date Range") thruDay = input(defval = 1, title = "Thru Day", type = input.integer, minval = 1, maxval = 31, group = "Backtest Date Range") thruYear = input(defval = 2099, title = "Thru Year", type = input.integer, minval = 1970, group = "Backtest Date Range") // Date variable also standard stuff inDataRange = (time >= timestamp(syminfo.timezone, fromYear, fromMonth, fromDay, 0, 0)) and (time < timestamp(syminfo.timezone, thruYear, thruMonth, thruDay, 0, 0)) // I had to makes these variables because the system has to remember whether the previous 'breakout' was a high or a low // Also, because I based my stoploss on the upper/lower band of the indicator I had to find a way to change this value just once without losing the value, that was added, on the next bar var previousishigh = false var previousislow = false var longprofit = 0.0 var shortprofit = 0.0 var stoplossLong = 0.0 var stoplossShort = 0.0 // These are used as our entry variables emaCheck = ema(close, emaInput) longcond = high >= upper and close > emaCheck shortcond = low <= lower and close < emaCheck // With these two if statements I'm changing the boolean variable above to true, we need this to decide out entry position if high >= upper previousishigh := true if low <= lower previousislow := true // Made a last minute change on this part. To clean up our entry signals we don't want our breakouts, while IN a position, to change. This way we do not instantly open a new position, almost always in the opposite direction, upon exiting one if strategy.position_size > 0 or strategy.position_size < 0 previousishigh := false previousislow := false // Strategy inputs // Long - previous 'breakout' has to be a low, the current price has to be a new high and above the EMA, we're not allowed to be in a position and ofcourse it has to be within our given data for backtesting purposes if previousislow == true and longcond and strategy.position_size == 0 and inDataRange strategy.entry("Long Entry", strategy.long, comment = "Entry Long") stoplossLong := lower * pullbackLong longprofit := ((((1 - stoplossLong / close) * riskreward) + 1) * close) strategy.exit("Long Exit", "Long Entry", limit = longprofit, stop = stoplossLong, comment = "Long Exit") // Short - Previous 'breakout' has to be a high, current price has to be a new low and lowe than the 200EMA, we're not allowed to trade when we're in a position and it has to be within our given data for backtesting purposes if previousishigh == true and shortcond and strategy.position_size == 0 and inDataRange strategy.entry("Short Entry", strategy.short, comment = "Entry Short") stoplossShort := upper * pullbackShort shortprofit := (close - ((((1 - close / stoplossShort) * riskreward) * close))) strategy.exit("Short Exit", "Short Entry", limit = shortprofit, stop = stoplossShort, comment = "Short Exit") // This plots the Donchian Channels on the chart which is just using the built-in Donchian Channels plot(basis, "Basis", color=color.blue) u = plot(upper, "Upper", color=color.green) l = plot(lower, "Lower", color=color.red) fill(u, l, color=#0094FF, transp=95, title="Background") // These plots are to show if the variables are working as intended, it's a mess I know but I didn't have any better ideas, they work well enough for me // plot(previousislow ? close * 0.95 : na, color=color.red, linewidth=2, style=plot.style_linebr) // plot(previousishigh ? close * 1.05 : na, color=color.green, style=plot.style_linebr) // plot(longprofit, color=color.purple) // plot(shortprofit, color=color.silver) // plot(stoplossLong) // plot(stoplossShort) // plot(strategy.position_size)