আপেক্ষিক গতির কৌশলটি বৃহত্তর বাজারের তুলনায় স্টকগুলির আপেক্ষিক শক্তি বিচার করার জন্য পৃথক স্টক এবং সূচকগুলির গতির তুলনা করে। এটি যখন স্টক গতি সূচকের চেয়ে বেশি হয় তখন এটি কিনে এবং যখন স্টক গতি সূচকের চেয়ে কম হয় তখন বিক্রি করে, যাতে পৃথক স্টকগুলির বৃদ্ধির শিখর ধরা যায়।
এই কৌশলটির মূল যুক্তি হ'ল বাজারের তুলনায় পৃথক স্টকগুলির আপেক্ষিক শক্তি বিচার করা, বিশেষতঃ
এই যুক্তির মাধ্যমে, আমরা যখন শেয়ারের বৃদ্ধি সমৃদ্ধ হয় তখন আমরা শেয়ার কিনতে পারি এবং যখন বৃদ্ধির গতি কমে যায় তখন বিক্রি করতে পারি, যা শেয়ারের সর্বাধিক বৃদ্ধির সময় অতিরিক্ত রিটার্নকে লক করে।
আপেক্ষিক গতির কৌশলটির প্রধান সুবিধাঃ
আপেক্ষিক গতির কৌশল নিয়েও কিছু ঝুঁকি রয়েছেঃ
এই ঝুঁকিগুলি যুক্তিসঙ্গত মুনাফা গ্রহণ, স্টপ লস, প্যারামিটার টিউনিং ইত্যাদির মাধ্যমে পরিচালনা করা যেতে পারে।
আপেক্ষিক গতির কৌশল প্রধানত নিম্নলিখিত দিক থেকে অপ্টিমাইজ করা যেতে পারেঃ
আপেক্ষিক গতির কৌশলটি আলফা তৈরির জন্য সামগ্রিক বাজারের তুলনায় পৃথক স্টকগুলির অতিরিক্ত বৃদ্ধির পর্যায়গুলি ক্যাপচার করে। এর সহজ, পরিষ্কার কিনুন / বিক্রয় যুক্তি এবং অপারেশন সহজতার সাথে এবং যখন প্যারামিটার অপ্টিমাইজেশন এবং ঝুঁকি নিয়ন্ত্রণের সাথে যুক্ত হয়, তখন এই কৌশলটি খুব ভাল পারফর্ম করতে পারে।
/*backtest start: 2024-01-21 00:00:00 end: 2024-01-28 00:00:00 period: 15m basePeriod: 5m 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/ // © HeWhoMustNotBeNamed //@version=4 strategy("Relative Returns Strategy", overlay=false, initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true) index_ticker=input("BTC_USDT:swap") Loopback = input(40, step=20) useStopAndIndexReturns = input(true) useStopAndIndexReturnsMa = input(true) useDifference = not useStopAndIndexReturns MAType = input(title="Moving Average Type", defval="sma", options=["ema", "sma", "hma", "rma", "vwma", "wma"]) MALength = input(10, minval=10,step=10) i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Backtest Start Time", type = input.time) i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "Backtest End Time", type = input.time) inDateRange = true f_secureSecurity(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_on) f_getMovingAverage(source, MAType, length)=> ma = sma(source, length) if(MAType == "ema") ma := ema(source,length) if(MAType == "hma") ma := hma(source,length) if(MAType == "rma") ma := rma(source,length) if(MAType == "vwma") ma := vwma(source,length) if(MAType == "wma") ma := wma(source,length) ma index = f_secureSecurity(index_ticker, '1D', close, 0) stock_return = (close - close[Loopback])*100/close index_return = (index - index[Loopback])*100/index stock_return_ma = f_getMovingAverage(stock_return, MAType, MALength) index_return_ma = f_getMovingAverage(index_return, MAType, MALength) relativeReturns = stock_return - index_return relativeReturns_ma = f_getMovingAverage(relativeReturns, MAType, MALength) plot(useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma : stock_return : na, title="StockReturn", color=color.green, linewidth=1) plot(useStopAndIndexReturns ? useStopAndIndexReturnsMa ? index_return_ma : index_return : na, title="IndexReturn", color=color.red, linewidth=1) plot(useDifference?relativeReturns:na, title="Relative-Returns", color=color.blue, linewidth=1) plot(useDifference?relativeReturns_ma:na, title="MA", color=color.red, linewidth=1) buyCondition = (useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma > index_return_ma : stock_return > index_return : relativeReturns > relativeReturns_ma) closeBuyCondition = (useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma < index_return_ma : stock_return < index_return : relativeReturns < relativeReturns_ma) strategy.entry("Buy", strategy.long, when=buyCondition and inDateRange, oca_name="oca") strategy.close("Buy", when=closeBuyCondition)