यह रणनीति ईएमए और आरएसआई दोनों संकेतकों को एक साथ जोड़ती है, जो प्रवृत्ति की दिशा को पहचानती है और बाहर निकलती है। जब कीमत ईएमए से ऊपर होती है और आरएसआई खरीदने के बिंदु से नीचे होती है, तो यह बढ़ जाती है; जब कीमत ईएमए से नीचे होती है और आरएसआई बेचने के बिंदु से ऊपर होती है, तो यह गिर जाती है।
200-दिन ईएमए की गणना करें, यह प्रवृत्ति के लिए एक औसत रेखा सूचक है। ईएमए मूल्य परिवर्तनों के लिए तेजी से प्रतिक्रिया करता है, जिससे प्रवृत्ति की दिशा का प्रभावी ढंग से आकलन किया जा सकता है।
14 दिन के आरएसआई की गणना करें, यह निर्धारित करने के लिए कि क्या ओवरबॉट ओवरबॉट है। आरएसआई को 50 से कम ओवरबॉट और 50 से अधिक ओवरबॉट के रूप में माना जाता है। साथ ही आरएसआई के ऊपर और नीचे की प्रवृत्ति को खरीदने और बेचने का समय निर्धारित करें।
अंतिम दो K लाइनों के समापन मूल्य के आकार के संबंध की तुलना करें, प्रवृत्ति की दिशा का न्याय करें। अंतिम दो समापन कीमतों को वृद्धिशील रूप से ऊपर की प्रवृत्ति में माना जाता है, और गिरावट को गिरावट की प्रवृत्ति में माना जाता है।
जब कीमत 200 दिन ईएमए से ऊपर होती है और आरएसआई 50 से नीचे और ऊपर होती है, तो एक खरीद संकेत जारी किया जाता है।
जब कीमत 200 दिन ईएमए से नीचे है और आरएसआई 50 से ऊपर है और नीचे है, तो बिक्री संकेत जारी करें।
एटीआर और नवीनतम 14 K लाइनों के लिए उच्चतम और निम्नतम मूल्य का उपयोग स्टॉपलॉस और स्टॉपस्टॉप की गणना के लिए किया जाता है।
मोबाइल स्टॉप लॉस रणनीति का उपयोग करके जोखिम को नियंत्रित करें
दोहरे संकेतक प्रवृत्ति की दिशा का आकलन करने के लिए संयोजन, सटीकता में सुधार। ईएमए मुख्य प्रवृत्ति का आकलन करता है, आरएसआई और के-लाइन संबंध स्थानीय प्रवृत्ति और खरीद और बिक्री के समय का आकलन करते हैं।
आरएसआई सूचकांक प्रभावी रूप से झूठे ब्रेक से बचता है। आरएसआई की अधिक रिक्त स्थिति ईएमए सूचकांक के पीछे आने वाले अनावश्यक लेनदेन से बचती है।
मोबाइल स्टॉप लॉस व्यक्तिगत बड़े आयाम के उतार-चढ़ाव से होने वाले नुकसान को प्रभावी ढंग से नियंत्रित करता है।
अनुकूलित पैरामीटर संयोजन रणनीति पैरामीटर को मजबूत बनाता है।
बड़े आयाम के उतार-चढ़ाव के दौरान, ईएमए और आरएसआई में गलत संकेतों की संभावना अधिक होती है, और ऐसी घटनाओं से बचना चाहिए।
स्टॉपलॉस बहुत छोटा है, जिससे बहुत बार स्टॉप हो जाता है; स्टॉपलॉस बहुत बड़ा है, जिससे नुकसान को नियंत्रित करना मुश्किल है। एटीआर पैरामीटर को उचित रूप से समायोजित किया जाना चाहिए।
दिन के दौरान ईएमए को तोड़ने के बाद एक और समायोजन की संभावना है, इस समय आरएसआई पैरामीटर को उचित रूप से ढीला किया जाना चाहिए ताकि रुझान से चूक न हो।
एटीआर पैरामीटर और स्टॉप दूरी को उचित रूप से समायोजित करें और बेहतर स्टॉप पॉइंट ढूंढें।
ईएमए और आरएसआई संकेतकों के पैरामीटर को अनुकूलित करें और अधिक उपयुक्त पैरामीटर संयोजन ढूंढें।
सिग्नल की सटीकता को बढ़ाने के लिए अन्य सहायक संकेतकों जैसे कि MACD, ब्रिन बैंड आदि को फ़िल्टर करें।
विभिन्न प्रजातियों के पैरामीटर सेटिंग्स की भिन्नता का परीक्षण किया जा सकता है, जिससे पैरामीटर की स्थिरता में और सुधार हो सकता है।
आप कुछ समय के लिए रणनीति को बंद करने की कोशिश कर सकते हैं ताकि गलत संकेतों के लिए उपयुक्त समय से बचा जा सके।
इस रणनीति में कुल मिलाकर स्थिरता है, आय स्थिर है, अधिकतम निकासी और शेप दर भी बहुत अच्छी है। पैरामीटर अनुकूलन और स्टॉपलॉस समायोजन के माध्यम से रणनीति की प्रभावशीलता को और बढ़ाया जा सकता है। साथ ही साथ कुछ स्थितियों में उत्पन्न होने वाले गलत संकेतों के लिए सतर्क रहने की आवश्यकता है, सहायक संकेतकों या समय फ़िल्टर के माध्यम से इन स्थितियों से बचने के लिए। इस रणनीति में निरंतर अनुकूलन के माध्यम से एक स्थिर रणनीति बनने की संभावना है जो लंबे समय तक रखने लायक है।
/*backtest
start: 2023-01-01 00:00:00
end: 2023-08-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
// strategy("EMA RSI Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=1)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Author : AJ Rupasinghege
// Date : 06/11/2022
// Release : v6.0
// Description : If the last two closes are in ascending order, the rsi is below 50 and ascending, and the current candle is above 200 ema, then LONG.
// If the last two closes are in descending order, the rsi is above 50 and descending, and the current candle is below 200 ema, then SHORT.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////// INPUTS //////////////////////////////////////////////////////////////
ema_length = input(200, "EMA Length")
rsi_buy_value = input(50, "RSI Buy Value")
rsi_sell_value = input(50, "RSI Sell Value")
show_data = input.bool(0, "Show Data")
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////// VARIABLES //////////////////////////////////////////////////////////
var stop_loss = 0.0
var last_trade_entry_price = 0.0
var low_value= 0.0
var atr = 0.0
var high_value = 0.0
var stop_loss_points = 0.0
var limit = 0.0
var bar_id_entry = 0
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////// FUNCTIONS //////////////////////////////////////////////////////////
getTradeConditionsLong() =>
//@function Used to calculate stop_loss, stop_loss points, limit and label values for long trades
//@param direction (float) // strategy.poistion.size
//@returns stop_loss, stop_loss_points, limit
//@Dependancies low_value, atr, last_trade_entry_price,bar_id_entry
_stop_loss = low_value - atr
_stop_lossPoints = (last_trade_entry_price - _stop_loss) *100000
_limit = last_trade_entry_price + (last_trade_entry_price - low_value + atr)
value = "OpenValue: " + str.tostring(last_trade_entry_price) +
"\n OpenBarIndex: " + str.tostring(bar_id_entry) +
"\n LowValue: " + str.tostring(low_value) +
"\n atr: " + str.tostring(atr) + "\n stop_loss: " +
str.tostring(_stop_loss) + "\n Limit: " +
str.tostring(_limit)
[_stop_loss,_stop_lossPoints,_limit, value]
getTradeConditionsShort() =>
//@function Used to calculate stop_loss, stop_loss points, limit and label values for short trades
//@param direction (float) // strategy.poistion.size
//@returns stop_loss, stop_loss_points, limit
//@Dependancies high_value, atr, last_trade_entry_price,bar_id_entry
_stop_loss = high_value + atr
_stop_lossPoints = (_stop_loss -last_trade_entry_price) * 100000
_limit = last_trade_entry_price - (high_value - last_trade_entry_price + atr)
value = "OpenValue: " + str.tostring(last_trade_entry_price) +
"\n OpenBarIndex: " + str.tostring(bar_id_entry) +
"\n HighValue: " + str.tostring(high_value) +
"\n atr: " + str.tostring(atr) + "\n stop_loss: " +
str.tostring(_stop_loss) + "\n Limit: " +
str.tostring(_limit)
[_stop_loss,_stop_lossPoints,_limit, value]
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////// SIGNALS //////////////////////////////////////////////////////////
ema = ta.ema(close,ema_length)
rsi = ta.rsi(close,14)
ema_buy_signal = ema < low
ema_sell_signal = ema > high
rsi_buy_signal = rsi < rsi_buy_value and rsi[1] < rsi[0]
rsi_sell_signal = rsi > rsi_sell_value and rsi[1] > rsi[0]
trend_buy_signal = close[2] < close[1] and close[1] < close[0]
trend_sell_signal = close[2] > close[1] and close[1] > close[0]
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////// TRADES //////////////////////////////////////////////////////////
long = trend_buy_signal
and ema_buy_signal
and rsi_buy_signal
short = trend_sell_signal
and ema_sell_signal
and rsi_sell_signal
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////// STRATEGY //////////////////////////////////////////////////////////
if long
strategy.entry("Long", strategy.long)
if short
strategy.entry("Short", strategy.short)
// Calculate Trade Entry Variables
last_trade_entry_price := strategy.opentrades.entry_price(strategy.opentrades - 1)
bar_id_entry := strategy.opentrades.entry_bar_index(strategy.opentrades - 1)
atr := ta.atr(14)
low_value := ta.lowest(14)
high_value := ta.highest(14)
// Exit Strategy for Long Positions
if (strategy.position_size[1] != strategy.position_size and strategy.position_size>0)
[_stop_loss,_stop_loss_points, _limit, value] = getTradeConditionsLong()
stop_loss := _stop_loss
stop_loss_points := _stop_loss_points
limit := _limit
if show_data
label.new(bar_id_entry,stop_loss - 0.005,str.tostring(value),xloc = xloc.bar_index,yloc = yloc.price,style = label.style_none)
strategy.exit("Long Exit", "Long", trail_offset = stop_loss_points/2, trail_points = stop_loss_points/2 , stop = stop_loss , limit = limit )
// Exit Strategy for Short Positions
if (strategy.position_size[1] != strategy.position_size and strategy.position_size<0)
[_stop_loss,_stop_loss_points, _limit, value] = getTradeConditionsShort()
stop_loss := _stop_loss
stop_loss_points := _stop_loss_points
limit := _limit
if show_data
label.new(bar_id_entry,stop_loss + 0.005,str.tostring(value),xloc = xloc.bar_index,yloc = yloc.price,style = label.style_none)
strategy.exit("Short Exit", "Short", trail_offset = stop_loss_points/2, trail_points = stop_loss_points/2 , stop = stop_loss , limit = limit )
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////// PLOTS //////////////////////////////////////////////////////////
plot(ema, "SMA", color = color.blue, linewidth = 2 )
p1 = plot(strategy.position_size>0? stop_loss:na, style = plot.style_linebr , color = color.rgb(82, 240, 42) )
p2 = plot(strategy.position_size<0? stop_loss:na, style = plot.style_linebr , color = color.rgb(223, 85, 85) )
p3 = plot(strategy.position_size!=0?limit : na, style = plot.style_linebr , color = color.rgb(94, 85, 223, 100) )
fill(p1, p3, color = color.new(color.green, 90))
fill(p2, p3, color = color.new(#e98787, 90))