গড় বিপরীতমুখী এটিআর ট্রেন্ড কৌশল

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

সারসংক্ষেপ

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

কৌশলগত যুক্তি

  1. মূল্যের অস্থিরতা পরিমাপ করার জন্য ATR সূচক ব্যবহার করুন। গত 20 সময়ের জন্য ATR গণনা করুন এবং এর চলমান গড় এবং স্ট্যান্ডার্ড বিচ্যুতি পান। যদি বর্তমান ATR মান গড় প্লাস এক স্ট্যান্ডার্ড বিচ্যুতি অতিক্রম করে, মূল্যের অস্থিরতা উচ্চ বলে মনে করা হয়।

  2. দামের প্রবণতা নির্ধারণের জন্য প্রথম আদেশের লগারিদমিক মূল্য পরিবর্তনের হার ব্যবহার করুন। গত 20 সময়ের মধ্যে লগারিদমিক বন্ধ মূল্য পরিবর্তনের হার গণনা করুন, এর চলমান গড় পান। যদি বর্তমান পরিবর্তনের হার 3 টি পরপর দিনের জন্য গড় অতিক্রম করে এবং ইতিবাচক হয়, তবে দামটি একটি আপট্রেন্ড হিসাবে বিবেচিত হয়।

  3. যখন দামের অস্থিরতা বেশি হয় এবং দাম একটি আপট্রেন্ড দেখায়, তখন দীর্ঘ যান। যখন দাম ফিরে আসে এবং স্টপ লস ট্রিগার হয়, বন্ধ অবস্থান। স্টপ লস মূল্য গতিশীলভাবে সামঞ্জস্য করা হয় যাতে সর্বনিম্ন মূল্য বিয়োগ 2 বার ATR এর নীচে থাকে।

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

  1. দীর্ঘ/সংক্ষিপ্ত সময় নির্ধারণের জন্য মূল্যের অস্থিরতা এবং প্রবণতা ব্যবহার করুন, বিভিন্ন বাজারে অতিরিক্ত ট্রেডিং এড়িয়ে চলুন।

  2. ডায়নামিক স্টপ লস খুব বিস্তৃত স্টপ থেকে অত্যধিক ক্ষতি এড়ায়।

  3. ২০১৫ থেকে ২০২১ সালের মধ্যে বার্ষিক আয় ১৫৯ শতাংশ, যা ক্রয় ও হোল্ডের ১২০ শতাংশেরও বেশি।

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

  1. অত্যধিক আক্রমণাত্মক এটিআর পরামিতিগুলির ফলে খুব কম প্রবেশের সুযোগ হতে পারে। ফ্রিকোয়েন্সি বাড়ানোর জন্য পরামিতিগুলি মাঝারিভাবে শিথিল করতে পারে।

  2. প্রবণতা সূচক প্রকৃত প্রবণতার বিপরীতে মিথ্যা সংকেত তৈরি করতে পারে। সম্ভাব্য ক্ষতি এড়ানোর জন্য আরও নিশ্চিতকারী কারণ যোগ করা উচিত।

  3. ব্যাকটেস্টের মেয়াদ মাত্র ৬ বছর। অতিরিক্ত ফিটিং এড়াতে বড় নমুনা এবং দৃঢ়তা পরীক্ষা প্রয়োজন।

  4. ফ্ল্যাশ ক্র্যাশের মতো চরম পরিস্থিতিতে পারফরম্যান্স মূল্যায়ন করতে অক্ষম।

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

  1. প্রবণতা সঠিকতা বাড়াতে MACD, KDJ এর মতো আরো প্রবণতা নিশ্চিতকারী সূচক যুক্ত করুন।

  2. বিভিন্ন পণ্য এবং বাজার ব্যবস্থার উপর ভিত্তি করে এটিআর পরামিতিগুলিকে অভিযোজিতভাবে ট্যুইট করুন ভোল্টেবিলিটি গেজের অপ্টিমাইজ করার জন্য।

  3. ব্রেকআউট লজিক এবং প্রবণতা ত্বরান্বিত করার কারণ যোগ করুন।

  4. পারফরম্যান্সের উপর শতাংশ, অস্থিরতা স্টপ মত বিভিন্ন স্টপ লস টাইপ পরীক্ষা করুন।

  5. ট্রেডিং ফ্রিকোয়েন্সি, কার্ভের স্থিতিশীলতা, সর্বোচ্চ ড্রডাউন ইত্যাদির উপর ভিত্তি করে মূল্যায়ন করুন।

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

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


/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 1d
basePeriod: 1h
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/
// © DojiEmoji (kevinhhl)

//@version=4
strategy("Mean Reversion (ATR) Strategy [KL]",overlay=true,pyramiding=1)
ENUM_LONG = "Long"

// Timeframe {
backtest_timeframe_start = input(defval = timestamp("01 Apr 2000 13:30 +0000"), title = "Backtest Start Time", type = input.time)
USE_ENDTIME = input(false,title="Define backtest end-time (If false, will test up to most recent candle)")
backtest_timeframe_end = input(defval = timestamp("01 May 2021 19:30 +0000"), title = "Backtest End Time (if checked above)", type = input.time)
within_timeframe = true
// }

// Trailing stop loss {
ATR_X2_TSL = atr(input(14,title="Length of ATR for trailing stop loss")) * input(2.0,title="ATR Multiplier for trailing stop loss",type=input.float)
TSL_source = low
var stop_loss_price = float(0)
TSL_line_color = color.green, TSL_transp = 100
if strategy.position_size == 0 or not within_timeframe
    TSL_line_color := color.black
    stop_loss_price := TSL_source - ATR_X2_TSL 
else if strategy.position_size > 0
    stop_loss_price := max(stop_loss_price, TSL_source - ATR_X2_TSL)
    TSL_transp := 0
plot(stop_loss_price, color=color.new(TSL_line_color, TSL_transp))
// }

// Variables for confirmations of entry {
_len_volat = input(20,title="Length of ATR to determine volatility")
_ATR_volat = atr(_len_volat)
_avg_atr = sma(_ATR_volat, _len_volat)
_std_volat = stdev(_ATR_volat,_len_volat)
signal_diverted_ATR = _ATR_volat > (_avg_atr + _std_volat) or _ATR_volat < (_avg_atr - _std_volat)

_len_drift = input(20,title="Length of Drift")//default set to const: _len_vol's default value
_prcntge_chng = log(close/close[1])
_drift = sma(_prcntge_chng, _len_drift) - pow(stdev(_prcntge_chng, _len_drift),2)*0.5
_chg_drift = _drift/_drift[1]-1
signal_uptrend = (_drift > _drift[1] and _drift > _drift[2]) or _drift > 0

entry_signal_all = signal_diverted_ATR and signal_uptrend
// }

alert_per_bar(msg)=>
    prefix = "[" + syminfo.root + "] "
    suffix = "(P=" + tostring(close) + "; atr=" + tostring(_ATR_volat) + ")"
    alert(tostring(prefix) + tostring(msg) + tostring(suffix), alert.freq_once_per_bar)

// MAIN {
if within_timeframe

    if strategy.position_size > 0 and strategy.position_size[1] > 0 and (stop_loss_price/stop_loss_price[1]-1) > 0.005
        alert_per_bar("TSL raised to " + tostring(stop_loss_price))

    // EXIT:
	if strategy.position_size > 0 and TSL_source <= stop_loss_price
	    exit_msg = close <= strategy.position_avg_price ? "stop loss" : "take profit"
        strategy.close(ENUM_LONG, comment=exit_msg)
    // ENTRY:
    else if entry_signal_all and (strategy.position_size == 0 or (strategy.position_size > 0 and close > stop_loss_price))
		entry_msg = strategy.position_size > 0 ? "adding" : "initial"
		strategy.entry(ENUM_LONG, strategy.long, comment=entry_msg)

if strategy.position_size == 0
    stop_loss_price := float(0)
// }


আরো