মাল্টি ইন্ডিকেটর কোন্টিটেটিভ ট্রেডিং স্ট্র্যাটেজি

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

img

সারসংক্ষেপ

এই কৌশলটি স্বয়ংক্রিয়ভাবে লম্বা এবং সংক্ষিপ্ত পজিশন খোলার এবং বন্ধ করার জন্য চলমান গড়, আপেক্ষিক শক্তি সূচক (আরএসআই) এবং চলমান গড় ঘনিষ্ঠতা বিচ্যুতি (এমএসিডি), তিনটি প্রধান প্রযুক্তিগত সূচককে একীভূত করে। কৌশলটির নামটিতে এই কৌশলটিতে ব্যবহৃত একাধিক সূচককে তুলে ধরতে মাল্টি সূচক রয়েছে।

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

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

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

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

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

  1. আরএসআই সূচকের সাথে যুক্ত দ্রুত এবং ধীর লাইনগুলি চলমান গড়ের একক ব্যবহারের কারণে মিথ্যা অগ্রগতি এড়াতে পারে।

  2. ম্যাকডি সূচককে একত্রিত করে, এই সূচকটি নির্ধারণ করতে পারে যে, এই প্রবণতাটি কি খুব তাড়াতাড়ি বিপরীতমুখী হয়েছে, যাতে এই পরিবর্তনের সময় ভুল সংকেত পাওয়া যায় না।

  3. EMA এবং SMA এর মধ্যে নির্বাচন করা বিভিন্ন বাজারের বৈশিষ্ট্যগুলির জন্য আরও উপযুক্ত সূচকগুলি নির্বাচন করতে দেয়।

  4. অর্থ পরিচালনার পদ্ধতি নির্বাচন করা ঝুঁকি কার্যকরভাবে নিয়ন্ত্রণ করার জন্য একক আদেশের আকার নিয়ন্ত্রণ করতে সক্ষম করে।

  5. স্টপ লস এবং টেক প্রফিটকে সমর্থন করা লাভকে লক করতে এবং ক্ষতির বৃদ্ধি এড়াতে সহায়তা করে।

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

এই কৌশলটির প্রধান ঝুঁকিগুলির মধ্যে রয়েছেঃ

  1. অনুপযুক্ত পরামিতি অপ্টিমাইজেশান খারাপ কৌশল কর্মক্ষমতা হতে পারে। বিভিন্ন পরামিতি সমন্বয় পরীক্ষা সময় ব্যয় করতে হবে।

  2. সূচকটি ভুল সংকেত দেওয়ার সম্ভাবনা এখনও বিদ্যমান। যখন তিনটি সূচক একই সময়ে ভুল সংকেত দেয়, তখন এটি বৃহত্তর ক্ষতির দিকে পরিচালিত করবে।

  3. একক প্রতীকের পারফরম্যান্স অস্থির, এটি অন্যান্য জাতের জন্য প্রসারিত করা প্রয়োজন।

  4. আজকের দিনে, ভবিষ্যতে এই কৌশল কার্যকর হবে।

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

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

  1. অপ্টিমাম প্যারামিটার খুঁজতে ইন্ডিকেটর প্যারামিটারের বিভিন্ন সংমিশ্রণ পরীক্ষা করুন।

  2. স্টপ লস প্রক্রিয়াতে ট্রেলিং স্টপ বাড়ান। মূল্য একটি নির্দিষ্ট দূরত্ব অতিক্রম করার পরে, এটি লাভের লক করার জন্য ট্রেলিং স্টপ করতে পারে।

  3. প্রধান প্রবণতার জন্য মূল্যায়ন সূচক বৃদ্ধি করুন যাতে প্রবণতার বিরুদ্ধে ট্রেডিং এড়ানো যায়। উদাহরণস্বরূপ, ADX সূচকটি সংহত করুন।

  4. আরও ভাল ঝুঁকি ব্যবস্থাপনার জন্য অর্থ ব্যবস্থাপনা মডিউলটি দেখুন।

  5. নিউজ হিন্সের মতো মৌলিক কারণগুলির জন্য ফিল্টার ব্যবহার করুন।

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

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


/*backtest
start: 2023-11-04 00:00:00
end: 2023-12-04 00:00:00
period: 2h
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/
// © fikira
//@version=4
strategy("Strategy Tester EMA-SMA-RSI-MACD", shorttitle="Strat-test", overlay=true, max_bars_back=5000, 
 default_qty_type= strategy.percent_of_equity, calc_on_order_fills=false, calc_on_every_tick=false, 
 pyramiding=0, default_qty_value=100, initial_capital=100)

Tiny     = "Tiny"
Small    = "Small"
Normal   = "Normal"
Large    = "Large"

cl      = "close" , op  = "open" , hi  = "high" , lo  = "low"
c4      = "ohlc4" , c3  = "hlc3" , hl  = "hl2"

co      = "(E)MA 1 > (E)MA 2" 
cu      = "(E)MA 3 < (E)MA 4"

co_HTF  = "(E)MA 1 (HTF) > (E)MA 2 (HTF)" 
cu_HTF  = "(E)MA 3 (HTF) < (E)MA 4 (HTF)"

L_S     = "Long & Short"                , _L_  = "Long Only"                , _S_ = "Short Only"

cla     = "Close above (E)MA 1"         
clu     = "Close under (E)MA 3"

cla_HTF = "Close above (E)MA 1 (HTF)"
clu_HTF = "Close under (E)MA 3 (HTF)"

rsi     = "RSI strategy"

none    = "NONE"
mch     = "macd > signal"               , mcl     = "macd < signal"
mch0    = "macd > 0"                    , mcl0    = "macd < 0"
sgh0    = "signal > 0"                  , sgl0    = "signal < 0"

mch_HTF = "macd (HTF) > signal (HTF)"   , mcl_HTF = "macd (HTF) < signal (HTF)"
mch0HTF = "macd (HTF) > 0"              , mcl0HTF = "macd (HTF) < 0"
sgh0HTF = "signal (HTF) > 0"            , sgl0HTF = "signal (HTF) < 0"

EMA     = "EMA"                         , SMA = "SMA"       

s       = input(cl,   "Source" , options=[cl, op, hi, lo, c4, c3, hl])

src     =
 s  == cl ? close :
 s  == op ? open  :
 s  == hi ? high  :
 s  == lo ? low   :
 s  == c4 ? ohlc4 :
 s  == c3 ? hlc3  : 
 s  == hl ? hl2   :
 close

__1_    = input(false, ">=< >=< [STRATEGIES] >=< >=<")

Type    = input(_L_,  "Type Strategy", options=[L_S, _L_, _S_])

_1a_    = input(false, ">=< >=< [BUY/LONG] >=< >=<")

ENT     = input(co,   "Pick your poison:", options=[co, cla, rsi, mch, mch0, sgh0])
EH      = input(0,    " if RSI >")
EL      = input(100,  " if RSI <")
EH_HTF  = input(0,    " if RSI (HTF) >")
EL_HTF  = input(100,  " if RSI (HTF) <")

EX      = input(none, " Extra argument", options=[none, mch, mch0, sgh0])
EX2     = input(none, " Second argument", options=[none, mch_HTF, mch0HTF, sgh0HTF, co_HTF, cla_HTF])

_1b_    = input(false, ">=< [(E)MA settings (Buy/Long)] >=<")

ma1     = input(SMA,  "  (E)MA 1", options=[EMA, SMA])
len1    = input(50,   "     Length"  )
ma2     = input(SMA,  "  (E)MA 2", options=[EMA, SMA])
len2    = input(100,  "     Length"  )
ma1HTF  = input(SMA,  "  (E)MA 1 - HTF", options=[EMA, SMA])
len1HTF = input(50,   "     Length"  )
ma2HTF  = input(SMA,  "  (E)MA 2 - HTF", options=[EMA, SMA])
len2HTF = input(100,  "     Length"  )

_2a_    = input(false, ">=< >=< [SELL/SHORT] >=< >=<")

CLO     = input(cu,   "Pick your poison:", options=[cu, clu, rsi, mcl, mcl0, sgl0])
CH      = input(0,    " if RSI >")
CL      = input(100,  " if RSI <")
CH_HTF  = input(0,    " if RSI (HTF) >")
CL_HTF  = input(100,  " if RSI (HTF) <")

CX      = input(none, " Extra argument", options=[none, mcl, mcl0, sgl0])
CX2     = input(none, " Second argument", options=[none, mcl_HTF, mcl0HTF, sgl0HTF, cu_HTF, clu_HTF])

_2b_    = input(false, ">=< [(E)MA settings (Sell/Short)] >=<")

ma3     = input(SMA,  "  (E)MA 3", options=[EMA, SMA])
len3    = input(50,   "     Length"  )
ma4     = input(SMA,  "  (E)MA 4", options=[EMA, SMA])
len4    = input(100,  "     Length"  )
ma3HTF  = input(SMA,  "  (E)MA 3 - HTF", options=[EMA, SMA])
len3HTF = input(50,   "     Length"  )
ma4HTF  = input(SMA,  "  (E)MA 4 - HTF", options=[EMA, SMA])
len4HTF = input(100,  "     Length"  )

__3_    = input(false, ">=< >=< [RSI]  >=< >=< >=<")

ler     = input(20 , "  RSI Length")

__4_    = input(false, ">=< >=< [MACD] >=< >=< >=<")

fst     = input(12, "  Fast Length")
slw     = input(26, "  Slow Length")
sgn     = input(9 , "  Signal Smoothing")
sma_source = input(false, "Simple MA(Oscillator)")
sma_signal = input(false, "Simple MA(Signal Line)")

__5_    = input(false, ">=< >=< [HTF settings] >=< >=<")

MA_HTF  = input("D", "  (E)MA HTF", type = input.resolution)
RSI_HTF = input("D", "  RSI HTF"  , type = input.resolution)
MACD_HTF= input("D", "  MACD HTF" , type = input.resolution)

__6_    = input(false, ">=< >=< [SL/TP] >=< >=< >=<")

sl      = input(false, "Stop Loss?")
SL      = input(10.0, title="  Stop Loss %"  ) / 100
tp      = input(false, "Take Profit?")
TP      = input(20.0, title="  Take Profit %") / 100
 
SL_     = strategy.position_avg_price * (1 - SL)
TP_     = strategy.position_avg_price * (1 + TP)

// Limitation in time
// (= inspired from a script of "Che_Trader")

xox     = input(false, ">=< >=< [TIME] >=< >=< >=<")

ystr1   = input(2010, "  Since Year" )
ystp1   = input(2099, "  Till Year"  )
mstr1   = input(1   , "  Since Month")
mstp1   = input(12  , "  Till Month" )
dstr1   = input(1   , "  Since Day"  )
dstp1   = input(31  , "  Till Day"   )
 
_Str1   = timestamp(ystr1, mstr1, dstr1,  1,  1)
Stp1_   = timestamp(ystp1, mstp1, dstp1, 23, 59)

TIME    = time >= _Str1 and time <= Stp1_ ? true : false

////////////////////////////////////////////////////////////////////////////////////////////

_1      = 
 ma1 == SMA ? sma(src, len1) : 
 ma1 == EMA ? ema(src, len1) : 
 na
_2      = 
 ma2 == SMA ? sma(src, len2) :
 ma2 == EMA ? ema(src, len2) :
 na
_3      = 
 ma3 == SMA ? sma(src, len3) :
 ma3 == EMA ? ema(src, len3) :
 na
_4      = 
 ma4 == SMA ? sma(src, len4) :
 ma4 == EMA ? ema(src, len4) :
 na

_1b  = 
 ma1HTF == SMA ? sma(src, len1HTF) :
 ma1HTF == EMA ? ema(src, len1HTF) :
 na
_2b  = 
 ma2HTF == SMA ? sma(src, len2HTF) :
 ma2HTF == EMA ? ema(src, len2HTF) :
 na
_3b  = 
 ma3HTF == SMA ? sma(src, len3HTF) :
 ma3HTF == EMA ? ema(src, len3HTF) :
 na
_4b  = 
 ma4HTF == SMA ? sma(src, len4HTF) :
 ma4HTF == EMA ? ema(src, len4HTF) :
 na

_1_HTF = security(syminfo.tickerid, MA_HTF,  _1b)
_2_HTF = security(syminfo.tickerid, MA_HTF,  _2b)
_3_HTF = security(syminfo.tickerid, MA_HTF,  _3b)
_4_HTF = security(syminfo.tickerid, MA_HTF,  _4b)
cl_HTF = security(syminfo.tickerid, MA_HTF,  close)

////////////////////////////////////////////////////////////////////////////////////////////

plot(ENT == co or ENT == cla ? _1 : na            , title="(E)MA 1", color=color.lime                           )
plot(ENT == co               ? _2 : na            , title="(E)MA 2", color=color.red                            )
plot(CLO == cu or CLO == clu ? _3 : na            , title="(E)MA 3", color= _3 == _1 ? color.lime : color.yellow)
plot(CLO == cu               ? _4 : na            , title="(E)MA 4", color= _4 == _2 ? color.red  : color.blue  )
plot(EX2 == co_HTF or EX2 == cla_HTF ? _1_HTF : na, title="(E)MA 1 HTF", color=color.lime, linewidth=2, transp=50)
plot(EX2 == co_HTF                   ? _2_HTF : na, title="(E)MA 2 HTF", color=color.red , linewidth=2, transp=50)
plot(CX2 == cu_HTF or CX2 == clu_HTF ? _3_HTF : na, title="(E)MA 3 HTF", color= _3_HTF == _1_HTF ? color.lime : color.yellow, linewidth=2, transp=50)
plot(CX2 == cu_HTF                   ? _4_HTF : na, title="(E)MA 4 HTF", color= _4_HTF == _2_HTF ? color.red  : color.blue  , linewidth=2, transp=50)

////////////////////////////////////////////////////////////////////////////////////////////

// RSI

rsi_       = rsi(src, ler)
rsi_HTF    = security(syminfo.tickerid, RSI_HTF,  rsi_)

////////////////////////////////////////////////////////////////////////////////////////////

// MACD

fast_ma    = sma_source ? sma(src, fst) : ema(src, fst)
slow_ma    = sma_source ? sma(src, slw) : ema(src, slw)
macd       = fast_ma - slow_ma
signal     = sma_signal ? sma(macd, sgn) : ema(macd, sgn)
hist       = macd - signal

macd_HTF   = security(syminfo.tickerid, MACD_HTF, macd  )
signal_HTF = security(syminfo.tickerid, MACD_HTF, signal)

////////////////////////////////////////////////////////////////////////////////////////////

extra = 
 EX  == none    ? true                   :
 EX  == mch     ? macd >  signal         :
 EX  == mch0    ? macd >  0              :
 EX  == sgh0    ? signal >  0            :
 false

cxtra = 
 CX  == none    ? true                   :
 CX  == mcl     ? macd <= signal         :
 CX  == mcl0    ? macd <= 0              :
 CX  == sgl0    ? signal <= 0            :
 false

EXTRA = 
 EX2 == none    ? true                   :
 EX2 == mch_HTF ? macd_HTF >  signal_HTF :
 EX2 == mch0HTF ? macd_HTF >  0          :
 EX2 == sgh0HTF ? signal_HTF >  0        :
 EX2 == co_HTF  ? _1_HTF >  _2_HTF       :
 EX2 == cla_HTF ? cl_HTF >  _1_HTF       : 
 false
 
CXTRA =
 CX2 == none    ? true                   :
 CX2 == mcl_HTF ? macd_HTF <= signal_HTF :
 CX2 == mcl0HTF ? macd_HTF <= 0          :
 CX2 == sgl0HTF ? signal_HTF <= 0        :
 CX2 == cu_HTF  ? _3_HTF <= _4_HTF       :
 CX2 == clu_HTF ? cl_HTF <= _3_HTF       : 
 false

RSI = rsi_ > EH and rsi_ <= EL and rsi_HTF > EH_HTF and rsi_HTF <= EL_HTF

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

BUY = 
 ENT == co    and TIME and extra and EXTRA and RSI ? _1 > _2        : 
 ENT == cla   and TIME and extra and EXTRA and RSI ? src > _1       : 
 ENT == rsi   and TIME and extra and EXTRA         ? RSI            : 
 ENT == mch   and TIME and extra and EXTRA and RSI ? macd > signal  : 
 ENT == mch0  and TIME and extra and EXTRA and RSI ? macd > 0       : 
 ENT == sgh0  and TIME and extra and EXTRA and RSI ? signal > 0     : 
 na

SELL = 
 CLO == cu    and TIME and cxtra and CXTRA and RSI ? _3 <= _4       : 
 CLO == clu   and TIME and cxtra and CXTRA and RSI ? src <= _3      : 
 CLO == rsi   and TIME and cxtra and CXTRA         ? RSI            :
 CLO == mcl   and TIME and cxtra and CXTRA and RSI ? macd <= signal : 
 CLO == mcl0  and TIME and cxtra and CXTRA and RSI ? macd <= 0      : 
 CLO == sgl0  and TIME and cxtra and CXTRA and RSI ? signal <= 0    : 
 na

if BUY
    if (Type == _S_)
        strategy.close("[S]")
    else
        strategy.entry("[B]", strategy.long)

if SELL
    if (Type == _L_)
        strategy.close("[B]")
    else
        strategy.entry("[S]", strategy.short)

strategy.exit("[SL/TP]", "[B]", stop= sl ? SL_ : na, limit= tp ? TP_ : na)



আরো