
ईएमए गोल्ड क्रॉस रिवर्स रणनीति ईएमए सूचकांक पर आधारित एक मात्रात्मक ट्रेडिंग रणनीति है। यह रणनीति तीन अलग-अलग चक्रों के ईएमए वक्र का उपयोग करके ट्रेडिंग सिग्नल का निर्माण करती है, और मूल्य रिवर्स तंत्र के साथ मिलकर स्टॉप-लॉस स्टॉप सेट करती है, जिससे स्वचालित ट्रेडिंग होती है।
यह रणनीति तीन ईएमए वक्रों का उपयोग करती हैः
ट्रेडिंग सिग्नल का निर्माण निम्न तर्क के अनुसार होता हैः
मल्टीहेड सिग्नलः ईएमए 1 के गठन के बाद कीमत में एक पलटाव होता है, ईएमए 1 के ऊपर एक उच्चतम निचला बिंदु बनता है, पलटाव की तीव्रता ईएमए 2 को छूती नहीं है। शर्तों को पूरा करने के बाद, ईएमए 1 को फिर से पहनने पर अधिक करें।
रिक्त सिग्नलः ईएमए 1 के नीचे ईएमए 2 को छूने के बिना ईएमए 1 के नीचे एक और निचला उच्च बिंदु बनाने के लिए ईएमए 1 के नीचे कीमत के बाद एक रिक्ति होती है। शर्तें पूरी होने के बाद, ईएमए 1 के नीचे फिर से रिक्त करें।
स्टॉप लॉस विधि न्यूनतम मूल्य / उच्चतम मूल्य को वापस करने के लिए है। स्टॉप लॉस सेट 2 गुना है।
इस रणनीति के निम्नलिखित फायदे हैं:
इस रणनीति में कुछ जोखिम भी हैं:
पैरामीटर को ईएमए चक्र को समायोजित करके अनुकूलित किया जा सकता है, सीमा सीमा को रीडायरेक्ट कर सकता है, और अन्य संकेतकों के साथ फ़िल्टर सिग्नल को जोड़ सकता है।
इस रणनीति को निम्नलिखित पहलुओं से भी अनुकूलित किया जा सकता हैः
ईएमए गोल्ड क्रॉस रिवर्स रणनीति तीन ईएमए ट्रेडिंग सिस्टम के निर्माण के माध्यम से स्वचालित ट्रेडिंग को प्राप्त करती है, जिसमें मूल्य रिवर्स सुविधाओं के साथ स्टॉपलॉस सेट किया जाता है। यह रणनीति ट्रेडिंग जोखिम को प्रभावी ढंग से नियंत्रित करती है, और पैरामीटर को समायोजित करके बाजार के अनुसार अनुकूलित की जा सकती है। कुल मिलाकर, यह रणनीति तर्कसंगत है और व्यावहारिक रूप से लागू की जा सकती है। भविष्य में रुझान निर्णय, पैरामीटर अनुकूलन, जोखिम नियंत्रण आदि के संदर्भ में और अधिक अनुकूलित किया जा सकता है।
/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-20 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/
// created by Space Jellyfish
//@version=4
strategy("EMA pullback strategy", overlay = true, initial_capital=10000, commission_value = 0.075)
target_stop_ratio = input(title="Take Profit Stop Loss ratio", type=input.float, defval=2.06, minval=0.5, maxval=100)
riskLimit_low = input(title="lowest risk per trade", type=input.float, defval=0.008, minval=0, maxval=100)
riskLimit_high = input(title="highest risk per trade", type=input.float, defval=0.02, minval=0, maxval=100)
//give up the trade, if the risk is smaller than limit, adjust position size if risk is bigger than limit
ema_pullbackLevel_period = input(title="EMA1 for pullback level Period", type=input.integer, defval=33, minval=1, maxval=10000)
ema_pullbackLimiit_period = input(title="EMA2 for pullback limit Period", type=input.integer, defval=165, minval=1, maxval=10000)
ema_trend_period = input(title="EMA3 for trend Period", type=input.integer, defval=365, minval=1, maxval=10000)
startDate = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer, defval=2018, minval=2008, maxval=2200)
inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0))
ema_pullbackLevel = ema(close, ema_pullbackLevel_period)
ema_pullbackLimit = ema(close, ema_pullbackLimiit_period)
ema_trendDirection = ema(close, ema_trend_period)
//ema pullback
float pricePullAboveEMA_maxClose = na
float pricePullAboveEMA_maxHigh = na
float pricePullBelowEMA_minClose = na
float pricePullBelowMA_minLow = na
if(crossover(close, ema_pullbackLevel))
pricePullAboveEMA_maxClose := close
pricePullAboveEMA_maxHigh := high
else
pricePullAboveEMA_maxClose := pricePullAboveEMA_maxClose[1]
pricePullAboveEMA_maxHigh := pricePullAboveEMA_maxHigh[1]
if(close > pricePullAboveEMA_maxClose)
pricePullAboveEMA_maxClose := close
if(high > pricePullAboveEMA_maxHigh)
pricePullAboveEMA_maxHigh := high
if(crossunder(close, ema_pullbackLevel))
pricePullBelowEMA_minClose := close
pricePullBelowMA_minLow := low
else
pricePullBelowEMA_minClose :=pricePullBelowEMA_minClose[1]
pricePullBelowMA_minLow:=pricePullBelowMA_minLow[1]
if(close < pricePullBelowEMA_minClose)
pricePullBelowEMA_minClose := close
if(low < pricePullBelowMA_minLow)
pricePullBelowMA_minLow := low
long_strategy = crossover(close, ema_pullbackLevel) and pricePullBelowEMA_minClose < ema_pullbackLimit and ema_pullbackLevel>ema_trendDirection
short_strategy = crossunder(close, ema_pullbackLevel) and pricePullAboveEMA_maxClose > ema_pullbackLimit and ema_pullbackLevel<ema_trendDirection
var open_long_or_short = 0// long = 10000, short = -10000, no open = 0
//check if position is closed
if(strategy.position_size == 0)
open_long_or_short := 0
else
open_long_or_short := open_long_or_short[1]
float risk_long = na
float risk_short = na
float stopLoss = na
float takeProfit = na
float entry_price = na
float entryContracts = 0
risk_long := risk_long[1]
risk_short := risk_short[1]
//open a position determine the position size
if (strategy.position_size == 0 and long_strategy and inDateRange)
risk_long := (close - pricePullBelowMA_minLow) / close
if(risk_long < riskLimit_high)
entryContracts := strategy.equity / close
else
entryContracts := (strategy.equity * riskLimit_high / risk_long)/close
if(risk_long > riskLimit_low)
strategy.entry("long", strategy.long, qty = entryContracts, when = long_strategy)
open_long_or_short := 10000
if (strategy.position_size == 0 and short_strategy and inDateRange)
risk_short := (pricePullAboveEMA_maxHigh - close) / close
if(risk_short < riskLimit_high)
entryContracts := strategy.equity / close
else
entryContracts := (strategy.equity * riskLimit_high / risk_short)/close
if(risk_short > riskLimit_low)
strategy.entry("short", strategy.short, qty = entryContracts, when = short_strategy)
open_long_or_short := -10000
//take profit / stop loss
if(open_long_or_short == 10000)
stopLoss := strategy.position_avg_price*(1 - risk_long)
takeProfit := strategy.position_avg_price*(1 + target_stop_ratio * risk_long)
entry_price := strategy.position_avg_price
strategy.exit("Long exit","long", limit = takeProfit , stop = stopLoss)
if(open_long_or_short == -10000)
stopLoss := strategy.position_avg_price*(1 + risk_short)
takeProfit := strategy.position_avg_price*(1 - target_stop_ratio * risk_short)
entry_price := strategy.position_avg_price
strategy.exit("Short exit","short", limit = takeProfit, stop = stopLoss)
plot(ema_pullbackLevel, color=color.aqua, title="ema pullback level")
plot(ema_pullbackLimit, color=color.purple, title="ema pullback limit")
plot(ema_trendDirection, color=color.white, title="ema trend")
plot(entry_price, color = color.yellow, linewidth = 1, style = plot.style_linebr)
plot(stopLoss, color = color.red, linewidth = 1, style = plot.style_linebr)
plot(takeProfit, color = color.green, linewidth = 1, style = plot.style_linebr)
//