
اس حکمت عملی میں ایک متحرک اوسط اشارے اور ایک سپر ٹرینڈ اشارے کا امتزاج کیا گیا ہے ، جس سے ایک رجحان پر عمل پیرا حکمت عملی حاصل کی جاسکتی ہے۔ حکمت عملی نے متحرک اوسط کی رجحان سازی کی صلاحیت اور سپر ٹرینڈ کی روک تھام کی صلاحیت کا بھرپور استعمال کیا ہے ، جس سے رجحانات کو مؤثر طریقے سے ٹریک کیا جاسکتا ہے ، جبکہ خطرے کو کنٹرول کیا جاسکتا ہے۔
یہ حکمت عملی خرید و فروخت کے سگنل کا تعین کرنے کے لئے دو FRAMA اوسط لائنوں کا استعمال کرتی ہے اور سپر ٹرینڈ اشارے کے ساتھ مل کر فلٹرنگ کرتی ہے۔
خاص طور پر ، جب تیز لائن پر سست لائن کو عبور کرتے ہیں تو خریدنے کا اشارہ پیدا ہوتا ہے ، اور جب تیز لائن کے نیچے سست لائن کو عبور کرتے ہیں تو فروخت کا اشارہ پیدا ہوتا ہے۔ جعلی ٹوٹنے سے بچنے کے لئے ، حکمت عملی میں سپر ٹرینڈ اشارے فلٹرنگ کی شرائط شامل کی گئیں ، اور صرف اس وقت تجارت کی جاتی ہے جب سپر ٹرینڈ اشارے کی سمت ہوتی ہے۔
پوزیشن مینجمنٹ میں ، حکمت عملی سپر ٹرینڈ اشارے کی تبدیلی کو اسٹاپ نقصان سے باہر نکلنے کے سگنل کے طور پر استعمال کرتی ہے۔ جب سپر ٹرینڈ اشارے میں ردوبدل ہوتا ہے تو ، اسٹاپ نقصان سے باہر نکلیں۔
اس کے علاوہ ، حکمت عملی میں اختیاری ٹریکنگ اسٹاپ نقصان کی خصوصیت بھی موجود ہے۔ ایک بار جب کچھ منافع ہوتا ہے تو ، منافع کو لاک کرنے کے لئے ٹریکنگ اسٹاپ کو آن کیا جاسکتا ہے۔
ان خطرات کو کم کرنے کے لئے، آپ کو منتقل اوسط پیرامیٹرز کو ایڈجسٹ کر سکتے ہیں، سپر ٹرینڈ اشارے کی ترتیب کو بہتر بنانے کے، اور معقول طور پر ٹریکنگ سٹاپ نقصان کا استعمال کرتے ہوئے.
اس حکمت عملی کو مندرجہ ذیل پہلوؤں سے بہتر بنایا جاسکتا ہے:
ہموار اثر اور حساسیت کا بہترین توازن تلاش کرنے کے لئے مختلف دورانیہ پیرامیٹرز کے مجموعے کی جانچ کی جاسکتی ہے۔
مختلف اے ٹی آر سائیکل اور ضرب پیرامیٹرز کی جانچ کی جاسکتی ہے ، جس سے اسٹاپ نقصان کو بہتر بنایا جاسکتا ہے۔
مزید فلٹرنگ سگنل کے لئے ، تجارتی چینل کے اشارے ، اتار چڑھاؤ کے اشارے وغیرہ کو شامل کرنے کی جانچ کی جاسکتی ہے۔
منافع اور خطرے کے کنٹرول کو زیادہ سے زیادہ کرنے کے لئے بہترین پیرامیٹرز کو تلاش کرنے کے لئے مختلف ٹریکنگ سٹاپ نقصان کی شدت کی جانچ کی جا سکتی ہے.
جنرل اسٹاپ ، شاک اسٹاپ ، اور متحرک اسٹاپ جیسے حکمت عملیوں کے ساتھ مل کر ٹیسٹ کیا جاسکتا ہے۔
یہ حکمت عملی ایک مکمل رجحان کی پیروی کی حکمت عملی بناتی ہے جس میں ٹریکنگ اسٹاپ نقصان کی خصوصیات ہوتی ہیں۔ پیرامیٹرز کی اصلاح اور خطرے کے انتظام کے ذریعہ حکمت عملی کی استحکام اور منافع کو مزید بڑھا دیا جاسکتا ہے۔ حکمت عملی کو ایک خاص بنیاد رکھنے والے کوانٹم ٹریڈر کے استعمال کے لئے موزوں ہے۔
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-13 00:00:00
period: 30m
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/
// © 03.freeman
//@version=4
// strategy("FRAMA strategy", overlay=true,precision=6, initial_capital=1000,calc_on_every_tick=true, pyramiding=0, default_qty_type=strategy.fixed, default_qty_value=10000, currency=currency.EUR)
ma_src = input(title="MA FRAMA Source", type=input.source, defval=close)
ma_frama_len = input(title="MA FRAMA Length", type=input.integer, defval=12)
res = input(title="Resolution", type=input.resolution, defval="1W")
frama_FC = input(defval=1,minval=1, title="* Fractal Adjusted (FRAMA) Only - FC")
frama_SC = input(defval=200,minval=1, title="* Fractal Adjusted (FRAMA) Only - SC")
High = security(syminfo.tickerid, res, high)
Low = security(syminfo.tickerid, res, low)
source = security(syminfo.tickerid, res, ma_src)
enterRule = input(false,title = "Use supertrend for enter")
exitRule = input(false,title = "Use supertrend for exit")
ma(src, len) =>
float result = 0
int len1 = len/2
e = 2.7182818284590452353602874713527
w = log(2/(frama_SC+1)) / log(e) // Natural logarithm (ln(2/(SC+1))) workaround
H1 = highest(High,len1)
L1 = lowest(Low,len1)
N1 = (H1-L1)/len1
H2_ = highest(High,len1)
H2 = H2_[len1]
L2_ = lowest(Low,len1)
L2 = L2_[len1]
N2 = (H2-L2)/len1
H3 = highest(High,len)
L3 = lowest(Low,len)
N3 = (H3-L3)/len
dimen1 = (log(N1+N2)-log(N3))/log(2)
dimen = iff(N1>0 and N2>0 and N3>0,dimen1,nz(dimen1[1]))
alpha1 = exp(w*(dimen-1))
oldalpha = alpha1>1?1:(alpha1<0.01?0.01:alpha1)
oldN = (2-oldalpha)/oldalpha
N = (((frama_SC-frama_FC)*(oldN-1))/(frama_SC-1))+frama_FC
alpha_ = 2/(N+1)
alpha = alpha_<2/(frama_SC+1)?2/(frama_SC+1):(alpha_>1?1:alpha_)
frama = 0.0
frama :=(1-alpha)*nz(frama[1]) + alpha*src
result := frama
result
frama = ma(sma(source,1),ma_frama_len)
signal = ma(frama,ma_frama_len)
plot(frama, color=color.red)
plot(signal, color=color.green)
longCondition = crossover(frama,signal)
shortCondition = crossunder(frama,signal)
Factor=input(3, minval=1,maxval = 100)
Pd=input(7, minval=1,maxval = 100)
Up=hl2-(Factor*atr(Pd))
Dn=hl2+(Factor*atr(Pd))
TrendUp = 0.0
TrendDown = 0.0
Trend = 0.0
Tsl = 0.0
TrendUp :=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown :=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn
Trend := close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
Tsl := Trend==1? TrendUp: TrendDown
linecolor = Trend == 1 ? color.green : color.red
//plot(Tsl, color = linecolor , style = plot.style_line , linewidth = 2,title = "SuperTrend")
plotshape(cross(close,Tsl) and close>Tsl , "Up Arrow", shape.triangleup,location.belowbar,color.green,0,0)
plotshape(cross(Tsl,close) and close<Tsl , "Down Arrow", shape.triangledown , location.abovebar, color.red,0,0)
plotarrow(Trend == 1 and Trend[1] == -1 ? Trend : na, title="Up Entry Arrow", colorup=color.lime, maxheight=60, minheight=50, transp=0)
plotarrow(Trend == -1 and Trend[1] == 1 ? Trend : na, title="Down Entry Arrow", colordown=color.red, maxheight=60, minheight=50, transp=0)
// Strategy: (Thanks to JayRogers)
// === STRATEGY RELATED INPUTS ===
//tradeInvert = input(defval = false, title = "Invert Trade Direction?")
// the risk management inputs
inpTakeProfit = input(defval = 0, title = "Take Profit Points", minval = 0)
inpStopLoss = input(defval = 0, title = "Stop Loss Points", minval = 0)
inpTrailStop = input(defval = 0, title = "Trailing Stop Loss Points", minval = 0)
inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset Points", minval = 0)
// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na
useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na
// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => enterRule? (longCondition and Trend ==1):longCondition // functions can be used to wrap up and work out complex conditions
exitLong() => exitRule and Trend == -1
strategy.entry(id = "Buy", long = true, when = enterLong() ) // use function or simple condition to decide when to get in
strategy.close(id = "Buy", when = exitLong() ) // ...and when to get out
// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => enterRule? (shortCondition and Trend ==-1):shortCondition
exitShort() => exitRule and Trend == 1
strategy.entry(id = "Sell", long = false, when = enterShort())
strategy.close(id = "Sell", when = exitShort() )
// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Buy", from_entry = "Buy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Sell", from_entry = "Sell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
// === Backtesting Dates === thanks to Trost
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2020, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testStopHour = input(23, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = true
// === /END
if not isPeriod
strategy.cancel_all()
strategy.close_all()