اس مضمون میں ایک مقداراتی تجارتی حکمت عملی کے بارے میں تفصیل سے بتایا گیا ہے جو ایک ٹرانس ٹرینڈ اشارے اور ایک سے زیادہ ٹائم فریم کے فیصلے پر مبنی ہے۔ اس حکمت عملی میں ٹریڈنگ سگنل کے معیار کو بہتر بنانے کے لئے مختلف ادوار میں ٹرانس ٹرینڈ اشارے کا جامع استعمال کیا گیا ہے۔
حکمت عملی
اس حکمت عملی کے بنیادی حصوں میں شامل ہیں:
موجودہ سائیکل میں ایک ٹرانسمیشن اشارے کا حساب لگانا، قیمت کی رجحان کی سمت کا تعین کرنا؛
اعلی ٹائم فریموں (جیسے سورج کی لکیر) میں سپر ٹرینڈ اشارے کا حساب لگانا ، بڑے رجحانات کا تعین کرنا؛
دونوں ٹائم فریموں کے مابین ٹرانس ٹرینڈ اشارے کی سمت کی مستقل مزاجی کو جوڑ کر ٹریڈنگ سگنل بنانا؛
سگنل کی ترتیب کے مطابق معقول سٹاپ نقصان؛
اس کے بعد ، آپ کو ایک مخصوص تناسب کے ساتھ سیریز میں حصہ لینے کی اجازت دی جائے گی ، اور آپ کو منافع کو لاک کرنا ہوگا۔
جب اعلی اور کم دورانیے کے ماورائے رجحان اشارے کی سمت میں یکساں ہوتا ہے تو ، بڑے رجحان کے طور پر سمجھا جاتا ہے ، اشارے کے تعلقات کے مطابق خرید و فروخت کا اشارہ ہوتا ہے۔ اور ہر تجارت کے خطرے سے متعلق منافع کا انتظام کرنے کے لئے اسٹاپ نقصان کی روک تھام کا تعین کریں۔
دوئم، حکمت عملی کے فوائد
اس حکمت عملی کا سب سے بڑا فائدہ یہ ہے کہ اس میں ایک سے زیادہ ٹائم فریم کا استعمال کیا جاتا ہے ، جس سے کچھ جعلی سگنل کو فلٹر کیا جاسکتا ہے ، جس سے سگنل کی وشوسنییتا میں اضافہ ہوتا ہے۔
اس کے علاوہ، معقول سٹاپ نقصان کی روک تھام کی ترتیب بھی ہر ایک تجارت کے لئے خطرے کو کنٹرول کرنے میں مدد ملتی ہے، اور زیادہ سے زیادہ نقصان سے بچنے کے لئے.
آخر میں ، اس حکمت عملی کی ایک اہم خصوصیت یہ ہے کہ اس میں منافع کو لاک کرنے کے لئے کھیلے جانے والے میچوں کی تقسیم کی جاتی ہے۔
تیسرا، ممکنہ خطرات
لیکن ہمیں مندرجہ ذیل خطرات سے بھی آگاہ ہونا چاہئے:
سب سے پہلے ، ٹرانس ٹرینڈ انڈیکس خود ہی پیچھے رہ جانے کا مسئلہ ہے ، اور ممکنہ طور پر بہترین داخلے کی جگہ سے محروم ہے۔
دوسری بات یہ ہے کہ اس کو روکنے کے لیے جو اقدامات کیے جا رہے ہیں وہ بہت زیادہ ہیں اور ان کے لیے مناسب انتظامات کی ضرورت ہے۔
آخر میں ، اس کے نتیجے میں سلائڈ پوائنٹ کی لاگت کو بھی مدنظر رکھا جانا چاہئے۔
چار مضامین، خلاصہ
اس مضمون میں ایک ایسی مقدار کی حکمت عملی کی تفصیل دی گئی ہے جو ایک ٹرانس ٹرینڈ اشارے اور ایک سے زیادہ ٹائم فریم کے فیصلے پر مبنی ہے۔ اس میں اعلی اور کم دورانیہ کا مجموعہ استعمال کیا گیا ہے تاکہ سگنل کی کوالٹی کو بہتر بنایا جاسکے ، اور اس میں نقصانات کو روکنے اور بیچ سے باہر نکلنے کے طریقہ کار کو خطرہ کا انتظام کیا جاسکے۔ مجموعی طور پر ، اس حکمت عملی کا اشارے کا استعمال معقول ہے اور اس کے پیرامیٹرز کو بہتر بنانے کے ذریعہ اس کا اچھا اثر مل سکتا ہے۔
/*backtest
start: 2023-09-06 00:00:00
end: 2023-09-13 00:00:00
period: 10m
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/
// © ranga_trading
//@version=5
// strategy(title='SuperTrend Multi Time Frame Long and Short Trading Strategy with Take Profit, Stop Loss and in build alerts V01', shorttitle='SuperTrend Multi Time Frame Long and Short Trading Strategy with Take Profit, Stop Loss and in build alerts V01 ', overlay=true, default_qty_value=60, initial_capital=2000, default_qty_type=strategy.percent_of_equity, pyramiding=0, process_orders_on_close=true)
tf1 = input.timeframe('D', title='Timeframe 1')
tf2 = input.timeframe('W', title='Timeframe 2')
length = input(title='ATR Period', defval=22)
mult = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
showLabels = input(title='Show Buy/Sell Labels ?', defval=true)
useClose = input(title='Use Close Price for Extremums ?', defval=true)
highlightState = input(title='Highlight State ?', defval=true)
atr = mult * ta.atr(length)
longStop = (useClose ? ta.highest(close, length) : ta.highest(length)) - atr
longStopPrev = nz(longStop[1], longStop)
longStop := close[1] > longStopPrev ? math.max(longStop, longStopPrev) : longStop
shortStop = (useClose ? ta.lowest(close, length) : ta.lowest(length)) + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop
var int dir = 1
dir := close > shortStopPrev ? 1 : close < longStopPrev ? -1 : dir
var color longColor = color.green
var color shortColor = color.red
longStopPlot = plot(dir == 1 ? longStop : na, title='Long Stop', style=plot.style_linebr, linewidth=2, color=color.new(longColor, 0))
buySignal = dir == 1 and dir[1] == -1
plotshape(buySignal ? longStop : na, title='Long Stop Start', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(longColor, 0))
shortStopPlot = plot(dir == 1 ? na : shortStop, title='Short Stop', style=plot.style_linebr, linewidth=2, color=color.new(shortColor, 0))
sellSignal = dir == -1 and dir[1] == 1
plotshape(sellSignal ? shortStop : na, title='Short Stop Start', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(shortColor, 0))
midPricePlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0, display=display.none, editable=false)
longFillColor = highlightState ? dir == 1 ? longColor : na : na
shortFillColor = highlightState ? dir == -1 ? shortColor : na : na
fill(midPricePlot, longStopPlot, title='Long State Filling', color=longFillColor, transp=90)
fill(midPricePlot, shortStopPlot, title='Short State Filling', color=shortFillColor, transp=90)
// CE Function
ce() =>
atr2 = mult * ta.atr(length)
longStop2 = (useClose ? ta.highest(close, length) : ta.highest(length)) - atr2
longStop2Prev = nz(longStop2[1], longStop2)
longStop2 := close[1] > longStop2Prev ? math.max(longStop2, longStop2Prev) : longStop2
shortStop2 = (useClose ? ta.lowest(close, length) : ta.lowest(length)) + atr2
shortStop2Prev = nz(shortStop2[1], shortStop2)
shortStop2 := close[1] < shortStop2Prev ? math.min(shortStop2, shortStop2Prev) : shortStop2
var int dir2 = 1
dir2 := close > shortStop2Prev ? 1 : close < longStop2Prev ? -1 : dir2
ce = dir2 == 1 ? longStop2 : shortStop2
[dir2, ce]
[side, ce_plot] = ce()
ce1_plot = request.security(syminfo.tickerid, tf1, ce_plot[1], barmerge.gaps_off, barmerge.lookahead_on)
ce2_plot = request.security(syminfo.tickerid, tf2, ce_plot[1], barmerge.gaps_off, barmerge.lookahead_on)
ce1 = request.security(syminfo.tickerid, tf1, side[1], barmerge.gaps_off, barmerge.lookahead_on)
ce2 = request.security(syminfo.tickerid, tf2, side[1], barmerge.gaps_off, barmerge.lookahead_on)
long = buySignal and ce1 > 0 and ce2 > 0
short = sellSignal and ce1 < 0 and ce2 < 0
tradeType = input.string('BOTH', title='What trades should be taken : ', options=['LONG', 'SHORT', 'BOTH'])
// Position Management Tools
pos = 0.0
if tradeType == 'BOTH'
pos := long ? 1 : short ? -1 : pos[1]
pos
if tradeType == 'LONG'
pos := long ? 1 : pos[1]
pos
if tradeType == 'SHORT'
pos := short ? -1 : pos[1]
pos
longCond = long and (pos[1] != 1 or na(pos[1]))
shortCond = short and (pos[1] != -1 or na(pos[1]))
plot(ce1_plot, title='Timeframe 1 CE', color=ce1 > 0 ? #008000 : #800000, linewidth=2)
plot(ce2_plot, title='Timeframe 2 CE', color=ce2 > 0 ? color.green : color.red, linewidth=2)
// EXIT FUNCTIONS //
i_sl = input.float(5.0, title='Stop Loss %', minval=0, group='Trades')
sl = i_sl > 0 ? i_sl / 100 : 99999
long_entry = ta.valuewhen(longCond, close, 0)
short_entry = ta.valuewhen(shortCond, close, 0)
// Simple Stop Loss + 2 Take Profits
sl_long = strategy.position_avg_price * (1 - sl)
sl_short = strategy.position_avg_price * (1 + sl)
// Position Adjustment
long_sl = low < sl_long and pos[1] == 1
short_sl = high > sl_short and pos[1] == -1
if long_sl or short_sl
pos := 0
pos
long_exit = sellSignal and pos[1] == 1
short_exit = buySignal and pos[1] == -1
if long_exit or short_exit
pos := 0
pos
tp1percent = input.int(5, title='TP1 %', group='Trades') / 100.0
tp2percent = input.int(10, title='TP2 %', group='Trades') / 100.0
tp3percent = input.int(15, title='TP3 %', group='Trades') / 100.0
tp1amt = input.int(10, title='TP1 Amount %', group='Trades')
tp2amt = input.int(15, title='TP2 Amount %', group='Trades')
tp3amt = input.int(20, title='TP3 Amount %', group='Trades')
// Strategy Backtest Limiting Algorithm
i_startTime = input(defval=timestamp('01 Jun 2021 13:30 +0000'), title='Backtesting Start Time')
i_endTime = input(defval=timestamp('30 Sep 2099 19:30 +0000'), title='Backtesting End Time')
timeCond = true
KeepLastPosition = input(false)
// Make sure we are within the bar range, Set up entries and exit conditions
strategy.entry('long', strategy.long, when=longCond == true and tradeType != 'SHORT' and timeCond)
strategy.entry('short', strategy.short, when=shortCond == true and tradeType != 'LONG' and timeCond)
var float Qty1 = na
var float Qty2 = na
var float Qty3 = na
var float Qty4 = na
if strategy.position_size == 0
equity_q = (50000 + strategy.netprofit) / close
Qty1 := equity_q * tp1amt / 100.0
Qty2 := equity_q * tp2amt / 100.0
Qty3 := equity_q * tp3amt / 100.0
Qty4 := equity_q - Qty1 - Qty2 - Qty3
Qty4
strategy.exit('Exit1', qty=Qty1, stop=sl_long, limit=strategy.position_avg_price * (1 + tp1percent), when=strategy.position_size > 0)
strategy.exit('Exit2', qty=Qty2, stop=sl_long, limit=strategy.position_avg_price * (1 + tp2percent), when=strategy.position_size > 0)
strategy.exit('Exit3', qty=Qty3, stop=sl_long, limit=strategy.position_avg_price * (1 + tp3percent), when=strategy.position_size > 0)
strategy.exit('Exit4', qty=Qty4, stop=sl_long, when=strategy.position_size > 0 and KeepLastPosition == false)
strategy.close('long', when=long_exit, comment='CE Exit')
strategy.exit('Exit1', qty=Qty1, stop=sl_short, limit=strategy.position_avg_price * (1 - tp1percent), when=strategy.position_size < 0)
strategy.exit('Exit2', qty=Qty2, stop=sl_short, limit=strategy.position_avg_price * (1 - tp2percent), when=strategy.position_size < 0)
strategy.exit('Exit3', qty=Qty3, stop=sl_short, limit=strategy.position_avg_price * (1 - tp3percent), when=strategy.position_size < 0)
strategy.exit('Exit4', qty=Qty4, stop=sl_short, when=strategy.position_size < 0 and KeepLastPosition == false)
strategy.close('short', when=short_exit, comment='CE Exit')
plot(strategy.position_size > 0 ? strategy.position_avg_price * (1 + tp1percent) : na, color=color.new(color.green, 0), style=plot.style_linebr)
plot(strategy.position_size > 0 ? strategy.position_avg_price * (1 + tp2percent) : na, color=color.new(color.green, 0), style=plot.style_linebr)
plot(strategy.position_size > 0 ? strategy.position_avg_price * (1 + tp3percent) : na, color=color.new(color.green, 0), style=plot.style_linebr)
plot(strategy.position_size > 0 ? sl_long : na, color=color.new(color.red, 0), style=plot.style_linebr)
plot(strategy.position_size > 0 ? strategy.position_avg_price : na, color=color.new(color.gray, 0), style=plot.style_linebr)
plot(strategy.position_size < 0 ? strategy.position_avg_price * (1 - tp1percent) : na, color=color.new(color.green, 0), style=plot.style_linebr)
plot(strategy.position_size < 0 ? strategy.position_avg_price * (1 - tp2percent) : na, color=color.new(color.green, 0), style=plot.style_linebr)
plot(strategy.position_size < 0 ? strategy.position_avg_price * (1 - tp3percent) : na, color=color.new(color.green, 0), style=plot.style_linebr)
plot(strategy.position_size < 0 ? sl_short : na, color=color.new(color.red, 0), style=plot.style_linebr)
plot(strategy.position_size < 0 ? strategy.position_avg_price : na, color=color.new(color.gray, 0), style=plot.style_linebr)