एसएमए ऑफसेट उतार-चढ़ाव ट्रेडिंग रणनीति

लेखक:चाओझांग, दिनांक: 2023-12-19 10:52:10
टैगः

img

रणनीति का अवलोकन

यह रणनीति सरल चलती औसत (एसएमए) और कुछ गणितीय गणनाओं का उपयोग खरीद / बिक्री बिंदुओं को निर्धारित करने के लिए करती है। हम अपने आधार के रूप में एक 100-दिवसीय एसएमए लाइन रखते हैं। यदि समापन मूल्य इस रेखा से नीचे है, तो हम उस प्रतिशत के आधार पर उद्घाटन स्थिति निर्धारित करते हैं जो मूल्य रेखा (कम ऑफसेट) से नीचे है, जो कॉन्फ़िगर करने योग्य है। इसी तरह, हम लंबी स्थिति को बंद करने से पहले 100-दिवसीय एसएमए के ऊपर एक उच्च ऑफसेट प्रतिशत सेट करते हैं। यदि हम बहुत जल्दी बंद करने का प्रयास करते हैं जबकि कीमत अभी भी बढ़ रही है, तो ट्रेलिंग स्टॉप लॉस ट्रिगर हो जाएगा।

रणनीति तर्क

रणनीति में तीन एसएमए लाइनों का उपयोग किया जाता हैः तेज लाइन (डिफ़ॉल्ट 14 दिन), धीमी लाइन (डिफ़ॉल्ट 100 दिन), और संदर्भ लाइन (डिफ़ॉल्ट 30 दिन) ।

यह लंबे समय तक जाता है जब समापन मूल्य संदर्भ रेखा से नीचे होता है, धीमी रेखा से नीचे प्रतिशत (कम ऑफसेट) कॉन्फ़िगर किए गए मूल्य से अधिक होता है, तेज रेखा बढ़ रही है और धीमी रेखा गिर रही है। जब यह शर्त संतुष्ट होती है, तो तेज और धीमी रेखा जल्द ही पार होने की बहुत संभावना है, इसलिए यह एक अच्छा प्रवेश बिंदु है।

यह तब लंबा बंद होता है जब समापन मूल्य संदर्भ रेखा से ऊपर होता है, धीमी रेखा से ऊपर प्रतिशत (उच्च ऑफसेट) कॉन्फ़िगर किए गए मूल्य से अधिक होता है, समापन मूल्य 3 लगातार मोमबत्तियों के लिए बढ़ गया, हमारे पास खुले लाभ हैं, और तेजी से रेखा धीमी रेखा से ऊपर है। यदि मूल्य बंद होने के बाद बढ़ता रहता है, तो ट्रेलिंग स्टॉप लॉस ट्रिगर हो जाएगा।

ऑर्डर का आकार कुल इक्विटी के प्रतिशत पर आधारित है, यह हमारी स्थिति के आकार को नियंत्रित करता है।

लाभ विश्लेषण

  1. एसएमए का लाभ उठाएं, जो मूल्य उतार-चढ़ाव को सुचारू करने और बाजार शोर को फ़िल्टर करने में सक्षम है।
  2. एसएमए क्रॉसओवर में प्रवृत्ति परिवर्तनों की भविष्यवाणी करने की कुछ क्षमता होती है।
  3. सेट ऑफसेट से एसएमए लाइनों के झूठे ब्रेकआउट से बचा जा सकता है।
  4. प्रवृत्ति और क्रॉसओवर संकेतकों का संयोजन व्यापार संकेतों की सटीकता में सुधार करता है।
  5. स्टॉप लॉस को पीछे छोड़ने से मुनाफे में बाधा आती है और ड्रॉडाउन को रोका जाता है।

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

  1. एसएमए में ही लेग होता है और मूल्य मोड़ के बिंदुओं को याद कर सकता है।
  2. गलत ऑफसेट सेटिंग रणनीति को बहुत आक्रामक या बहुत रूढ़िवादी बना सकती है।
  3. गलत स्टॉप लॉस पैरामीटर बहुत जल्दी बंद हो सकता है या स्टॉप लॉस प्रतिशत बहुत बड़ा हो सकता है।
  4. कीमतों में भारी उतार-चढ़ाव का सामना करने में असमर्थ।

संबंधित सुधार:

  1. फ़िल्टर प्रविष्टियों में अन्य प्रमुख संकेतक जोड़ें।
  2. बैकटेस्ट और ऑप्टिमाइज़ ऑफसेट।
  3. बैकटेस्ट करें और इष्टतम स्टॉप लॉस पैरामीटर खोजें।
  4. उच्च अस्थिरता की अवधि के दौरान स्थिति का आकार कम करें।

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

  1. इष्टतम मापदंडों को खोजने के लिए विभिन्न अवधियों के एसएमए का परीक्षण करें।
  2. बाजार संरचना और प्रवृत्ति निर्धारित करने के लिए अन्य संकेतक जोड़ें।
  3. अधिक लाभ में लॉक करने के लिए पीछे स्टॉप हानि मापदंडों का अनुकूलन करें।
  4. बाजार की अस्थिरता के आधार पर स्थिति आकार को समायोजित करें।
  5. विविधीकरण के लिए एक साथ कई उत्पादों पर रणनीति लागू करें।

निष्कर्ष

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


/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// Author: Sonny Parlin (highschool dropout)
strategy(shorttitle="SMA+Strategy", title="SMA Offset Strategy",
                                      overlay=true,  currency=currency.USD,
                                      initial_capital=10000)

// Inputs and variables
ss = input(14, minval=10, maxval=50, title="SMA Fast (days)")
ff = input(100, minval=55, maxval=200, title="SMA Slow (days)")
ref = input(30, minval=20, maxval=50, title="SMA Reference (days)")
lowOffset = input(0.001, "Low Offset (%)", minval=0, step=0.001)
highOffset = input(0.0164, "High Offset (%)", minval=0, step=0.0001)
orderStake = input(0.96, "Order Stake (%)", minval=0, step=0.01)

// SMA
smaFast = sma(close, ss)
smaSlow = sma(close, ff)
smaRef = sma(close, ref)
distanceLow = (close - smaSlow) / close
distanceHigh = (close - smaSlow) / close

// Set up SMA plot but don't show by default
plot(smaFast, "smaFast", color=#00ff00, display = 0)
plot(smaSlow, "smaSlow", color=#ff0000, display = 0)
plot(smaRef, "smaRef", color=#ffffff, display = 0)

// The buy stratey:
// guard that the low is under our sma low reference line by our lowOffset %, 
// default is 0.001. (low < smaRef) and (distanceLow > lowOffset)
// SMA fast is on the rise and SMA slow is falling and they are very likely
// to cross. (rising(smaFast,1)) and (falling(smaSlow, 1)) 
enterLong = (low < smaRef) and (distanceLow > lowOffset) and (rising(smaFast,1)) and (falling(smaSlow, 1)) 

// The sell Strategy:
// Guard that close is higher than our sma high reference line by our 
// highOffset %, default is 0.0164. (close > smaRef) and (distanceHigh > highOffset)
// Guard that close has risen by 3 candles in a row (rising(close,3)) 
// Guard that we currently have profit (strategy.openprofit > 0)
// Guard that SMA fast is higher than smaSlow (smaFast > smaSlow)
// If it keeps going up past our close position the trailing stoploss will kick in!
enterShort = (close > smaRef) and (distanceHigh > highOffset) and (rising(close,3)) and (strategy.openprofit > 0) and (smaFast > smaSlow)

// Order size is based on total equity
// Example 1:
// startingEquity = 2000
// close = 47434.93
// orderStake = 0.45
// (2,000 × orderStake) / close = orderSize = 0.0189733599 = approx $900

// Example 2:
// startingEquity = 2000
// close = 1.272
// orderStake = 0.45
// (startingEquity × orderStake) / close = orderSize = 707.5471698113 = approx $900
orderSize = (strategy.equity * orderStake) / close

// Trailing Stoploss
// I'm using 1.35 as my default value, play with this for different results.
longTrailPerc = input(title="Trailing Stoploss (%)",
     type=input.float, minval=0.0, step=0.1, defval=1.35) * 0.01
     
longStopPrice = 0.0

longStopPrice := if (strategy.position_size > 0)
    stopValue = close * (1 - longTrailPerc)
    max(stopValue, longStopPrice[1])
else
    0

if (enterLong)
    strategy.entry("Open Long Position", strategy.long, orderSize, when=strategy.position_size <= 0)
    
if (enterShort)
    strategy.exit(id="Close Long Position", stop=longStopPrice)


//plot(strategy.equity)

अधिक