ईएमए और संचयी वॉल्यूम क्रॉसओवर रणनीति के लिए लंबी लघु

लेखक:चाओझांग, दिनांक: 2023-09-20 11:48:34
टैगः

अवलोकन

यह रणनीति ईएमए और संचयी मात्रा संकेतकों को जोड़ती है, जो रुझानों को निर्धारित करने के लिए उनकी क्रॉसओवर स्थितियों के आधार पर खरीद और बिक्री संकेत उत्पन्न करती है। यह एक विशिष्ट प्रवृत्ति के बाद की रणनीति से संबंधित है, जो लंबी समय सीमा के बाजार की दिशाओं को ट्रैक करती है।

रणनीति तर्क

50-दिवसीय ईएमए और 100-दिवसीय संचयी वॉल्यूम संकेतकों की गणना की जाती है। जब ईएमए नीचे से संचयी वॉल्यूम के ऊपर पार करता है, तो एक खरीद संकेत लंबे समय तक जाने के लिए उत्पन्न होता है। जब ईएमए ऊपर से संचयी वॉल्यूम के नीचे पार करता है, तो एक बिक्री संकेत शॉर्ट जाने के लिए उत्पन्न होता है।

पदों के दौरान, फिक्स्ड स्टॉप लॉस और ले लाभ रणनीतियों को लागू किया जाता है। स्टॉप लॉस को प्रवेश मूल्य से 8% नीचे सेट किया जाता है। ले लाभ को प्रवेश मूल्य से 8% ऊपर सेट किया जाता है, जब मूल्य ले लाभ स्तर तक पहुंचता है तो आंशिक स्थिति बंद हो जाती है।

लाभ विश्लेषण

यह रणनीति ट्रेंड इंडिकेटर ईएमए और फंड फ्लो इंडिकेटर संचयी वॉल्यूम को जोड़ती है, जो मध्यम और दीर्घकालिक रुझानों को प्रभावी ढंग से पहचानने के लिए मूल्य और वॉल्यूम दोनों की जानकारी का लाभ उठाती है। फिक्स्ड प्रॉफिट टेकिंग और स्टॉप लॉस कुशल है और जोखिमों को नियंत्रित करते हुए आंशिक लाभ को लॉक करने में मदद करता है।

ईएमए अवधि को विभिन्न उत्पादों के लिए स्वतंत्र रूप से समायोजित किया जा सकता है। रैखिक व्यापार के लिए लंबे और छोटे दोनों ट्रेडों को लागू किया जाता है। बैकटेस्ट ट्रेंडिंग अवधि के दौरान अच्छा प्रदर्शन दिखाते हैं।

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

चलती औसत पर अत्यधिक निर्भरता के परिणामस्वरूप सीमाबद्ध समेकन के दौरान whipsaws हो सकते हैं। निश्चित लाभ लेने और स्टॉप लॉस भी समय से पहले बाहर निकलने या ओवरसाइज्ड स्टॉप आउट का कारण बन सकते हैं। केवल मूल्य और मात्रा कारकों को अन्य तत्वों के बिना माना जाता है।

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

अनुकूलन दिशाएँ

  1. इष्टतम सेटिंग्स खोजने के लिए ईएमए पैरामीटर संयोजनों का परीक्षण और अनुकूलन करें।

  2. एक समग्र प्रणाली बनाने के लिए अन्य तकनीकी संकेतकों को शामिल करें।

  3. प्रवृत्तियों की भविष्यवाणी करने और ईएमए प्रदर्शन में सुधार करने के लिए मशीन लर्निंग लागू करें।

  4. ट्रेल स्टॉप, डायनेमिक एग्जिट आदि के संयोजन से लाभ लेने और स्टॉप लॉस रणनीतियों का अनुकूलन करें।

  5. गतिशील स्थिति आकार के लिए पूंजी प्रबंधन मॉड्यूल पेश करना।

  6. उत्पाद की विशेषताओं के आधार पर पैरामीटर को अनुकूलित करें ताकि रणनीति समग्र बन सके।

सारांश

ट्रेंड पहचान के लिए ईएमए और वॉल्यूम को जोड़ने की रणनीति का विचार स्पष्ट है। लेकिन मूविंग एवरेज और फिक्स्ड एग्जिट पर अत्यधिक निर्भरता में खामियां हैं। अधिक निर्णय संकेतक जोड़ने और एग्जिट को अनुकूलित करने से मजबूती में सुधार हो सकता है। कुल मिलाकर यह ट्रेंड ट्रैकिंग के लिए मूल्य और वॉल्यूम डेटा का उपयोग करने का विचार प्रदान करता है।


/*backtest
start: 2023-08-20 00:00:00
end: 2023-09-19 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/
// © mohanee

//@version=4
strategy("EMA_cumulativeVolume_crossover[Strategy]", overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity,  default_qty_value=20, initial_capital=10000)


emaLength= input(50, title="EMA Length", minval=1, maxval=200)
cumulativePeriod = input(100,  title="cumulative volume Period", minval=1, maxval=200)


riskCapital = input(title="Risk % of capital", defval=10, minval=1)
stopLoss=input(8,title="Stop Loss",minval=1)
takePartialProfits=input(false, title="take partial profits  (percentage same as stop loss)")

tradeDirection=input(title="Trade Direction", defval="LONG", options=["LONG", "SHORT"])

avgPrice = (high + low + close) / 3
avgPriceVolume = avgPrice * volume

cumulPriceVolume = sum(avgPriceVolume, cumulativePeriod)
cumulVolume = sum(volume, cumulativePeriod)

vwapValue = cumulPriceVolume / cumulVolume

emaVal=ema(close, emaLength)

plot(emaVal, title="EMA", color=color.green,  transp=25)
plot(vwapValue, title="Cumulate Volumne / VWAP", color=color.orange,  linewidth=2, transp=25)

bgcolor(emaVal>vwapValue?color.blue:color.purple)    

//Entry--
//Echeck how many units can be purchased based on risk manage ment and stop loss
qty1 = (strategy.equity  * riskCapital / 100 ) /  (close*stopLoss/100)  

//check if cash is sufficient  to buy qty1  , if capital not available use the available capital only
qty1:= (qty1 * close >= strategy.equity ) ? (strategy.equity / close) : qty1

strategy.entry(id="LE",comment="LE", long=true, qty=qty1, when=crossover(emaVal, vwapValue)  and (tradeDirection=="LONG") )    //emaVal>vwapValue and crossover(close , emaVal)

//stoploss
stopLossVal=  strategy.position_size>=1 ?  (strategy.position_avg_price * (1-(stopLoss*0.01) )) : 0.00

//draw initil stop loss
plot(strategy.position_size>=1 ? stopLossVal : na, color = color.purple , style=plot.style_linebr,  linewidth = 2, title = "stop loss")

//partial exits
takeProfit=  strategy.position_size>=1 ?  (strategy.position_avg_price * (1+(stopLoss*0.01) )) : ( close[1] * 2 )
if(takePartialProfits==true)
    strategy.close(id="LE", comment="Partial"+tostring(close-strategy.position_avg_price, "###.##") , qty=strategy.position_size/3 , when = (tradeDirection=="LONG" ) and close>takeProfit and crossunder(close, emaVal) )    //close<close[1] and close[1]<close[2] and close[2]<close[3])
    
strategy.close(id="LE" , comment="LE Exit Points="+tostring(close-strategy.position_avg_price, "###.##"), when=crossunder(emaVal, vwapValue) and (tradeDirection=="LONG") )

strategy.close(id="LE" , comment="SL Exit Loss="+tostring(close-strategy.position_avg_price, "###.##"), when= close < stopLossVal   and (tradeDirection=="LONG") )


//for short  you dont have to wait crossodown of ema, falling is speed , so just check if close crossing down vwapVal
strategy.entry(id="SE",comment="SE", long=false, qty=qty1, when=(close<vwapValue and close<open  and close[1] < vwapValue  and close[1]<open[1] and close<close[1])  and emaVal>=vwapValue and (tradeDirection=="SHORT") )    //emaVal>vwapValue and crossover(close , emaVal)

//stoploss
stopLossValUpside=  abs(strategy.position_size)>=1 and tradeDirection=="SHORT" ?  (strategy.position_avg_price * (1+(stopLoss*0.01) )) : 0.00

//draw initil stop loss
plot(abs(strategy.position_size)>=1 and tradeDirection=="SHORT" ? stopLossValUpside : na, color = color.purple , style=plot.style_linebr,  linewidth = 2, title = "stop loss")

//partial exits
shortTakeProfit=  abs(strategy.position_size)>=1 and tradeDirection=="SHORT" ?  (strategy.position_avg_price * (1-(stopLoss*0.01) )) : 0.00
if(takePartialProfits==true)
    strategy.close(id="SE", comment="Partial" , qty=strategy.position_size/3 , when = (tradeDirection=="SHORT"   ) and  close<shortTakeProfit )  //close<takeProfit and (emaVal - close)>8 )
  
//strategy.close(id="SE" , comment="SE Exit Points="+tostring(close-strategy.position_avg_price, "###.##"), when=crossover(emaVal, vwapValue) and (tradeDirection=="SHORT") )
strategy.close(id="SE" , comment="SE Exit Points="+tostring(close-strategy.position_avg_price, "###.##"), when= abs(strategy.position_size)>=1 and ( (emaVal<vwapValue and close>vwapValue and open>vwapValue and close>open )   or (crossover(emaVal,vwapValue))  ) and (tradeDirection=="SHORT") )

strategy.close(id="SE" , comment="SL Exit Loss="+tostring(close-strategy.position_avg_price, "###.##"), when= abs(strategy.position_size)>=1 and  close > stopLossValUpside   and (tradeDirection=="SHORT"   ) )




अधिक