ডুয়াল লেজার ট্রেন্ড-চাইকিং কৌশল

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

img

সারসংক্ষেপ

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

নীতিমালা

এই কৌশলটি বর্তমান প্রবণতা নির্ধারণের জন্য নিম্নলিখিত তিনটি প্রযুক্তিগত সূচককে একত্রিত করেঃ

  1. SQUEEZE Momentum Indicator: বোলিংজার ব্যান্ড এবং কেল্টনার চ্যানেল গণনা করে। যখন দুটি ব্যান্ড ওভারল্যাপ হয়, তখন এটি একটি সংকোচন তৈরি করে এবং একটি আসন্ন প্রবণতা পরিবর্তনকে নির্দেশ করে। এটি সংকোচনের অবস্থা এবং রৈখিক রিগ্রেশন ঢাল ফেরত দেয়।

  2. RSI ভলিউম ওয়েটেড: ভলিউম দ্বারা ওয়েটেড RSI গণনা করে। ওভারক্রয় / ওভারসোল্ড স্তর নির্ধারণের জন্য মধ্যপন্থা ব্যবহার করে। এটি ভলিউম পরিবর্তনগুলিকে জোর দেয়।

  3. প্যারাবোলিক এসএআরঃ এসএআর লাইনের তুলনায় বর্তমান মূল্যের অবস্থান বিচার করে। দামের উপরে এসএআর হ্রাসের প্রবণতা নির্দেশ করে এবং দামের নীচে এসএআর আপট্রেন্ড নির্দেশ করে।

কৌশলটি ট্রেন্ডের দিকনির্দেশনা নির্ধারণের জন্য বোলিংজার ব্যান্ড ব্যবহার করে, কেল্টনার চ্যানেলগুলি এটিকে পরিমার্জন করতে, ওভারকপ/ওভারসোল্ডের সময় বিপরীতমুখী সুযোগগুলি খুঁজে পেতে আরএসআই এবং প্রবেশের সময় নির্ধারণের জন্য এসএআর ব্যবহার করে। যুক্তি হলঃ

  1. বোলিংজার ব্যান্ড, কেল্টনার চ্যানেল, স্ট্রেইজ ইন্ডিকেটর গণনা করুন। স্ট্রেইজ ঘটলে স্ট্যান্ডবাইতে প্রবেশ করুন।

  2. ভলিউম ওয়েটেড আরএসআই গণনা করুন। মধ্যপন্থা উপরে আরএসআই আপট্রেন্ড নির্দেশ করে, মধ্যপন্থা নিচে ডাউনট্রেন্ড।

  3. প্যারাবলিক এসএআর গণনা করুন। দামের নিচে এসএআর আপট্রেন্ড দেখায়, দামের উপরে ডাউনট্রেন্ড দেখায়।

  4. তিনটি সূচক একত্রিত করুনঃ যখন সংকোচন ঘটে, তখন আরএসআই মাঝারি পয়েন্টের উপরে যায়, এসএআর দামের নীচে থাকে, একটি দীর্ঘ সংকেত তৈরি হয়। যখন সংকোচন ঘটে, তখন আরএসআই মাঝারি পয়েন্টের নীচে যায়, এসএআর দামের উপরে থাকে, একটি সংক্ষিপ্ত সংকেত তৈরি হয়।

  5. যখন একটি সংকেত প্রেরণ করা হয়, পূর্ববর্তী বারের তিনটি সূচকগুলির বিচারগুলি বর্তমান সংকেতের বিপরীত কিনা তা পরীক্ষা করুন। যদি তাই হয়, তাহলে ট্রেডে প্রবেশ করুন।

  6. স্টপ লস সেট করুন এবং প্রবেশের পর লাভ নিন, স্টপ লস অনুসরণ করুন।

সুবিধা

এই কৌশলটির সুবিধাঃ

  1. একাধিক সূচকগুলির সংমিশ্রণ প্রবণতা বিচারের নির্ভুলতা উন্নত করে। সংকোচন সঠিকভাবে প্রবণতা পরিবর্তন সনাক্ত করে, আরএসআই স্পষ্টভাবে অতিরিক্ত ক্রয় / অতিরিক্ত বিক্রয় স্তরগুলি সনাক্ত করে, এসএআর সঠিকভাবে প্রবেশের সময়গুলি।

  2. সূচক যুক্তি সহজ এবং সহজেই বোঝা যায়।

  3. একাধিক সূচকের নিশ্চিতকরণ ভুয়া ব্রেকআউট ফিল্টার করতে সাহায্য করে।

  4. স্টপ লস এবং লাভ নেওয়ার যান্ত্রিকতা মুনাফা লক করে এবং ঝুঁকি সীমাবদ্ধ করে।

  5. ব্যাপক ব্যাকটেস্ট ডেটা নির্ভরযোগ্যতা নিশ্চিত করে।

ঝুঁকি

এছাড়াও কিছু ঝুঁকি আছেঃ

  1. দীর্ঘ এবং সংক্ষিপ্ত এন্ট্রি লজিক অনুরূপ এবং দ্বন্দ্বপূর্ণ সংকেত উৎপন্ন করতে পারে। ফিল্টারিং প্রয়োজন।

  2. সমস্ত সূচক প্যারামিটার অপ্টিমাইজেশান ব্যবহার করে, ঝুঁকি overfitting।

  3. উচ্চ ট্রেডিং ফ্রিকোয়েন্সি, অবস্থান আকার নিয়ন্ত্রণ প্রয়োজন।

  4. স্টপ লস খুব কাছাকাছি হতে পারে এবং সহজেই বন্ধ হয়ে যেতে পারে।

সমাধান:

  1. সিগন্যাল ওসিলেশন এড়াতে নির্দেশক রায়ের ধারাবাহিকতা পরীক্ষা যোগ করুন।

  2. প্যারামিটারগুলি সামঞ্জস্য করতে এবং অতিরিক্ত ফিটিং প্রতিরোধ করতে অগ্রসর বিশ্লেষণ ব্যবহার করুন।

  3. প্রতিটি দিকের অবস্থান নিয়ন্ত্রণের জন্য পিরামিড আকার সেট করুন।

  4. স্টপ লস মূল্যের অপ্টিমাইজেশান করার জন্য বিভিন্ন স্টপ লস পরিসীমা পরীক্ষা করুন।

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

কৌশলটি অপ্টিমাইজ করার জন্য কিছু দিকনির্দেশঃ

  1. স্থিতিশীলতার জন্য সূচক পরামিতি অপ্টিমাইজ করুন। গতিশীল অপ্টিমাইজেশান বিবেচনা করুন।

  2. ফিক্সড/সমান শতাংশের মত পজিশন সাইজিং লজিক যোগ করুন।

  3. বিভিন্ন স্টপ লস পদ্ধতি যেমন ভোল্টেবিলিটি বা লিনিয়ার স্টপ, শূন্য পজিশন ইত্যাদি পরীক্ষা করুন।

  4. ফিক্সড ফ্রেকশনাল পজিশনের আকারের মতো অর্থ ব্যবস্থাপনা যোগ করুন।

  5. গতিশীল প্রবেশ এবং প্রস্থান জন্য মেশিন লার্নিং মডেল ব্যবহার করুন।

  6. সংশ্লিষ্ট সিস্টেমিক ঝুঁকি কমাতে লং এবং শর্ট উভয়ই করে হেজিং প্রক্রিয়া যুক্ত করুন।

  7. আরও সূচক বিবেচনা করুন এবং নির্ভুলতা বাড়ানোর জন্য ভোটদানের প্রক্রিয়া তৈরি করুন।

সিদ্ধান্ত

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


/*backtest
start: 2023-10-06 00:00:00
end: 2023-11-05 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/
// © XaviZ

//#####©ÉÉÉɶN###############################################
//####*..´´´´´´,,,»ëN########################################
//###ë..´´´´´´,,,,,,''%©#####################################
//###'´´´´´´,,,,,,,'''''?¶###################################
//##o´´´´´´,,,,,,,''''''''*©#################################
//##'´´´´´,,,,,,,'''''''^^^~±################################
//#±´´´´´,,,,,,,''''''''^í/;~*©####æ%;í»~~~~;==I±N###########
//#»´´´´,,,,,,'''''''''^;////;»¶X/í~~/~~~;=~~~~~~~~*¶########
//#'´´´,,,,,,''''''''^^;////;%I^~/~~/~~~=~~~;=?;~~~~;?ë######
//©´´,,,,,,,''''''''^^~/////X~/~~/~~/~~»í~~=~~~~~~~~~~^;É####
//¶´,,,,,,,''''''''^^^;///;%;~/~~;í~~»~í?~?~~~?I/~~~~?*=íÑ###
//N,,,,,,,'''''''^^^^^///;;o/~~;;~~;£=»í»;IX/=~~~~~~^^^^'*æ##
//#í,,,,,''''''''^^^^^;;;;;o~»~~~~íX//~/»~;í?IíI»~~^/*?'''=N#
//#%,,,'''''''''^^^^^^í;;;;£;~~~//»I»/£X/X/»í*&~~~^^^^'^*~'É#
//#©,,''''''''^^^^^^^^~;;;;&/~/////*X;í;o*í»~=*?*===^'''''*£#
//##&''''''''^^^^^^^^^^~;;;;X=í~~~»;;;/~;í»~»±;^^^^^';=''''É#
//##N^''''''^^^^^^^^^^~~~;;;;/£;~~/»~~»~~///o~~^^^^''''?^',æ#
//###Ñ''''^^^^^^^^^^^~~~~~;;;;;í*X*í»;~~IX?~~^^^^/?'''''=,=##
//####X'''^^^^^^^^^^~~~~~~~~;;íííííí~~í*=~~~~Ií^'''=''''^»©##
//#####£^^^^^^^^^^^~~~~~~~~~~~íííííí~~~~~*~^^^;/''''='',,N###
//######æ~^^^^^^^^~~~~~~~~~~~~~~íííí~~~~~^*^^^'=''''?',,§####
//########&^^^^^^~~~~~~~~~~~~~~~~~~~~~~~^^=^^''=''''?,íN#####
//#########N?^^~~~~~~~~~~~~~~~~~~~~~~~~^^^=^''^?''';í@#######
//###########N*~~~~~~~~~~~~~~~~~~~~~~~^^^*'''^='''/É#########
//##############@;~~~~~~~~~~~~~~~~~~~^^~='''~?'';É###########
//#################É=~~~~~~~~~~~~~~^^^*~'''*~?§##############
//#####################N§£I/~~~~~~»*?~»o§æN##################

//@version=4
strategy(title="M-SQUEEZE", overlay = true)

//study(title="M-SQUEEZE", overlay = true)

src = input(close, "SOURCE", type = input.source)

// ███▓▒░░ VARIABLES ░░▒▓███

var bool longCond = na, var bool shortCond = na
var int CondIni_long0 = 0, var int CondIni_short0 = 0
var int CondIni_long = 0, var int CondIni_short = 0
var float last_open_longCondition = na, var float last_open_shortCondition = na
var int last_longCondition0 = na, var int last_shortCondition0 = na
var int last_longCondition = na, var int last_shortCondition = na
var bool long_tp = na, var bool short_tp = na
var int last_long_tp = na, var int last_short_tp = na
var bool Final_Long_tp = na, var bool Final_Short_tp = na
var bool SMI_longCond = na, var bool SMI_shortCond = na
var bool RSI_longCond = na, var bool RSI_shortCond = na
var bool ADX_longCond = na, var bool ADX_shortCond = na
var bool SAR_longCond = na, var bool SAR_shortCond = na
var bool Final_longCondition0 = na, var bool Final_shortCondition0 = na
var bool Final_longCondition = na, var bool Final_shortCondition = na

// ███▓▒░░ SQUEEZE MOMENTUM INDICATOR ░░▒▓███

Act_SMI = input(true, "SQUEEZE MOMENTUM INDICATOR")
BB_length = input(85, title="BOLLINGER BANDS LENGTH", minval = 1)
BB_mult = input(2.1, title="BOLLINGER BANDS MULTI-FACTOR", minval = 0.1, step = 0.1)
KC_length = input(38, title="KELTNER CHANNEL LENGTH", minval = 1)
KC_mult = input(2.0, title="KELTNER CHANNEL MULTI-FACTOR", minval = 0.1, step = 0.1)

SQUEEZE_M(_src,_BB_length,_BB_mult,_KC_length,_KC_mult)=>

    // Calculate BB
    basis = sma(_src, _BB_length)
    dev = _BB_mult * stdev(_src, _BB_length)
    upperBB = basis + dev
    lowerBB = basis - dev
    // Calculate KC
    ma = sma(src, _KC_length)
    rangema = sma(tr, _KC_length)
    upperKC = ma + rangema * _KC_mult
    lowerKC = ma - rangema * _KC_mult
    // Squeeze
    sqzOn = lowerBB > lowerKC and upperBB < upperKC
    sqzOff = lowerBB < lowerKC and upperBB > upperKC
    nosqz = sqzOn == false and sqzOff == false
    // Linear Regression curve
    val = linreg(_src - avg(avg(highest(high, _KC_length), lowest(low, _KC_length)), sma(close, _KC_length)), _KC_length, 0)
    [nosqz,val]
    
[NOSQZ,VAL] = SQUEEZE_M(src,BB_length,BB_mult,KC_length,KC_mult)

barcolor(iff(VAL > 0, iff(VAL > nz(VAL[1]), color.lime, color.green), iff(VAL < nz(VAL[1]), color.red, color.maroon)))

// ███▓▒░░ SAR ░░▒▓███

Act_SAR = input(true, "PARABOLIC SAR")
Sst = input (0.73, "SAR STAR", step=0.01, minval = 0.01)
Sinc = input (0.5, "SAR INC", step=0.01, minval = 0.01)
Smax = input (0.06, "SAR MAX", step=0.01, minval = 0.01)

SAR = sar(Sst, Sinc, Smax)
plot(SAR, style = plot.style_cross, title = "SAR")

// ███▓▒░░ RSI VOLUME WEIGHTED ░░▒▓███

Act_RSI = input(true, "RSI VOLUME WEIGHTED")
RSI_len = input(22, "RSI LENGHT", minval = 1)
RSI_obos = input(45,title="RSI CENTER LINE", type=input.integer, minval = 1)

WiMA(_src, _length)=> 
    var float MA_s=0.0
    MA_s:=(_src + nz(MA_s[1] * (_length-1)))/_length
    MA_s

RSI_Volume(fv, length)=>	
	up=iff(fv>fv[1],abs(fv-fv[1])*volume,0)
	dn=iff(fv<fv[1],abs(fv-fv[1])*volume,0)
	upt=WiMA(up,length)
	dnt=WiMA(dn,length)
	100*(upt/(upt+dnt))

RSI_V = RSI_Volume(src, RSI_len)

// ███▓▒░░ STRATEGY ░░▒▓███

SMI_longCond := (Act_SMI ? (VAL > 0 and (VAL > nz(VAL[1])) and not NOSQZ) : RSI_longCond) 
RSI_longCond := (Act_RSI ? (RSI_V > RSI_obos) : SAR_longCond)
SAR_longCond := (Act_SAR ? (SAR < close) : SMI_longCond)

SMI_shortCond := (Act_SMI ? (VAL < 0 and (VAL < nz(VAL[1])) and not NOSQZ) : RSI_shortCond) 
RSI_shortCond := (Act_RSI ? (RSI_V < RSI_obos) : SAR_shortCond)
SAR_shortCond := (Act_SAR ? (SAR > close) : SMI_shortCond)

longCond := SMI_longCond and RSI_longCond and SAR_longCond
shortCond := SMI_shortCond and RSI_shortCond and SAR_shortCond

CondIni_long0 := longCond ? 1 : shortCond ? -1 : CondIni_long0[1]
CondIni_short0 := longCond ? 1 : shortCond ? -1 : CondIni_short0[1]

longCondition0 = (longCond and CondIni_long0[1] == -1)
shortCondition0 = (shortCond and CondIni_short0[1] == 1)

CondIni_long := longCond[1] ? 1 : shortCond[1] ? -1 : CondIni_long[1]
CondIni_short := longCond[1] ? 1 : shortCond[1] ? -1 : CondIni_short[1]

longCondition = (longCond[1] and CondIni_long[1] == -1)
shortCondition = (shortCond[1] and CondIni_short[1] == 1)

// ███▓▒░░ ALERTS & SIGNALS ░░▒▓███

plotshape(longCondition, title = "Long Signal", style = shape.triangleup, location = location.belowbar, color = color.blue, transp = 0, size = size.tiny)
plotshape(shortCondition, title = "Short Signal", style = shape.triangledown, location = location.abovebar, color = #FF0000, transp = 0, size = size.tiny)

//alertcondition(longCondition, title="Long Alert", message = "LONG") 
//alertcondition(shortCondition, title="Short Alert", message = "SHORT")

// ███▓▒░░ BACKTESTING ░░▒▓███

testStartYear = input(2018, "BACKTEST START YEAR", minval = 1980, maxval = 2222) 
testStartMonth = input(01, "BACKTEST START MONTH", minval = 1, maxval = 12)
testStartDay = input(01, "BACKTEST START DAY", minval = 1, maxval = 31)
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(2222, "BACKTEST STOP YEAR", minval=1980, maxval = 2222)
testStopMonth = input(12, "BACKTEST STOP MONTH", minval=1, maxval=12)
testStopDay = input(31, "BACKTEST STOP DAY", minval=1, maxval=31)
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)

testPeriod = time >= testPeriodStart and time <= testPeriodStop ? true : false

strategy.entry("Long", strategy.long, when = longCondition0 and testPeriod)
strategy.entry("Short", strategy.short, when = shortCondition0 and testPeriod)


আরো