প্রবণতা বিপরীত গতির সূচক ক্রসওভার ট্র্যাকিং কৌশল

লেখক:চাওঝাং, তারিখ: ২০২৩-১২-২৯ 16:21:12
ট্যাগঃ

img

সারসংক্ষেপ

এই কৌশলটি ম্যাকডি, আরএসআই, এডিএক্স এবং অন্যান্য গতির প্রযুক্তিগত সূচকগুলিকে মূল্য বিপরীত সংকেতগুলি সনাক্ত করতে এবং শক্তিশালী প্রবণতা বিপরীত হলে প্রবেশের বিপরীত কৌশল গ্রহণের জন্য একত্রিত করে। কৌশলটি লাভ এবং নিয়ন্ত্রণ ঝুঁকিতে লক করার জন্য স্টপ লস এবং লাভ গ্রহণ করে।

কৌশল নীতি

এই কৌশলটি প্রথমে মূল্যের প্রবণতা বিচার করার জন্য এমএসিডি সূচকগুলির দ্রুত এবং ধীর চলমান গড় ক্রসওভারগুলিকে একত্রিত করে; তারপরে মিথ্যা ব্রেকআউটগুলি ফিল্টার করতে এবং প্রকৃত মূল্য বিপরীত হওয়ার পরে কেবল ট্রেডিং সিগন্যালগুলি উত্পন্ন হয় তা নিশ্চিত করার জন্য আরএসআই সূচক ব্যবহার করে; অবশেষে দামগুলি প্রবণতার অবস্থায় প্রবেশ করেছে কিনা তা আবার যাচাই করতে এডিএক্স সূচক ব্যবহার করে। উপরের সমস্ত শর্তগুলি একসাথে পূরণ হলেই ট্রেডিং সংকেত উত্পন্ন হয়।

বিশেষ করে, যখন এমএসিডি দ্রুত রেখা ধীর রেখার উপরে অতিক্রম করে, তখন আরএসআই 50 এর বেশি এবং বাড়ছে, এডিএক্স 20 এর বেশি, এটি একটি ক্রয় সংকেত; যখন এমএসিডি দ্রুত রেখা ধীর রেখার নীচে অতিক্রম করে, আরএসআই 50 এর চেয়ে কম এবং হ্রাস পাচ্ছে, এডিএক্স 20 এর বেশি, এটি একটি বিক্রয় সংকেত।

সুবিধা বিশ্লেষণ

এই কৌশলটির সবচেয়ে বড় সুবিধা হ'ল এটি একাধিক সূচককে কার্যকরভাবে ফিল্টার করতে এবং ত্রুটিযুক্ত সংকেতগুলিকে কার্যকরভাবে ফিল্টার করে, সত্যই প্রবণতা বিপরীতের inflection পয়েন্টগুলি লক করে, এইভাবে একটি উচ্চতর জয়ের হার অর্জন করে। উপরন্তু, লাভের মধ্যে স্টপ লস এবং লাভের লক সেট করে এবং ঝুঁকিগুলি নিয়ন্ত্রণ করে, যা অপ্রত্যাশিত ইভেন্টগুলির প্রভাবকে কার্যকরভাবে হেজ করতে পারে।

ঝুঁকি বিশ্লেষণ

এই কৌশলটির সবচেয়ে বড় ঝুঁকি হ'ল প্রবণতা বিপরীত হওয়ার ভুল মূল্যায়ন, যেমন দামের গভীর পুনর্নির্মাণের ফলে ভুল মূল্যায়ন হয়। তদতিরিক্ত, বিপরীতের পরে নতুন প্রবণতার টেকসইতা পর্যাপ্ত মুনাফা অর্জনের জন্য যথেষ্ট নাও হতে পারে।

সমাধানগুলি হ'ল পরামিতিগুলি আরও অনুকূল করা, স্টপ লস মার্জিন সামঞ্জস্য করা বা সংকেত ফিল্টারিংয়ের জন্য আরও সহায়ক সূচক অন্তর্ভুক্ত করা।

অপ্টিমাইজেশান নির্দেশাবলী

এই কৌশল নিম্নলিখিত দিকগুলিতে আরও অপ্টিমাইজ করা যেতে পারেঃ

  1. দামের বিপরীতমুখী মূল্যায়নের নির্ভুলতা বাড়াতে MACD এবং RSI পরামিতিগুলির সমন্বয়কে অনুকূল করা;

  2. আরও সূচক ফিল্টারিং বৃদ্ধি করা, যেমন কেডি, বিওএলএল ইত্যাদি, যাতে সূচকগুলি একে অপরকে অন্তর্ভুক্ত করে;

  3. বিভিন্ন বাজারের অবস্থার উপর নির্ভর করে স্টপ লস মার্জিনকে গতিশীলভাবে সামঞ্জস্য করা।

  4. রিভার্সনের পর প্রকৃত প্রবণতা অনুযায়ী রিয়েল টাইমে মুনাফা গ্রহণের অবস্থান পরিবর্তন করুন।

সংক্ষিপ্তসার

এই কৌশলটি সম্ভাব্য মূল্য বিপরীত সুযোগগুলি সনাক্ত করতে একাধিক গতির সূচককে একত্রিত করে। প্যারামিটার অপ্টিমাইজেশান, আরও সহায়ক সূচক অন্তর্ভুক্ত করা, গতিশীলভাবে স্টপ লস এবং লাভের কৌশলগুলি সামঞ্জস্য করা, কৌশলটির স্থায়িত্ব এবং নির্ভরযোগ্যতা আরও উন্নত করা যেতে পারে যাতে বাজারগুলি সরবরাহ করে এমন বিভিন্ন ট্রেডিং সুযোগগুলি লক করা যায়।


/*backtest
start: 2023-11-28 00:00:00
end: 2023-12-28 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/
// © AHMEDABDELAZIZZIZO

//@version=5
strategy("Ta Strategy", overlay=true )

// inputs
inversestrategy = input.bool(false, title = "Inverse Strategy",tooltip = "This option makes you reverse the strategy so that long signals become where to short  ")
direction = input.string(defval = "Both" , options = ["Both" , "Short" , "Long"] )

leftbars= input(6,title = " Left Bars" , group = "Support and resistance")
rightbars = input(6, title = " Right Bars", group = "Support and resistance")

macdfast = input(12, title = "MACD Fast", group = "MACD")
macdslow = input(26, title = "MACD Slow",group = "MACD")
macdsignal = input(7, "MACD Signal",group = "MACD")

sellqty = input(50, title = "QTY to sell at TP 1")

len = input(14, title="ADX Length" , group = "ADX")


// sup and res
res = fixnan(ta.pivothigh(high,leftbars,rightbars))
sup = fixnan(ta.pivotlow(low , leftbars,rightbars))

// macd
macd =ta.ema(close,macdfast) - ta.ema(close,macdslow)
signal=ta.ema(macd,macdsignal)


//adx
up = ta.change(high)
down = -ta.change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
truerange = ta.rma(ta.tr,len)
plusDI = 100 * ta.rma(plusDM, len) / truerange
minusDI = 100 * ta.rma(minusDM, len) / truerange
dx = 100 * ta.rma(math.abs(plusDI - minusDI) / (plusDI + minusDI), len)
adx = ta.sma(dx, len)

// start deal condition
longcondition =  ta.crossover(macd,signal) and close > res and ta.rsi(close,14) > 50 and plusDI > minusDI and adx > 20 
shortcondition = ta.crossunder(macd,signal) and close < sup and ta.rsi(close,14) < 50 and plusDI < minusDI and adx > 20 

//tp
longtp1   = input.float(6, "Long TP 1", minval = 0.0, step = 0.25, group = "Exit LONG Orders") /100
longtp2   = input.float(12, "Long TP 2", minval = 0.0, step = 0.25, group = "Exit LONG Orders") /100
longsl1 = input.float(3.0, "Long SL",  minval = 0.0, step = 0.25, group = "Exit LONG Orders") /100
longtakeprofit1 = (strategy.position_avg_price * (1 + longtp1)) 
longstoploss1 = (strategy.position_avg_price * (1 - longsl1)) 
longtakeprofit2 = (strategy.position_avg_price * (1 + longtp2)) 

//sl
shorttp1   = input.float(6.0, "Short TP 1 ", minval = 0.0, step = 0.25, group = "Exit SHORT Orders")/100
shorttp2   = input.float(12.0, "Short TP 2", minval = 0.0, step = 0.25, group = "Exit SHORT Orders")/100
shortsl1 = input.float(3.0, "Short SL",  minval = 0.0, step = 0.25, group = "Exit SHORT Orders")/100
shorttakeprofit1 = (strategy.position_avg_price * (1- shorttp1))
shortstoploss1 = (strategy.position_avg_price * (1 + shortsl1))
shorttakeprofit2 = (strategy.position_avg_price * (1- shorttp2))

//placeorders
if inversestrategy == false
    if direction == "Both"
        if longcondition and strategy.opentrades == 0
            strategy.entry("long" , strategy.long )
        strategy.exit("exit long 1","long",qty_percent = sellqty ,limit = longtakeprofit1,stop = longstoploss1)
        strategy.exit("exit long 2","long",qty_percent = 100 ,limit = longtakeprofit2,stop = longstoploss1)
        if high >= longtakeprofit1
            strategy.cancel("exit long 2")
            strategy.exit("exit long 3","long",qty_percent = 100 ,limit = longtakeprofit2,stop = strategy.position_avg_price)
        if shortcondition and strategy.opentrades == 0
            strategy.entry("short",strategy.short)
        strategy.exit("exit short 1","short",qty_percent = sellqty ,limit = shorttakeprofit1,stop = shortstoploss1)
        strategy.exit("exit short 2","short",qty_percent = 100 ,limit = shorttakeprofit2,stop = shortstoploss1)
        if low <= shorttakeprofit1
            strategy.cancel("exit short 2")
        strategy.exit("exit short 3","short",qty_percent = 100 ,limit = shorttakeprofit2,stop = strategy.position_avg_price)
    else if direction == "Long"
        if longcondition and strategy.opentrades == 0
            strategy.entry("long" , strategy.long )
        strategy.exit("exit long 1","long",qty_percent = sellqty ,limit = longtakeprofit1,stop = longstoploss1)
        strategy.exit("exit long 2","long",qty_percent = 100 ,limit = longtakeprofit2,stop = longstoploss1)
        if high >= longtakeprofit1
            strategy.cancel("exit long 2")
            strategy.exit("exit long 3","long",qty_percent = 100 ,limit = longtakeprofit2,stop = strategy.position_avg_price)
    else if direction == "Short"
        if shortcondition and strategy.opentrades == 0
            strategy.entry("short",strategy.short)
        strategy.exit("exit short 1","short",qty_percent = sellqty ,limit = shorttakeprofit1,stop = shortstoploss1)
        strategy.exit("exit short 2","short",qty_percent = 100 ,limit = shorttakeprofit2,stop = shortstoploss1)
        if low <= shorttakeprofit1
            strategy.cancel("exit short 2")
        strategy.exit("exit short 3","short",qty_percent = 100 ,limit = shorttakeprofit2,stop = strategy.position_avg_price)
else
    if direction == "Both"
        if shortcondition and strategy.opentrades == 0
            strategy.entry("long" , strategy.long )
        strategy.exit("exit long 1","long",qty_percent = sellqty ,limit = longtakeprofit1,stop = longstoploss1)
        strategy.exit("exit long 2","long",qty_percent = 100 ,limit = longtakeprofit2,stop = longstoploss1)
        if high >= longtakeprofit1
            strategy.cancel("exit long 2")
            strategy.exit("exit long 3","long",qty_percent = 100 ,limit = longtakeprofit2,stop = strategy.position_avg_price)
        if longcondition and strategy.opentrades == 0
            strategy.entry("short",strategy.short)
        strategy.exit("exit short 1","short",qty_percent = sellqty ,limit = shorttakeprofit1,stop = shortstoploss1)
        strategy.exit("exit short 2","short",qty_percent = 100 ,limit = shorttakeprofit2,stop = shortstoploss1)
        if low <= shorttakeprofit1
            strategy.cancel("exit short 2")
        strategy.exit("exit short 3","short",qty_percent = 100 ,limit = shorttakeprofit2,stop = strategy.position_avg_price)
    else if direction == "Long"
        if shortcondition and strategy.opentrades == 0
            strategy.entry("long" , strategy.long )
        strategy.exit("exit long 1","long",qty_percent = sellqty ,limit = longtakeprofit1,stop = longstoploss1)
        strategy.exit("exit long 2","long",qty_percent = 100 ,limit = longtakeprofit2,stop = longstoploss1)
        if high >= longtakeprofit1
            strategy.cancel("exit long 2")
            strategy.exit("exit long 3","long",qty_percent = 100 ,limit = longtakeprofit2,stop = strategy.position_avg_price)
    else if direction == "Short"
        if longcondition and strategy.opentrades == 0
            strategy.entry("short",strategy.short)
        strategy.exit("exit short 1","short",qty_percent = sellqty ,limit = shorttakeprofit1,stop = shortstoploss1)
        strategy.exit("exit short 2","short",qty_percent = 100 ,limit = shorttakeprofit2,stop = shortstoploss1)
        if low <= shorttakeprofit1
            strategy.cancel("exit short 2")
        strategy.exit("exit short 3","short",qty_percent = 100 ,limit = shorttakeprofit2,stop = strategy.position_avg_price)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
lsl1 = plot(strategy.position_size <= 0 ? na : longstoploss1, color=color.rgb(124, 11, 11), style=plot.style_linebr, linewidth=1)
ltp1 = plot(strategy.position_size <= 0 ? na : longtakeprofit1, color=color.rgb(15, 116, 18), style=plot.style_linebr, linewidth=1)
ltp2 = plot(strategy.position_size <= 0 ? na : longtakeprofit2, color=color.rgb(15, 116, 18), style=plot.style_linebr, linewidth=1)
avg = plot(strategy.position_avg_price, color=color.rgb(255, 153, 0, 47), style=plot.style_linebr, linewidth=1)
fill(ltp1,avg , color =strategy.position_size <= 0 ? na : color.rgb(82, 255, 97, 90))
fill(ltp2,ltp1 , color =strategy.position_size <= 0 ? na : color.rgb(82, 255, 97, 90))
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ssl1 = plot(strategy.position_size >= 0 ? na : shortstoploss1, color=color.red, style=plot.style_linebr, linewidth=1)
stp1 = plot(strategy.position_size >= 0 ? na : shorttakeprofit2, color=color.green, style=plot.style_linebr, linewidth=1)
stp2 = plot(strategy.position_size >= 0 ? na : shorttakeprofit1, color=color.green, style=plot.style_linebr, linewidth=1)
fill(stp1,avg , color =strategy.position_size >= 0 ? na : color.rgb(30, 92, 35, 90))
fill(stp2,stp1 , color =strategy.position_size >= 0 ? na : color.rgb(30, 92, 35, 90))
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
resplot = plot(res, color=ta.change(res) ? na : #bf141446,  linewidth=3, offset=-(rightbars+1), title="res")
supplot = plot(sup, color=ta.change(sup) ? na : #118f113a,  linewidth=3, offset=-(rightbars+1), title="sup")

আরো