इस लेख में स्टॉक सूचक और ईएमए चलती औसत को जोड़ने वाली एक मात्रात्मक ट्रेडिंग रणनीति का विस्तार से वर्णन किया गया है। यह स्टॉक मूल्यों के आधार पर ट्रेडिंग सिग्नल उत्पन्न करता है और गैर-मुख्यधारा के संकेतों को फ़िल्टर करने के लिए ईएमए का उपयोग करता है।
I. रणनीतिक तर्क
मुख्य उपकरण और तर्क हैंः
K और D मानों के साथ स्टॉक सूचक की गणना करें, जहां K तेजी से मूल्य परिवर्तन को दर्शाता है और D चिकनी संकेत है।
स्टॉक के लिए ओवरबॉट/ओवरसोल्ड जोन सेट करें। सिग्नल K और D के सापेक्ष मूल्यों पर आधारित हैं।
मूल्य मुख्यधारा के रुझान को मापने के लिए एक अवधि में ईएमए की गणना करें।
केवल तभी ट्रेड करें जब स्टॉक संकेत ईएमए दिशा से सहमत हों।
स्टॉप लॉस के साथ सिग्नल पर लॉन्ग/शॉर्ट पोजीशन बनाएं और लाभ लें।
स्टॉक एक साथ ओवरबॉट/ओवरसोल्ड अवसरों को पकड़ता है और ईएमए अमान्य संकेतों को फ़िल्टर करता है, जिससे एक मजबूत रणनीति बनती है।
II. रणनीति के फायदे
सबसे बड़ा लाभ संकेतकों की पूरकता है। स्टॉक ओ/एस स्तरों और ईएमए मुख्यधारा के रुझान का आकलन करता है, जो त्रुटियों को कम करने के लिए संयुक्त होता है।
इसके अलावा, समायोज्य K/D मान विभिन्न उत्पादों में अनुकूलन की अनुमति देते हैं।
अंत में, स्टॉप लॉस/टेक प्रॉफिट स्पष्ट रूप से सावधानीपूर्वक धन प्रबंधन के लिए जोखिम/लाभ को परिभाषित करता है।
III. संभावित कमजोरियां
हालाँकि, कुछ संभावित मुद्दे हैंः
सबसे पहले, स्टॉक्स और ईएमए दोनों में देरी हो सकती है, जिससे इष्टतम प्रविष्टियों को याद किया जा सकता है।
दूसरा, तंग स्टॉप बहुत जल्दी कई अवैधताओं को ट्रिगर कर सकते हैं।
अंत में, ओवरफिटिंग से बचने के लिए व्यापक पैरामीटर अनुकूलन की आवश्यकता होती है।
IV. सारांश
संक्षेप में, इस लेख में स्टॉक और ईएमए को जोड़ने वाली एक मात्रात्मक रणनीति की व्याख्या की गई है। यह ओवरबॉट / ओवरसोल्ड रिवर्सल संभावनाओं की पहचान करता है, ईएमए अमान्य संकेतों को फ़िल्टर करता है। उचित ट्यूनिंग के साथ, यह रणनीति स्थिर लाभ प्राप्त कर सकती है लेकिन उल्लिखित जोखिमों का प्रबंधन करने की आवश्यकता है।
/*backtest start: 2023-08-15 00:00:00 end: 2023-08-26 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/ //@version=5 strategy(title="EMA Stoch Strategy For ProfitView", overlay=true, calc_on_every_tick=true, process_orders_on_close=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1, initial_capital=1000) // take profit e stop loss TakeProfitPercent = input.float(defval = 0.0, title="Take Profit (%) [0 = Disabled]",minval = 0, step=.25,group='TP / SL') StopLossPercent = input.float(defval = 0.0, title="Stop Loss (%) [0 = Disabled]",minval = 0, step=.25,group='TP / SL') // Stoch smoothK = input.int(1, title="K Smoothing", minval=1,group='Stochastic') periodD = input.int(3, title="D Smoothing", minval=1,group='Stochastic') lenghtRSI= input.int(14, "RSI Length", minval=1) lenghtStoch = input.int(14, "Stochastic Length", minval=1) src = input(close, title="RSI Source") rsi1 = ta.rsi(src, lenghtRSI) k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lenghtStoch), smoothK) d = ta.sma(k, periodD) plot(k, title="K", color=#2962FF) plot(d, title="D", color=#FF6D00) // bgcolor(color=color.from_gradient(k, 0, 100, color.new(#2962FF, 100), color.new(#2962FF, 95)), title="K BG") // bgcolor(color=color.from_gradient(d, 0, 100, color.new(#FF6D00, 100), color.new(#FF6D00, 95)), title="D BG") // ema src1= input(close,title='Source EMA ',group='EMA') len1= input(200,title='Length EMA ',group='EMA') ema1= ta.ema(src1,len1) plot(ema1,title='EMA',color= color.blue ,linewidth=2) // signals LongVal= input(20,title='Stoch below/cross this value for Long signals',group='Signal Options') scegliLong= input.string('Stoch Below Value', options= ['Stoch Below Value' , 'K&D Cross Below Value' , 'Stoch CrossUp the Value'] , title='Long Signal Type') long1= scegliLong == 'Stoch Below Value' ? k < LongVal and d < LongVal and close > ema1 : na long2= scegliLong == 'K&D Cross Below Value' ? ta.cross(k,d) and k < LongVal and d < LongVal and close > ema1 : na long3= scegliLong == 'Stoch CrossUp the Value' ? ta.crossover(k,LongVal) and close > ema1 : na shortVal= input(80,title='Stoch above/cross this value for Short signals',group='Signal Options') scegliShort= input.string('Stoch Above Value', options= ['Stoch Above Value' , 'K&D Cross Above Value' , 'Stoch CrossDown the Value'] , title='Short Signal Type' ) short1= scegliShort == 'Stoch Above Value' ? k > shortVal and d > shortVal and close < ema1 : na short2= scegliShort == 'K&D Cross Above Value' ? ta.cross(k,d) and k > shortVal and d > shortVal and close < ema1 : na short3= scegliShort == 'Stoch CrossDown the Value' ? ta.crossunder(k,shortVal) and close < ema1 : na // Strategy Backtest Limiting Algorithm/ i_startTime = input(defval = timestamp("01 Jan 2014 00:00 +0000"), title = "Backtesting Start Time", inline="timestart", group='Backtesting') i_endTime = input(defval = timestamp("01 Jan 2100 23:59 +0000"), title = "Backtesting End Time", inline="timeend", group='Backtesting') timeCond = true pv_ex = input.string("deribit-testnet", title="Exchange", group='PV Settings') pv_sym = input.string("btc-perpetual", title="Symbol", group='PV Settings') pv_acc = input.string("", title="Account", group='PV Settings') pv_alert_long = input.string("", title="PV Alert Name Longs", group='PV Settings') pv_alert_short = input.string("", title="PV Alert Name Shorts", group='PV Settings') pv_alert_cancel = input.string("", title="PV Alert Name TP/SL", group='PV Settings') profit_abs = (close * (TakeProfitPercent / 100)) stop_abs = (close * (StopLossPercent / 100)) ProfitTarget = TakeProfitPercent > 0 ? profit_abs / syminfo.mintick : na LossTarget = StopLossPercent > 0 ? stop_abs / syminfo.mintick : na // Make sure we are within the bar range, Set up entries and exit conditions var entryprice = 0.0 var profitprice = 0.0 var stopprice = 0.0 exsym = pv_ex == "" ? "" : "ex=" + pv_ex + "," exsym := pv_sym == "" ? exsym : exsym + "sym=" + pv_sym if ((long1 or long2 or long3) and timeCond and strategy.position_size <= 0) strategy.entry("Long", strategy.long, when=barstate.isconfirmed) entryprice := close profitprice := entryprice+profit_abs stopprice := entryprice-stop_abs tpsl_str = TakeProfitPercent > 0 ? ",mytp=" + str.tostring(profitprice) : "" tpsl_str := StopLossPercent > 0 ? tpsl_str + ",mysl=" + str.tostring(stopprice) : tpsl_str alert(pv_alert_long + "(" + exsym + ",acc=" + pv_acc + tpsl_str + ")", alert.freq_once_per_bar_close) if ((short1 or short2 or short3) and timeCond and strategy.position_size >= 0) strategy.entry("Short", strategy.short, when=barstate.isconfirmed) entryprice := close profitprice := entryprice-profit_abs stopprice := entryprice+stop_abs tpsl_str = TakeProfitPercent > 0 ? ",mytp=" + str.tostring(profitprice) : "" tpsl_str := StopLossPercent > 0 ? tpsl_str + ",mysl=" + str.tostring(stopprice) : tpsl_str alert(pv_alert_short + "(" + exsym + ",acc=" + pv_acc + tpsl_str + ")", alert.freq_once_per_bar_close) tpsl_hit_long = (strategy.position_size[1] > 0 and ((TakeProfitPercent > 0 and high > profitprice[1]) or (StopLossPercent > 0 and low < stopprice[1]))) tpsl_hit_short = (strategy.position_size[1] < 0 and ((TakeProfitPercent > 0 and low < profitprice[1]) or (StopLossPercent > 0 and high > stopprice[1]))) if (tpsl_hit_long or tpsl_hit_short) alert(pv_alert_cancel + "(" + exsym + ",acc=" + pv_acc + ")", alert.freq_once_per_bar) strategy.exit("Exit Long (TP/SL)", from_entry = "Long" , profit = ProfitTarget, loss = LossTarget) strategy.exit("Exit Short (TP/SL)", from_entry = "Short", profit = ProfitTarget, loss = LossTarget) plot(entryprice, title="Entry Price", color=strategy.opentrades > 0 ? color.gray : color.new(color.gray, 100)) plot(profitprice, title="Profit Price", color=strategy.opentrades > 0 and TakeProfitPercent > 0 ? color.green : color.new(color.green, 100)) plot(stopprice, title="Stop Price", color=strategy.opentrades > 0 and StopLossPercent > 0? color.red : color.new(color.red, 100))