ٹرینڈ ریورسل ٹریلنگ اسٹاپ حکمت عملی


تخلیق کی تاریخ: 2023-11-14 11:33:50 آخر میں ترمیم کریں: 2023-11-14 11:33:50
کاپی: 0 کلکس کی تعداد: 613
1
پر توجہ دیں
1617
پیروکار

ٹرینڈ ریورسل ٹریلنگ اسٹاپ حکمت عملی

جائزہ

اس حکمت عملی میں رجحان کی واپسی کے اشارے کی بنیاد پر ، رجحان سے باخبر رہنے والے اسٹاپ نقصان کے طریقہ کار کے ساتھ مل کر ، رجحان کے بازار میں رجحان کا پیچھا کرنے ، اور بازار کو ختم کرنے میں نقصانات کو کم کرنے کا اثر حاصل ہوتا ہے۔

حکمت عملی کا اصول

اس حکمت عملی میں ہل کی چلتی اوسط کو رجحانات کا بنیادی اشارے کے طور پر استعمال کیا جاتا ہے۔ جب قیمت ہل اوسط سے تجاوز کرتی ہے تو ، زیادہ کام کریں۔ جب قیمت ہل اوسط سے تجاوز کرتی ہے تو ، اس سے زیادہ کام کریں۔

پوزیشن کھولنے کے بعد ، اگر قیمت الٹ جاتی ہے ، یعنی ہل میڈین میں فورک ہیڈ کی تصدیق ہوتی ہے تو ، موجودہ پوزیشن کو بند کرنے کے لئے رجحان میں تبدیلی کی منطق پر عملدرآمد کیا جاتا ہے۔

اس حکمت عملی میں ٹرینڈ ٹریکنگ اسٹاپ کا طریقہ کار بھی متعارف کرایا گیا ہے۔ پوزیشن کھولنے کے بعد ، اے ٹی آر کے مطابق متحرک اسٹاپ کی قیمت کا حساب لگایا جائے گا۔ قیمتوں کے ساتھ ساتھ ، اسٹاپ لائن بھی متحرک طور پر ایڈجسٹ ہوتی ہے ، جس سے منافع بخش ٹریکنگ اسٹاپ حاصل ہوتا ہے۔

اسٹریٹجک فوائد

  • ہل اوسط کا استعمال کرتے ہوئے رجحان کا رخ موڑنے کے لئے استعمال کیا جاتا ہے ، ہل اوسط ایک بریک سگنل کے لئے زیادہ حساس ہے
  • میک گینلی اوسط کے ساتھ ٹرینڈ کی تصدیق ، کچھ جعلی توڑ کو فلٹر کرنے کے لئے
  • متحرک ٹریکنگ اسٹاپ میکانیزم کا استعمال کرتے ہوئے ، مارکیٹ میں اتار چڑھاؤ کے مطابق اسٹاپ نقصان کی حد کو ایڈجسٹ کریں ، تاکہ نقصان کو مؤثر طریقے سے کنٹرول کیا جاسکے
  • Hull Average کی تصدیق کریں اور نقصانات کو مزید بڑھانے سے بچنے کے لئے بروقت ردعمل کا مظاہرہ کریں
  • مختلف پیرامیٹرز کے امتزاج کو آسانی سے تبدیل کرنے کے لئے ٹیسٹ کریں ، بہترین پیرامیٹرز تلاش کریں

خطرات اور حل

  • زلزلے کی صورت حال میں ممکنہ طور پر اسٹاپ نقصان کا سبب بنتا ہے

    • اسٹاپ نقصان کی حد کو مناسب طریقے سے بڑھایا جاسکتا ہے تاکہ اسٹاپ نقصان کا بخارات بڑھایا جاسکے
  • اسٹریٹجک حالات میں، سٹاپ نقصانات کو ٹریک کرنے سے قیمتوں میں تبدیلیوں کو ٹریک نہیں کیا جا سکتا

    • ہموار کرنے کا دورانیہ کم کریں تاکہ اسٹاپ نقصانات قیمتوں پر تیزی سے عمل پیرا ہوں
  • جعلی توڑ پھوڑ سے غیر ضروری نقصانات کا سامنا کرنا پڑ سکتا ہے

    • جعلی دراندازی سے بچنے کے لئے تصدیق کے لئے دیگر اشارے شامل کریں
  • غلط پیرامیٹرز کی وجہ سے حکمت عملی کی کارکردگی خراب ہوسکتی ہے

    • بہترین پیرامیٹرز کو تلاش کرنے کے لئے مارکیٹ کے مختلف ادوار کے ذریعے واپس جا سکتے ہیں

آپٹمائزیشن

  • دیگر اشارے شامل کریں جو تصدیق کے ساتھ مل کر سگنل کو بہتر بنائیں ، جیسے K- لائن کی شکل ، برن بینڈ ، RSI وغیرہ۔

  • مختلف اقسام اور دورانیہ کے پیرامیٹرز کے مطابق اصلاح کریں اور بہترین پیرامیٹرز کا مجموعہ تلاش کریں

  • پیرامیٹرز کو بہتر بنانے کے ل machine مشین لرننگ جیسے طریقوں کی کوشش کی جاسکتی ہے

  • نقصانات کو روکنے کے لئے الگورتھم کو بہتر بنائیں ، نقصانات کو روکنے کی ضمانت دیتے ہوئے ، غیر ضروری نقصانات کو کم سے کم کریں

  • پیسے کے انتظام کے ساتھ مل کر پوزیشن مینجمنٹ کی حکمت عملی کو بہتر بنانا

  • آٹو اسٹاپ کے بارے میں غور کریں

خلاصہ کریں۔

یہ حکمت عملی مجموعی طور پر ایک زیادہ مستحکم رجحان کی پیروی کرنے والی حکمت عملی ہے۔ اس حکمت عملی میں متحرک اسٹاپ نقصان کا طریقہ کار استعمال کیا جاتا ہے ، جس سے مارکیٹ میں اتار چڑھاؤ کے مطابق اسٹاپ نقصان کی حد کو ایڈجسٹ کیا جاسکتا ہے ، جس سے اسٹاپ نقصان کی پوزیشن کا امکان مؤثر طریقے سے کم کیا جاسکتا ہے۔ اس کے ساتھ ہی ، ہل اوسط اور رجحان میں تبدیلی کے منطق کی تعارف ، رجحان کے الٹ جانے پر تیزی سے ردعمل ظاہر کرسکتا ہے۔ تاہم ، اس حکمت عملی میں کچھ خطرات بھی موجود ہیں ، جیسے زلزلے کے حالات میں اسٹاپ نقصان کا خطرہ ، جھوٹے دھچکے کا خطرہ ، وغیرہ۔ مزید بہتر اشارے کے پیرامیٹرز ، اسٹاپ نقصان کے طریقہ کار ، پوزیشن مینجمنٹ وغیرہ کے ذریعہ ، اس حکمت عملی کو مختلف مارکیٹوں میں زیادہ مستحکم کارکردگی حاصل کرنے کے قابل بنایا جاسکتا ہے۔

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2023-10-14 00:00:00
end: 2023-11-13 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © Milleman
//@version=4
strategy("MilleMachine", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital=10000, commission_type=strategy.commission.percent, commission_value=0.06)


// Additional settings
Mode = input(title="Mode", defval="LongShort", options=["LongShort", "OnlyLong", "OnlyShort","Indicator Mode"])
UseTP = false                               //input(false, title="Use Take Profit?")
QuickSwitch = true                          //input(true, title="Quickswitch")
UseTC = true                                //input(true, title="Use Trendchange?")

// Risk management settings
//Spacer2 = input(false, title="======= Risk management settings =======")
Risk = input(1.0, title="% Risk",minval=0)/100
RRR = 2                                     //input(2,title="Risk Reward Ratio",step=0.1,minval=0,maxval=20)
SL_Mode = false                             // input(true, title="ON = Fixed SL / OFF = Dynamic SL (ATR)")
SL_Fix = 3                                  //input(3,title="StopLoss %",step=0.25, minval=0)/100
ATR = atr(14)                               //input(14,title="Periode ATR"))
Mul = input(2,title="ATR Multiplier",step=0.1)
xATR = ATR * Mul
SL = SL_Mode ? SL_Fix : (1 - close/(close+xATR))

// INDICATORS  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Ind(type, src, len) =>
    float result = 0
    if type=="McGinley"
        result := na(result[1]) ? ema(src, len) : result[1] + (src - result[1]) / (len * pow(src/result[1], 4))
    if type=="HMA"
        result := wma(2*wma(src, len/2)-wma(src, len), round(sqrt(len)))
    if type=="EHMA"
        result := ema(2*ema(src, len/2)-ema(src, len), round(sqrt(len)))
    if type=="THMA"
        lend = len/2
        result := wma(wma(src, lend/3)*3-wma(src, lend/2)-wma(src,lend), lend)
    if type=="SMA" // Simple
        result := sma(src, len)
    if type=="EMA" // Exponential
        result := ema(src, len)
    if type=="DEMA" // Double Exponential
        e = ema(src, len)
        result := 2 * e - ema(e, len)
    if type=="TEMA" // Triple Exponential
        e = ema(src, len)
        result := 3 * (e - ema(e, len)) + ema(ema(e, len), len)
    if type=="WMA" // Weighted
        result := wma(src, len)
    if type=="VWMA" // Volume Weighted
        result := vwma(src, len) 
    if type=="SMMA" // Smoothed
        w = wma(src, len)
        result := (w[1] * (len - 1) + src) / len
    if type == "RMA"
        result := rma(src, len)
    if type=="LSMA" // Least Squares
        result := linreg(src, len, 0)
    if type=="ALMA" // Arnaud Legoux
        result := alma(src, len, 0.85, 6)
    if type=="Kijun" //Kijun-sen
        kijun = avg(lowest(len), highest(len))
        result :=kijun
    if type=="WWSA" // Welles Wilder Smoothed Moving Average
        result := nz(result[1]) + (close -nz(result[1]))/len
    result

// Baseline : Switch from Long to Short and vice versa
BL_Act = input(true, title="====== Activate Baseline - Switch L/S ======")
BL_type = input(title="Baseline Type", defval="McGinley", options=["McGinley","HMA","EHMA","THMA","SMA","EMA","DEMA","TEMA","WMA","VWMA","SMMA","RMA","LSMA","ALMA","Kijun","WWSA"])
BL_src = input(close, title="BL source")
BL_len = input(50, title="BL length", minval=1)
BL = Ind(BL_type,BL_src, BL_len)

// Confirmation indicator
C1_Act = input(false, title="===== Activate Confirmation indicator =====")
C1_type = input(title="C1 Entry indicator", defval="SMA", options=["McGinley","HMA","EHMA","THMA","SMA","EMA","DEMA","TEMA","WMA","VWMA","SMMA","RMA","LSMA","ALMA","Kijun","WWSA"])
C1_src = input(close, title="Source")
C1_len = input(5,title="Length", minval=1)
C1 = Ind(C1_type,C1_src,C1_len)

// Entry indicator : Hull Moving Average
Spacer5 = input(true, title="====== ENTRY indicator =======")
EI_type = input(title="EI Entry indicator", defval="HMA", options=["McGinley","HMA","EHMA","THMA","SMA","EMA","DEMA","TEMA","WMA","VWMA","SMMA","RMA","LSMA","ALMA","Kijun","WWSA"])
EI_src = input(close, title="Source")
EI_Len = input(46,title="Length", minval=1)
EI = Ind(EI_type,EI_src,EI_Len)

// Trail stop settings
TrailActivation = input(true, title="===== Activate Trailing Stop =====")
TS_type = input(title="TS Traling Stop Type", defval="EMA", options=["McGinley","HMA","EHMA","THMA","SMA","EMA","DEMA","TEMA","WMA","VWMA","SMMA","RMA","LSMA","ALMA","Kijun","WWSA"])
TrailSLScaling = 1 //input(100, title="SL Scaling", minval=0, step=5)/100
TrailingSourceLong = Ind(TS_type,low,input(5,"Smoothing Trail Long EMA", minval=1))
TrailingSourceShort = Ind(TS_type,high,input(2,"Smoothing Trail Short EMA", minval=1))

//VARIABLES MANAGEMENT
TriggerPrice = 0.0, TriggerPrice := TriggerPrice[1]
TriggerSL = 0.0, TriggerSL := TriggerSL[1]
SLPrice = 0.0, SLPrice := SLPrice[1], TPPrice = 0.0, TPPrice := TPPrice[1]
isLong = false, isLong := isLong[1], isShort = false, isShort := isShort[1]

//LOGIC
GoLong = crossover(EI,EI[1]) and (strategy.position_size == 0.0 and QuickSwitch) and (not BL_Act or BL/BL[1] > 1) and (not C1_Act or C1>C1[1]) and (Mode == "LongShort" or Mode == "OnlyLong")
GoShort = crossunder(EI,EI[1]) and (strategy.position_size == 0.0 and QuickSwitch) and (not BL_Act or BL/BL[1] < 1) and (not C1_Act or C1<C1[1]) and (Mode == "LongShort" or Mode == "OnlyShort")
ExitLong = isLong and crossunder(EI,EI[1]) and UseTC
ExitShort = isShort and crossover(EI,EI[1]) and UseTC

//FRAMEWORK
//Reset Long-Short memory
if isLong and strategy.position_size == 0.0
    isLong := false
if isShort and strategy.position_size == 0.0
    isShort := false
//Long
if GoLong
    isLong := true, TriggerPrice := close, TriggerSL := SL
    TPPrice := UseTP? TriggerPrice * (1 + (TriggerSL * RRR)) : na
    SLPrice := TriggerPrice * (1-TriggerSL)
    Entry_Contracts = strategy.equity * Risk / ((TriggerPrice-SLPrice)/TriggerPrice) / TriggerPrice
    strategy.entry("Long", strategy.long, comment=tostring(round((TriggerSL/TriggerPrice)*1000)), qty=Entry_Contracts)
    strategy.exit("TPSL","Long", limit=TPPrice, stop=SLPrice)
if isLong
    NewValSL = TrailingSourceLong * (1 - (SL*TrailSLScaling))
    if TrailActivation and NewValSL > SLPrice
        SLPrice := NewValSL
    strategy.exit("TPSL","Long", limit=TPPrice, stop=SLPrice)
if ExitLong
    strategy.close_all(comment="TrendChange")
    isLong := false

//Short
if GoShort
    isShort := true, TriggerPrice := close, TriggerSL := SL
    TPPrice := UseTP? TriggerPrice * (1 - (TriggerSL * RRR)) : na
    SLPrice := TriggerPrice * (1 + TriggerSL)
    Entry_Contracts = strategy.equity * Risk / ((SLPrice-TriggerPrice)/TriggerPrice) / TriggerPrice
    strategy.entry("Short", strategy.short, comment=tostring(round((TriggerSL/TriggerPrice)*1000)), qty=Entry_Contracts)
    strategy.exit("TPSL","Short", limit=TPPrice, stop=SLPrice)
if isShort
    NewValSL = TrailingSourceShort * (1 + (SL*TrailSLScaling))
    if TrailActivation and NewValSL < SLPrice
        SLPrice := NewValSL
    strategy.exit("TPSL","Short", limit=TPPrice, stop=SLPrice)
if ExitShort
    strategy.close_all(comment="TrendChange")
    isShort := false

//VISUALISATION
plot(BL_Act?BL:na, color=color.blue,title="Baseline")
plot(C1_Act?C1:na, color=color.yellow,title="confirmation Indicator")
EIColor = EI>EI[1] ? color.green : color.red
Fill_EI = plot(EI, color=EIColor, linewidth=1, transp=40, title="Entry Indicator EI")
Fill_EID = plot(EI[1], color=EIColor, linewidth=1, transp=40, title="Entry Indicator EID")
fill(Fill_EI,Fill_EID, title="EI_Fill", color=EIColor,transp=50)

plot(strategy.position_size != 0.0 and (isLong or isShort) ? TriggerPrice : na, title="TriggerPrice", color=color.yellow, style=plot.style_linebr)
plot(strategy.position_size != 0.0 and (isLong or isShort) ? TPPrice : na, title="TakeProfit", color=color.green, style=plot.style_linebr)
plot(strategy.position_size != 0.0 and (isLong or isShort) ? SLPrice : na, title="StopLoss", color=color.red, style=plot.style_linebr)
bgcolor(isLong[1] and cross(low,SLPrice) and low[1] > SLPrice and TriggerPrice>SLPrice ? color.yellow : na, transp=75, title="SL Long")
bgcolor(isShort[1] and cross(high,SLPrice) and high[1] < SLPrice and TriggerPrice<SLPrice ? color.yellow : na, transp=75, title="SL Short")