دوہری ٹائم فریموں اور مومینٹم انڈیکیٹرز پر مبنی انکولی اسٹاپ پرافٹ اور اسٹاپ لاس اسٹریٹجی


تخلیق کی تاریخ: 2023-11-23 17:57:52 آخر میں ترمیم کریں: 2023-11-23 17:57:52
کاپی: 0 کلکس کی تعداد: 795
1
پر توجہ دیں
1617
پیروکار

دوہری ٹائم فریموں اور مومینٹم انڈیکیٹرز پر مبنی انکولی اسٹاپ پرافٹ اور اسٹاپ لاس اسٹریٹجی

جائزہ

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

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

  1. مین ٹائم فریم رجحانات کا تعین کرنے کے لئے لکیری رجعت Sqqueeze Momentum ((SQM) کا استعمال کرتا ہے ، اور ایس کیو ایم اشارے کے EMA مجموعہ کو فلٹر کرنے کے لئے معاون ٹائم فریم استعمال کرتا ہے۔

  2. جب ماسٹر گراف ایس کیو ایم اوپر کی طرف ٹوٹ جاتا ہے ، اور معاون گراف ایس کیو ایم بھی اوپر کی طرف ہوتا ہے تو ، زیادہ کام کریں۔ جب ماسٹر گراف ایس کیو ایم نیچے کی طرف ٹوٹ جاتا ہے ، اور معاون گراف ایس کیو ایم بھی نیچے کی طرف ہوتا ہے تو ، خالی کریں۔

  3. داخل ہونے کے بعد ، ان پٹ پیرامیٹرز کے مطابق ابتدائی اسٹاپ اور اسٹاپ نقصان کی جگہ طے کریں۔ جب قیمت اسٹاپ تک پہنچ جاتی ہے تو ، اسٹاپ اور اسٹاپ نقصان کی جگہ کو اپ ڈیٹ کریں۔ اس کا طریقہ یہ ہے کہ: اسٹاپ اسٹاپ سیٹ کے تناسب سے بڑھتا ہے ، اسٹاپ نقصان کی جگہ تناسب سے کم ہوجاتی ہے ، تدریجی اسٹاپ کو حاصل کریں۔

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

  1. ڈبل ٹائم فریم غلط سگنل کو فلٹر کرتا ہے تاکہ سگنل کی درستگی کو یقینی بنایا جا سکے۔

  2. ایس کیو ایم اشارے رجحانات کی سمت کا تعین کرتے ہیں ، مارکیٹ کے شور سے بچنے کے لئے۔

  3. خود کار طریقے سے اسٹاپ نقصان کا بندوبست ، منافع کو زیادہ سے زیادہ لاک کرنا ، خطرے کو مؤثر طریقے سے کنٹرول کرنا۔

خطرے کا تجزیہ

  1. ایس کیو ایم اشارے کے پیرامیٹرز کو غلط ترتیب دیا گیا ہے ، جس سے رجحان کی تبدیلی کا نقطہ نظر ضائع ہوسکتا ہے ، جس سے نقصان ہوتا ہے۔

  2. معاون چارٹ ٹائم فریم کا انتخاب غلط ہے ، شور کو مؤثر طریقے سے فلٹر نہیں کیا جاسکتا ہے ، اور اس سے غلط لین دین ہوتا ہے۔

  3. اسٹاپ نقصان کی حد بہت زیادہ ہے ، اور ایک ہی نقصان بہت زیادہ ہوسکتا ہے۔

اصلاح کی سمت

  1. ایس کیو ایم کے اشارے کے پیرامیٹرز کو مختلف مارکیٹوں کے مطابق ایڈجسٹ کرنے کی ضرورت ہے تاکہ اس کی حساسیت کو یقینی بنایا جاسکے۔

  2. معاون چارٹ ٹائم فریم ورک کو مختلف سائیکلوں کی جانچ پڑتال کرنے کی بھی ضرورت ہے تاکہ یہ معلوم کیا جاسکے کہ کون سا سائیکل فلٹرنگ کا بہترین اثر ہے۔

  3. اسٹاپ نقصان کی حد کو فکسڈ کی بجائے اتار چڑھاؤ کی حد مقرر کی جاسکتی ہے ، جس سے مارکیٹ میں اتار چڑھاؤ کی حد کے مطابق ایڈجسٹ کیا جاسکتا ہے۔

خلاصہ کریں۔

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

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

//@version=4
strategy("SQZ Multiframe Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
fast_ema_len = input(11, minval=5, title="Fast EMA")
slow_ema_len = input(34, minval=20, title="Slow EMA")
sqm_lengthKC = input(20, title="SQM KC Length")
kauf_period = input(20, title="Kauf Period")
kauf_mult = input(2,title="Kauf Mult factor")
min_profit_sl = input(5.0, minval=1, maxval=100, title="Min profit to start moving SL [%]")
longest_sl = input(10, minval=1, maxval=100, title="Maximum possible of SL [%]")
sl_step = input(0.5, minval=0.0, maxval=1.0, title="Take profit factor")
// ADMF
CMF_length = input(11, minval=1, title="CMF length") // EMA27 = SMMA/RMA14 ~ lunar month
show_plots = input(true, title="Show plots")

lower_resolution = timeframe.period=='1'?'5':timeframe.period=='5'?'15':timeframe.period=='15'?'30':timeframe.period=='30'?'60':timeframe.period=='60'?'240':timeframe.period=='240'?'D':timeframe.period=='D'?'W':'M'
higher_resolution = timeframe.period=='5'?'1':timeframe.period=='15'?'5':timeframe.period=='30'?'15':timeframe.period=='60'?'30':timeframe.period=='240'?'60':timeframe.period=='D'?'240':timeframe.period=='W'?'D':'W'

// Calculate Squeeze Momentum
sqm_val = linreg(close - avg(avg(highest(high, sqm_lengthKC), lowest(low, sqm_lengthKC)),sma(close,sqm_lengthKC)), sqm_lengthKC,0)
sqm_val_high = security(syminfo.tickerid, higher_resolution, linreg(close - avg(avg(highest(high, sqm_lengthKC), lowest(low, sqm_lengthKC)),sma(close,sqm_lengthKC)), sqm_lengthKC,0), lookahead=barmerge.lookahead_on)
sqm_val_low = security(syminfo.tickerid, lower_resolution, linreg(close - avg(avg(highest(high, sqm_lengthKC), lowest(low, sqm_lengthKC)),sma(close,sqm_lengthKC)), sqm_lengthKC,0), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)

// Emas
high_close = security(syminfo.tickerid, higher_resolution, close, lookahead=barmerge.lookahead_on)
high_fast_ema = security(syminfo.tickerid, higher_resolution, ema(close, fast_ema_len), lookahead=barmerge.lookahead_on)
high_slow_ema = security(syminfo.tickerid, higher_resolution, ema(close, slow_ema_len), lookahead=barmerge.lookahead_on)
//low_fast_ema = security(syminfo.tickerid, lower_resolution, ema(close, fast_ema_len), lookahead=barmerge.lookahead_on)
//low_slow_ema = security(syminfo.tickerid, lower_resolution, ema(close, slow_ema_len), lookahead=barmerge.lookahead_on)

// CMF 
ad = close==high and close==low or high==low ? 0 : ((2*close-low-high)/(high-low))*volume
money_flow = sum(ad, CMF_length) / sum(volume, CMF_length)


// Entry conditions
low_condition_long  = (sqm_val_low > sqm_val_low[1])
low_condition_short = (sqm_val_low < sqm_val_low[1])
money_flow_min = (money_flow[4] > money_flow[3]) and (money_flow[3] > money_flow[2]) and (money_flow[2] < money_flow[1])  and (money_flow[1] < money_flow)
money_flow_max = (money_flow[4] < money_flow[3]) and (money_flow[3] < money_flow[2]) and (money_flow[2] > money_flow[1])  and (money_flow[1] > money_flow)
condition_long = ((sqm_val > sqm_val[1]))  and (money_flow_min or money_flow_min[1] or money_flow_min[2] or money_flow_min[3]) and lowest(sqm_val, 5) < 0
condition_short = ((sqm_val < sqm_val[1])) and (money_flow_max or money_flow_max[1] or money_flow_max[2] or money_flow_max[3]) and highest(sqm_val, 5) > 0
high_condition_long =  true//high_close > high_fast_ema and high_close > high_slow_ema //(high_fast_ema > high_slow_ema) //and (sqm_val_low > sqm_val_low[1])
high_condition_short = true//high_close < high_fast_ema and high_close < high_slow_ema//(high_fast_ema < high_slow_ema) //and (sqm_val_low < sqm_val_low[1])
enter_long = low_condition_long and condition_long and high_condition_long
enter_short = low_condition_short and condition_short and high_condition_short

// Stop conditions
var current_target_price = 0.0
var current_sl_price = 0.0 // Price limit to take profit
var current_target_per = 0.0
var current_profit_per = 0.0

set_targets(isLong, min_profit, current_target_per, current_profit_per) =>
    target = 0.0
    sl = 0.0
    if isLong
        target := close * (1.0 + current_target_per)
        sl := close * (1.0 - (longest_sl/100.0)) // Longest SL
    else
        target := close * (1.0 - current_target_per)
        sl := close * (1.0 + (longest_sl/100.0)) // Longest SL
    [target, sl]

target_reached(isLong, min_profit, current_target_per, current_profit_per) =>
    target = 0.0
    sl = 0.0
    profit_per = 0.0
    target_per = 0.0
    if current_profit_per == 0
        profit_per := (min_profit*sl_step) / 100.0
    else
        profit_per := current_profit_per +  ((min_profit*sl_step) / 100.0)
    target_per := current_target_per + (min_profit / 100.0) 
    if isLong
        target := strategy.position_avg_price * (1.0 + target_per)
        sl := strategy.position_avg_price * (1.0 + profit_per)
    else
        target := strategy.position_avg_price * (1.0 - target_per)
        sl := strategy.position_avg_price * (1.0 - profit_per)
    [target, sl, profit_per, target_per]

hl_diff = sma(high - low, kauf_period)
stop_condition_long = 0.0
new_stop_condition_long = low - (hl_diff * kauf_mult)
if (strategy.position_size > 0) 
    if (close > current_target_price)
        [target, sl, profit_per, target_per] = target_reached(true, min_profit_sl, current_target_per, current_profit_per)
        current_target_price := target
        current_sl_price := sl
        current_profit_per := profit_per
        current_target_per := target_per
        
        
    stop_condition_long := max(stop_condition_long[1], current_sl_price)
else
    stop_condition_long := new_stop_condition_long
stop_condition_short = 99999999.9
new_stop_condition_short = high + (hl_diff * kauf_mult)
if (strategy.position_size < 0) 
    if (close < current_target_price)
        [target, sl, profit_per, target_per] = target_reached(false, min_profit_sl, current_target_per, current_profit_per)
        current_target_price := target
        current_sl_price := sl
        current_profit_per := profit_per
        current_target_per := target_per
    stop_condition_short := min(stop_condition_short[1], current_sl_price)
else
    stop_condition_short := new_stop_condition_short
    

// Submit entry orders
if (enter_long and (strategy.position_size <= 0))
    if (strategy.position_size < 0)
        strategy.close(id="SHORT")
    current_target_per := (min_profit_sl / 100.0)
    current_profit_per := 0.0
    [target, sl] = set_targets(true, min_profit_sl, current_target_per, current_profit_per)
    current_target_price := target
    current_sl_price := sl
    strategy.entry(id="LONG", long=true)
    // if show_plots
    //     label.new(bar_index, high, text=tostring("LONG\nSL: ") + tostring(stop_condition_long), style=label.style_labeldown, color=color.green)

if (enter_short and (strategy.position_size >= 0))
    if (strategy.position_size > 0)
        strategy.close(id="LONG")
    current_target_per := (min_profit_sl / 100.0)
    current_profit_per := 0.0
    [target, sl] = set_targets(false, min_profit_sl, current_target_per, current_profit_per)
    current_target_price := target
    current_sl_price := sl
    strategy.entry(id="SHORT", long=false)
    // if show_plots
        // label.new(bar_index, high, text=tostring("SHORT\nSL: ") + tostring(stop_condition_short), style=label.style_labeldown, color=color.red)
    
if (strategy.position_size > 0)
    strategy.exit(id="EXIT LONG", stop=stop_condition_long)
    
if (strategy.position_size < 0)
    strategy.exit(id="EXIT SHORT", stop=stop_condition_short)
    
// Plot anchor trend
plotshape(low_condition_long, style=shape.triangleup,
                 location=location.abovebar, color=color.green)
plotshape(low_condition_short, style=shape.triangledown,
                 location=location.abovebar, color=color.red)
                 
plotshape(condition_long, style=shape.triangleup,
                 location=location.belowbar, color=color.green)
plotshape(condition_short, style=shape.triangledown,
                 location=location.belowbar, color=color.red)
 
//plotshape((close < profit_target_short) ? profit_target_short : na, style=shape.triangledown,
//                 location=location.belowbar, color=color.yellow)                
plotshape(enter_long, style=shape.triangleup,
                 location=location.bottom, color=color.green)
plotshape(enter_short, style=shape.triangledown,
                 location=location.bottom, color=color.red)
                 
// Plot emas
plot(ema(close, 20), color=color.blue, title="20 EMA")
plot(ema(close, 50), color=color.orange, title="50 EMA")
plot(sma(close, 200), color=color.red, title="MA 200")

// Plot stop loss values for confirmation
plot(series=(strategy.position_size > 0) and show_plots ? stop_condition_long : na,
     color=color.green, style=plot.style_linebr,
     title="Long Stop")
plot(series=(strategy.position_size < 0) and show_plots ? stop_condition_short : na,
     color=color.green, style=plot.style_linebr,
     title="Short Stop")
plot(series=(strategy.position_size < 0) and show_plots ? current_target_price : na,
     color=color.yellow, style=plot.style_linebr,
     title="Short TP")
plot(series=(strategy.position_size > 0) and show_plots ? current_target_price : na,
     color=color.yellow, style=plot.style_linebr,
     title="Long TP")
//plot(series=(strategy.position_size < 0) ? profit_sl_short : na,
//     color=color.gray, style=plot.style_linebr,
//     title="Short Stop")