
اس حکمت عملی میں اشارے کے فاریکس ٹریڈنگ کے فوائد پر مبنی واپسی کی تجارت کی گئی ہے۔ فاریکس ٹریڈنگ کے فوائد کے لئے ہدف مقرر کیا گیا ہے۔ فاریکس ٹریڈنگ کے فوائد کی بنیاد پر فاریکس ٹریڈنگ کے فوائد کا تعین کیا گیا ہے۔ فاریکس ٹریڈنگ کے فوائد کی بنیاد پر فاریکس ٹریڈنگ کے فوائد کا تعین کیا گیا ہے۔
تجارت کی مقدار پر مبنی کثیر فاریکس سپورٹ / مزاحمت کٹ کی شناخت
کلاسیکی سپورٹ / مزاحمت کی شناخت کے لئے K لائن کی شکل کا استعمال کرتے ہوئے ، جعلی بریک کو بڑی تجارت کے حجم کے لئے فلٹر کریں
عام طور پر سپورٹ / مزاحمت کلاسیکی شکل سے بہتر شامل ہے
وسیع پیمانے پر حمایت کو ایک کثیر فیکٹر سگنل کے طور پر توڑنا ، وسیع پیمانے پر مزاحمت کو خالی فیکٹر سگنل کے طور پر توڑنا
ریورس ٹریڈنگ
فیکٹر سگنل جاری ہونے کے بعد ، ریورس آپریشن
اگر پوزیشن رکھی ہوئی ہے تو ، پوزیشن کو ریورس ڈراپ یا ریورس اوپن کریں
منافع کا ہدف مقرر کریں
اے ٹی آر کے مطابق سٹاپ نقصان
1R / 2R / 3R اور اس طرح کے ایک سے زیادہ مقاصد کے فوائد
مختلف منافع کے اہداف کے حصول کے بعد کھیپ میں کمی
سپورٹ اور مزاحمت کی توڑ پھوڑ ایک مضبوط رجحان الٹ سگنل کی نمائندگی کرتی ہے ، جس میں کچھ قابل اعتماد ہے ، جو مختصر مدت میں بڑے پیمانے پر الٹ کو پکڑ سکتا ہے۔
اسٹاپ نقصان اور کثیر منافع کے اہداف کی ترتیب کے ذریعہ ، فوری منافع حاصل کیا جاسکتا ہے ، اور انفرادی حصص کی واپسی کو محدود کیا جاسکتا ہے۔
یہ حکمت عملی حجم کے اشارے پر انحصار کرتی ہے اور اس رجحان کی حمایت کے لئے کافی ادارہ جاتی فنڈز کی ضرورت ہوتی ہے۔ منافع بخش ہونے کے لئے کچھ اتار چڑھاؤ کی گنجائش کی ضرورت ہے۔
اسٹاپ نقصان سے باہر نکلنے اور واپسی میں داخل ہونے کے آپریشنز کے نتیجے میں معاملات میں ہلچل کا سامنا کرنا پڑتا ہے۔
عام معاون مزاحمت پر مکمل طور پر بھروسہ نہیں کیا جاسکتا ہے اور اس میں ناکامی ٹیسٹ کے الٹ جانے کا امکان موجود ہے۔
اس حکمت عملی کا مقصد صرف رجحانات کو تبدیل کرنا ہے اور رجحانات کی پیروی کو نظر انداز کرنا ہے، جس سے بڑے مواقع سے محروم ہونے کا خطرہ ہے۔
ونڈ کنٹرول پہلو
مناسب طریقے سے نرمی کی واپسی کی تجارت کے لئے عوامل کی شرائط ، ہر توڑ کے لئے واپسی کی ضرورت نہیں ہے
دیگر اشارے کے ساتھ مل کر فلٹر کیا جا سکتا ہے، جیسے مقدار سے انحراف
نقصانات کو روکنے کے لئے بہتر حکمت عملی، پھنسے ہوئے امکانات کو کم کریں
وسیع پیمانے پر حمایت کی مزاحمت کے پیرامیٹرز کو بہتر بنانے کے لئے، زیادہ قابل اعتماد عوامل کی شناخت
منافع کے اہداف میں مزید درجے شامل کیے جاسکتے ہیں یا غیر مقررہ اہداف کے ساتھ
اے ٹی آر پیرامیٹرز کو ایڈجسٹ کریں یا اسٹیکس اسٹاپ استعمال کریں ، غیر ضروری طور پر شدید اسٹاپ کی وجہ سے ہونے والے ٹرانزیکشن لاگت کو کم کریں
رجحانات کے فیصلے جیسے اوسط لائن کو متعارف کرایا جاسکتا ہے ، تاکہ رجحانات سے شدید مقابلہ سے بچا جاسکے۔ اس کے علاوہ دیگر معاون عوامل بھی متعارف کروائے جاسکتے ہیں۔
اس حکمت عملی کا بنیادی مقصد ریورس ٹریڈنگ کا استعمال کرتے ہوئے قلیل مدتی میں بڑی اتار چڑھاؤ کو پکڑنا ہے۔ حکمت عملی کا نظریہ آسان اور براہ راست ہے ، پیرامیٹرز کو ایڈجسٹ کرنے سے اچھے ٹھوس اثرات حاصل کیے جاسکتے ہیں۔ تاہم ، ریورس حکمت عملی زیادہ جارحانہ ہے ، اس میں کچھ واپسی اور سیٹ اپ کا خطرہ موجود ہے ، اس کو روکنے اور منافع بخش حکمت عملی کو مزید بہتر بنانے کی ضرورت ہے ، اور غیر ضروری نقصان کو کم کرنے کے لئے رجحانات کے فیصلے کو مناسب طریقے سے جوڑنا ہے۔
/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 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/
// © DojiEmoji
//@version=5
strategy("Fractal Strat [KL] ", overlay=true, pyramiding=1, initial_capital=1000000000)
var string ENUM_LONG = "Long"
var string GROUP_ENTRY = "Entry"
var string GROUP_TSL = "Stop loss"
var string GROUP_TREND = "Trend prediction"
var string GROUP_ORDER = "Order size and Profit taking"
// backtest_timeframe_start = input.time(defval=timestamp("01 Apr 2000 13:30 +0000"), title="Backtest Start Time")
within_timeframe = true
// TSL: calculate the stop loss price. {
_multiple = input(2.0, title="ATR Multiplier for trailing stop loss", group=GROUP_TSL)
ATR_TSL = ta.atr(input(14, title="Length of ATR for trailing stop loss", group=GROUP_TSL, tooltip="Initial risk amount = atr(this length) x multiplier")) * _multiple
TSL_source = low
TSL_line_color = color.green
TSL_transp = 100
var stop_loss_price = float(0)
var float initial_entry_p = float(0)
var float risk_amt = float(0)
var float initial_order_size = float(0)
if strategy.position_size == 0 or not within_timeframe
TSL_line_color := color.black
stop_loss_price := TSL_source - ATR_TSL
else if strategy.position_size > 0
stop_loss_price := math.max(stop_loss_price, TSL_source - ATR_TSL)
TSL_transp := 0
plot(stop_loss_price, color=color.new(TSL_line_color, TSL_transp))
// } end of "TSL" block
// Order size and profit taking {
pcnt_alloc = input.int(5, title="Allocation (%) of portfolio into this security", tooltip="Size of positions is based on this % of undrawn capital. This is fixed throughout the backtest period.", minval=0, maxval=100, group=GROUP_ORDER) / 100
// Taking profits at user defined target levels relative to risked amount (i.e 1R, 2R, 3R)
var bool tp_mode = input(true, title="Take profit and different levels", group=GROUP_ORDER)
var float FIRST_LVL_PROFIT = input.float(1, title="First level profit", tooltip="Relative to risk. Example: entry at $10 and inital stop loss at $9. Taking first level profit at 1R means taking profits at $11", group=GROUP_ORDER)
var float SECOND_LVL_PROFIT = input.float(2, title="Second level profit", tooltip="Relative to risk. Example: entry at $10 and inital stop loss at $9. Taking second level profit at 2R means taking profits at $12", group=GROUP_ORDER)
var float THIRD_LVL_PROFIT = input.float(3, title="Third level profit", tooltip="Relative to risk. Example: entry at $10 and inital stop loss at $9. Taking third level profit at 3R means taking profits at $13", group=GROUP_ORDER)
// }
// Fractals {
// Modified from synapticEx's implementation: https://www.tradingview.com/script/cDCNneRP-Fractal-Support-Resistance-Fixed-Volume-2/
rel_vol_len = 6 // Relative volume is used; the middle candle has to have volume above the average (say sma over prior 6 bars)
rel_vol = ta.sma(volume, rel_vol_len)
_up = high[3]>high[4] and high[4]>high[5] and high[2]<high[3] and high[1]<high[2] and volume[3]>rel_vol[3]
_down = low[3]<low[4] and low[4]<low[5] and low[2]>low[3] and low[1]>low[2] and volume[3]>rel_vol[3]
fractal_resistance = high[3], fractal_support = low[3] // initialize
fractal_resistance := _up ? high[3] : fractal_resistance[1]
fractal_support := _down ? low[3] : fractal_support[1]
plot(fractal_resistance, "fractal_resistance", color=color.new(color.red,50), linewidth=2, style=plot.style_cross, offset =-3, join=false)
plot(fractal_support, "fractal_support", color=color.new(color.lime,50), linewidth=2, style=plot.style_cross, offset=-3, join=false)
// }
// ATR diversion test {
// Hypothesis testing (2-tailed):
//
// Null hypothesis (H0) and Alternative hypothesis (Ha):
// H0 : atr_fast equals atr_slow
// Ha : atr_fast not equals to atr_slow; implies atr_fast is either too low or too high
len_fast = input(5,title="Length of ATR (fast) for diversion test", group=GROUP_ENTRY)
atr_fast = ta.atr(len_fast)
atr_slow = ta.atr(input(50,title="Length of ATR (slow) for diversion test", group=GROUP_ENTRY, tooltip="This needs to be larger than Fast"))
// Calculate test statistic (test_stat)
std_error = ta.stdev(ta.tr, len_fast) / math.pow(len_fast, 0.5)
test_stat = (atr_fast - atr_slow) / std_error
// Compare test_stat against critical value defined by user in settings
//critical_value = input.float(1.645,title="Critical value", tooltip="Strategy uses 2-tailed test to compare atr_fast vs atr_slow. Null hypothesis (H0) is that both should equal. Based on the computed test statistic value, if absolute value of it is +/- this critical value, then H0 will be rejected.", group=GROUP_ENTRY)
conf_interval = input.string(title="Confidence Interval", defval="95%", options=["90%","95%","99%"], tooltip="Critical values of 1.645, 1.96, 2.58, for CI=90%/95%/99%, respectively; Under 2-tailed test to compare atr_fast vs atr_slow. Null hypothesis (H0) is that both should equal. Based on the computed test statistic value, if absolute value of it is +/- critical value, then H0 will be rejected.")
critical_value = conf_interval == "90%" ? 1.645 : conf_interval == "95%" ? 1.96 : 2.58
reject_H0_lefttail = test_stat < -critical_value
reject_H0_righttail = test_stat > critical_value
// } end of "ATR diversion test" block
// Entry Signals
entry_signal_long = close >= fractal_support and reject_H0_lefttail
// MAIN {
// Update the stop limit if strategy holds a position.
if strategy.position_size > 0
strategy.exit(ENUM_LONG, comment="SL", stop=stop_loss_price)
// Entry
if within_timeframe and entry_signal_long and strategy.position_size == 0
initial_entry_p := close
risk_amt := ATR_TSL
initial_order_size := math.floor(pcnt_alloc * strategy.equity / close)
strategy.entry(ENUM_LONG, strategy.long, qty=initial_order_size)
var int TP_taken_count = 0
if tp_mode and close > strategy.position_avg_price
if close >= initial_entry_p + THIRD_LVL_PROFIT * risk_amt and TP_taken_count == 2
strategy.close(ENUM_LONG, comment="TP Lvl3", qty=math.floor(initial_order_size / 3))
TP_taken_count := TP_taken_count + 1
else if close >= initial_entry_p + SECOND_LVL_PROFIT * risk_amt and TP_taken_count == 1
strategy.close(ENUM_LONG, comment="TP Lvl2", qty=math.floor(initial_order_size / 3))
TP_taken_count := TP_taken_count + 1
else if close >= initial_entry_p + FIRST_LVL_PROFIT * risk_amt and TP_taken_count == 0
strategy.close(ENUM_LONG, comment="TP Lvl1", qty=math.floor(initial_order_size / 3))
TP_taken_count := TP_taken_count + 1
// Alerts
_atr = ta.atr(14)
alert_helper(msg) =>
prefix = "[" + syminfo.root + "] "
suffix = "(P=" + str.tostring(close, "#.##") + "; atr=" + str.tostring(_atr, "#.##") + ")"
alert(str.tostring(prefix) + str.tostring(msg) + str.tostring(suffix), alert.freq_once_per_bar)
if strategy.position_size > 0 and ta.change(strategy.position_size)
if strategy.position_size > strategy.position_size[1]
alert_helper("BUY")
else if strategy.position_size < strategy.position_size[1]
alert_helper("SELL")
// Clean up - set the variables back to default values once no longer in use
if ta.change(strategy.position_size) and strategy.position_size == 0
TP_taken_count := 0
initial_entry_p := float(0)
risk_amt := float(0)
initial_order_size := float(0)
stop_loss_price := float(0)
// } end of MAIN block