नौ मूविंग एवरेज क्रॉसओवर रणनीतियाँ


निर्माण तिथि: 2024-01-02 10:37:21 अंत में संशोधित करें: 2024-01-02 10:37:21
कॉपी: 0 क्लिक्स: 767
1
ध्यान केंद्रित करना
1621
समर्थक

नौ मूविंग एवरेज क्रॉसओवर रणनीतियाँ

अवलोकन

इस रणनीति में दो अलग-अलग पैरामीटर सेट की चलती औसत का उपयोग किया जाता है, जो क्रॉसिंग सिग्नल के आधार पर प्रवृत्ति की दिशा का आकलन करने के लिए, स्थिति खोलने और स्थिति को बंद करने के लिए। रणनीति में 9 अलग-अलग प्रकार के चलती औसत का चयन करने की अनुमति है, जिसमें सरल चलती औसत (एसएमए), सूचकांक चलती औसत (ईएमए), भारित चलती औसत (डब्ल्यूएमए), अल्मो चलती औसत (एएलएमए), संख्यात्मक मूल्य चलती औसत (वीडब्ल्यूएमए) आदि शामिल हैं। रणनीति में एक ही समय में स्टॉप लॉस और स्टॉप पॉइंट्स की स्थापना की जाती है।

रणनीति सिद्धांत

इस रणनीति का मूल तर्क दो चलती औसत के मूल्यों की तुलना करना है और दो चलती औसत के क्रॉसिंग के आधार पर बाजार की प्रवृत्ति की दिशा का न्याय करना है। विशेष रूप से, हम दो चलती औसत सेट करते हैं। जब तेज लाइन धीमी लाइन को पार करती है, तो यह माना जाता है कि बाजार ऊपर की ओर बढ़ रहा है, और अधिक; जब तेज लाइन धीमी लाइन को पार करती है, तो यह माना जाता है कि बाजार गिरावट की ओर बढ़ रहा है।

स्थिति में प्रवेश करने के बाद, यदि कीमत स्टॉप-लॉस लाइन को छूती है, तो नुकसान होता है, स्थिति से बाहर निकलता है; यदि कीमत स्टॉप-लॉस लाइन को छूती है, तो उम्मीद के अनुसार लाभ होता है, तो स्थिति से बाहर निकलता है। इस तरह से मुनाफे को लॉक किया जा सकता है, ताकि नुकसान का विस्तार न हो सके।

कोड लॉजिक के अनुसार, रणनीति को चार भागों में विभाजित किया गया हैः

  1. चलती औसत की गणना करें. उपयोगकर्ता द्वारा चयनित चलती औसत प्रकार के आधार पर, तेज और धीमी रेखाओं के लिए चलती औसत की गणना करें।

  2. ट्रेडिंग सिग्नल उत्पन्न करना। तेज और धीमी रेखा के क्रॉसिंग के आधार पर, अधिक और कम सिग्नल उत्पन्न करना।

  3. स्टॉप लॉस स्टॉप सेट करें। स्टॉप लॉस लाइन और स्टॉप लॉस लाइन की कीमतों की गणना वास्तविक समय में की जाती है, जो कि प्रवेश मूल्य और सेट स्टॉप लॉस स्टॉप प्रतिशत के आधार पर होती है।

  4. प्रवेश और बाहर निकलना अधिक और शून्य संकेतों के अनुसार प्रवेश करना, स्टॉप लॉस स्टॉप सिग्नल के अनुसार बाहर निकलना

श्रेष्ठता विश्लेषण

इस रणनीति का सबसे बड़ा लाभ यह है कि कई प्रकार के चलती औसत को चुनने की स्वतंत्रता है। विभिन्न प्रकार के चलती औसत की कीमत के प्रति संवेदनशीलता अलग-अलग होती है, उपयोगकर्ता अपनी आवश्यकताओं के अनुसार उपयुक्त चलती औसत का चयन कर सकते हैं। इसके अलावा, समय आयामों के अनुकूलन के लिए चलती औसत की लंबाई को अनुकूलित किया जा सकता है।

एक और लाभ यह है कि एक स्टॉप-लॉस-स्टॉप तंत्र स्थापित किया गया है। यह प्रभावी रूप से नुकसान को और अधिक विस्तार से रोक सकता है, जबकि मुनाफे को लॉक कर सकता है। कुल मिलाकर, यह रणनीति अधिक लचीली है और विभिन्न आवश्यकताओं वाले उपयोगकर्ताओं के लिए अनुकूलन योग्य है।

जोखिम विश्लेषण

इस रणनीति का मुख्य जोखिम यह है कि चलती औसत में देरी होती है। जब कीमतों में अचानक भारी उतार-चढ़ाव होता है, तो चलती औसत समय पर प्रतिक्रिया करने में असमर्थ होता है, जिससे सबसे अच्छा प्रवेश या प्रस्थान का समय छूट सकता है।

एक और जोखिम है कि स्टॉप लॉस स्टॉप पोजीशन की सेटिंग। यदि सेट की गई सीमा बहुत छोटी है, तो यह बोली लगाने की संभावना है; यदि यह बहुत बड़ी है, तो यह मुनाफे को समय पर बंद नहीं करने का कारण बन सकता है। इसलिए वास्तविक स्थिति में बाजार की स्थिति के अनुसार स्टॉप लॉस स्टॉप के पैरामीटर को अनुकूलित करें।

कुल मिलाकर, यह रणनीति मुख्य रूप से प्रवृत्ति की दिशा निर्धारित करने के लिए चलती औसत पर निर्भर करती है, इसलिए अचानक घटनाओं के कारण कीमतों में भारी उतार-चढ़ाव होने पर प्रभाव छूट जाता है। इसके अलावा, पैरामीटर सेटिंग्स रणनीति के लाभ पर अधिक प्रभाव डालती हैं।

अनुकूलन दिशा

इस रणनीति को निम्नलिखित पहलुओं से अनुकूलित किया जा सकता हैः

  1. चलती औसत के प्रकारों का अनुकूलन करें। विभिन्न बाजार स्थितियों और ट्रेडिंग किस्मों के आधार पर अधिक उपयुक्त चलती औसत चुनें।

  2. चलती औसत को अनुकूलित करने के लिए पैरामीटर. चलती औसत की अवधि को समायोजित करें ताकि यह बाजार की विशेषताओं के अनुरूप हो।

  3. अन्य संकेतक फ़िल्टर जोड़ें। MACD, RSI आदि जैसे अन्य संकेतक शामिल किए जा सकते हैं ताकि बिना रुझान वाले बाजार में बार-बार व्यापार किया जा सके।

  4. स्टॉप लॉस स्टॉप अनुपात का अनुकूलन करें। ऐतिहासिक डेटा के आधार पर सबसे अच्छा स्टॉप लॉस स्टॉप पैरामीटर की गणना करें।

  5. मशीन लर्निंग मॉडल जोड़ें। एलएसटीएम, यादृच्छिक वन और अन्य एल्गोरिदम का उपयोग करके मूल्य आंदोलनों की भविष्यवाणी करें, और ट्रेडिंग सिग्नल उत्पन्न करने में सहायता करें।

  6. स्टॉप-ट्रैकिंग एल्गोरिदम का उपयोग करना। स्टॉप-लॉस लाइनों को कीमतों के साथ धीरे-धीरे स्थानांतरित करने की अनुमति देता है, जिससे स्टॉप-लॉस ट्रिगर होने की संभावना कम हो जाती है।

संक्षेप

इस रणनीति के लिए समग्र रूप से सरल और प्रत्यक्ष है, प्रवृत्ति की दिशा का आकलन करके, यह एक विशिष्ट प्रवृत्ति का पालन करने वाली रणनीति है। इसके फायदे सरल और समझने में आसान हैं, उच्च लचीलापन है, आप अपने आप को चलती औसत के प्रकार और पैरामीटर चुन सकते हैं। इसके नुकसान है कि यह आकस्मिक घटनाओं के लिए धीमी प्रतिक्रिया है, कुछ हद तक देरी के बाद। कुल मिलाकर, यह रणनीति उन निवेशकों के लिए उपयुक्त है जो लंबे समय तक स्थिर रिटर्न की तलाश में हैं। अनुकूलन के माध्यम से रणनीति की स्थिरता और रिटर्न के स्तर को और बढ़ाया जा सकता है।

रणनीति स्रोत कोड
/*backtest
start: 2022-12-26 00:00:00
end: 2024-01-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Kozlod - Yet Another Moving Average Cross Strategy", shorttitle="kozlod_yamacs", overlay = true)

// 
// author: Kozlod
// date: 2018-03-06
// 

////////////
// INPUTS //
////////////

ma_type      = input(title = "MA Type",          defval = "SMA", options = ['SMA', 'EMA', 'WMA', 'ALMA', 'VWMA', 'HMA', 'LSMA', 'SMMA', 'DEMA'])
short_ma_len = input(title = "Short MA Length",  defval = 5,     minval = 1)
short_ma_src = input(title = "Short MA Source",   defval = close)
long_ma_len  = input(title = "Long MA Length",   defval = 15,    minval = 2)
long_ma_src  = input(title = "Long MA Source",    defval = close)
alma_offset  = input(title = "ALMA Offset",     type = float,   defval = 0.85,  step = 0.01, minval = 0, maxval = 1)
alma_sigma   = input(title = "ALMA Sigma",      type = float,   defval = 6,     step = 0.01)
lsma_offset  = input(title = "LSMA Offset",      defval = 0,     step = 1)

sl_lev_perc  = input(title = "SL Level % (0 - Off)", type = float,   defval = 0,  minval = 0, step = 0.01)
pt_lev_perc  = input(title = "PT Level % (0 - Off)", type = float,   defval = 0,  minval = 0, step = 0.01)

// Set initial values to 0
short_ma = 0.0
long_ma  = 0.0

// Simple Moving Average (SMA)
if ma_type == 'SMA' 
    short_ma := sma(short_ma_src, short_ma_len)
    long_ma  := sma(long_ma_src,  long_ma_len)

// Exponential Moving Average (EMA)
if ma_type == 'EMA'
    short_ma := ema(short_ma_src, short_ma_len)
    long_ma  := ema(long_ma_src,  long_ma_len)

// Weighted Moving Average (WMA)
if ma_type == 'WMA'
    short_ma := wma(short_ma_src, short_ma_len)
    long_ma  := wma(long_ma_src,  long_ma_len)

// Arnaud Legoux Moving Average (ALMA)
if ma_type == 'ALMA'
    short_ma := alma(short_ma_src, short_ma_len,  alma_offset, alma_sigma)
    long_ma  := alma(long_ma_src,  long_ma_len,   alma_offset, alma_sigma)

// Hull Moving Average (HMA)
if ma_type == 'HMA'
    short_ma := wma(2*wma(short_ma_src, short_ma_len/2)-wma(short_ma_src, short_ma_len), round(sqrt(short_ma_len)))
    long_ma  := wma(2*wma(long_ma_src,  long_ma_len /2)-wma(long_ma_src,  long_ma_len),  round(sqrt(long_ma_len)))

// Volume-weighted Moving Average (VWMA)
if ma_type == 'VWMA'
    short_ma := vwma(short_ma_src, short_ma_len)
    long_ma  := vwma(long_ma_src,  long_ma_len)

// Least Square Moving Average (LSMA)
if ma_type == 'LSMA'
    short_ma := linreg(short_ma_src, short_ma_len, lsma_offset)
    long_ma  := linreg(long_ma_src,  long_ma_len,  lsma_offset)

// Smoothed Moving Average (SMMA)    
if ma_type == 'SMMA'
    short_ma := na(short_ma[1]) ? sma(short_ma_src, short_ma_len) : (short_ma[1] * (short_ma_len - 1) + short_ma_src) / short_ma_len
    long_ma  := na(long_ma[1])  ? sma(long_ma_src,  long_ma_len)  : (long_ma[1]  * (long_ma_len  - 1) + long_ma_src)  / long_ma_len

// Double Exponential Moving Average (DEMA)
if ma_type == 'DEMA'
    e1_short = ema(short_ma_src, short_ma_len)
    e1_long  = ema(long_ma_src,  long_ma_len)
    
    short_ma := 2 * e1_short - ema(e1_short, short_ma_len)
    long_ma  := 2 * e1_long  - ema(e1_long,  long_ma_len)

/////////////
// SIGNALS //
/////////////

long_signal  = crossover( short_ma, long_ma)
short_signal = crossunder(short_ma, long_ma)

// Calculate PT/SL levels 
// Initial values 
last_signal    = 0
prev_tr_price  = 0.0
pt_level       = 0.0
sl_level       = 0.0

// Calculate previous trade price
prev_tr_price := long_signal[1] or short_signal[1] ? open : nz(last_signal[1]) != 0 ? prev_tr_price[1] : na

// Calculate SL/PT levels 
pt_level := nz(last_signal[1]) == 1 ? prev_tr_price * (1 + pt_lev_perc / 100) : nz(last_signal[1]) == -1 ? prev_tr_price * (1 - pt_lev_perc / 100)  : na
sl_level := nz(last_signal[1]) == 1 ? prev_tr_price * (1 - sl_lev_perc / 100) : nz(last_signal[1]) == -1 ? prev_tr_price * (1 + sl_lev_perc / 100)  : na

// Calculate if price hit sl/pt 
long_hit_pt = pt_lev_perc > 0 and nz(last_signal[1]) ==  1 and close >= pt_level
long_hit_sl = sl_lev_perc > 0 and nz(last_signal[1]) ==  1 and close <= sl_level

short_hit_pt = pt_lev_perc > 0 and nz(last_signal[1]) ==  -1 and close <= pt_level
short_hit_sl = sl_lev_perc > 0 and nz(last_signal[1]) ==  -1 and close >= sl_level

// What is last active trade? 
last_signal := long_signal ? 1 : short_signal ? -1 : long_hit_pt or long_hit_sl or short_hit_pt or short_hit_sl ? 0 : nz(last_signal[1])

//////////////
// PLOTTING //
//////////////

// Plot MAs
plot(short_ma, color = red,   linewidth = 2)
plot(long_ma,  color = green, linewidth = 2)


// Plot Levels 
plotshape(prev_tr_price, style = shape.cross, color = gray, location  = location.absolute, size = size.small)


plotshape(sl_lev_perc > 0 ? sl_level : na, style = shape.cross, color = red,   location  = location.absolute, size = size.small)
plotshape(pt_lev_perc > 0 ? pt_level : na, style = shape.cross, color = green, location  = location.absolute, size = size.small)

//////////////
// STRATEGY //
//////////////

strategy.entry("long",  true,  when = long_signal)
strategy.entry("short", false, when = short_signal)

strategy.close("long",  when = long_hit_pt  or long_hit_sl)
strategy.close("short", when = short_hit_pt or short_hit_sl)