चलती औसत पर आधारित प्रवृत्ति ट्रैकिंग रणनीति

लेखक:चाओझांग, दिनांक: 2023-10-07 15:04:00
टैगः

अवलोकन

यह रणनीति विभिन्न अवधियों के चलती औसत की गणना करके वर्तमान प्रवृत्ति की दिशा की पहचान करती है और आरएसआई संकेतक के साथ संयुक्त व्यापार संकेत उत्पन्न करती है। जब छोटी अवधि चलती औसत लंबी अवधि चलती औसत से ऊपर जाती है, तो प्रवृत्ति को ऊपर माना जाता है और एक खरीद संकेत उत्पन्न होता है। जब छोटी अवधि चलती औसत लंबी अवधि चलती औसत से नीचे जाती है, तो प्रवृत्ति को उलट माना जाता है और एक बिक्री संकेत उत्पन्न होता है। आरएसआई संकेतक का उपयोग मामूली मूल्य उतार-चढ़ाव के कारण झूठे संकेतों से बचने के लिए किया जाता है।

रणनीति तर्क

  1. 10-दिवसीय, 20-दिवसीय, 50-दिवसीय, 100-दिवसीय और 200-दिवसीय सरल चलती औसत की गणना करें।

  2. 14 दिनों के आरएसआई मूल्य की गणना करें।

  3. जब 10-दिवसीय एसएमए 50-दिवसीय एसएमए से ऊपर जाता है, और आरएसआई 30 से अधिक है, और 20-दिवसीय एसएमए 100-दिवसीय एसएमए से अधिक या उसके बराबर है या 50-दिवसीय एसएमए 100-दिवसीय एसएमए से अधिक या उसके बराबर है, तो खरीदें।

  4. स्टॉप लॉस की कीमत को प्रवेश मूल्य से गुणा करके सेट करें (1 - स्टॉप लॉस प्रतिशत) ।

  5. बेचें जबः

    • 10-दिवसीय एसएमए 50-दिवसीय एसएमए से नीचे जाता है और बंद 20-दिवसीय एसएमए से नीचे होता हैः प्रवृत्ति उलट बिक्री संकेत
    • बंद करना प्रवेश मूल्य के 95% से कम हैः स्टॉप लॉस बेचना
    • बंद करना स्टॉप लॉस मूल्य से नीचे हैः स्टॉप लॉस बेचने के बाद

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

लाभ विश्लेषण

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

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

  • मूविंग एवरेज में देरी होती है और मूल्य उलट के लिए सबसे अच्छा समय चूक सकता है
  • स्टॉप लॉस सेट बहुत ढीला एकल ट्रेडों के लिए बड़े नुकसान का कारण बन सकता है
  • स्टॉप लॉस सेट बहुत तंग हो सकता है बहुत बार स्टॉप लॉस ट्रिगर
  • ट्रेलिंग स्टॉप लॉस बहुत जल्दी बाहर निकल सकता है

अनुकूलन चलती औसत अवधि, स्टॉप लॉस स्तर आदि को समायोजित करके किया जा सकता है। सटीकता बढ़ाने के लिए अन्य संकेतकों के साथ संयोजन पर भी विचार करें।

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

  • विभिन्न बाजार स्थितियों के अनुरूप चलती औसत अवधि को समायोजित करें
  • ओवरबॉट/ओवरसोल्ड स्थितियों को बेहतर ढंग से पहचानने के लिए आरएसआई मापदंडों को अनुकूलित करें
  • उपकरण की विशेषताओं के आधार पर उचित स्थैतिक स्टॉप हानि और ट्रेल स्टॉप स्तर निर्धारित करें
  • झूठे संकेतों से बचने के लिए अन्य संकेतक जोड़ें
  • अस्थिरता आदि के आधार पर स्टॉप लॉस को गतिशील रूप से समायोजित करें
  • मशीन लर्निंग के माध्यम से पैरामीटर ऑटो अनुकूलित करें

सारांश

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


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

//@version=4
strategy("MA_Script", overlay=true)

// STEP 1:
// Configure trail stop level with input options (optional)
longTrailPerc=input(title="Trail Long Loss (%)", type=input.float, minval=0.0, step=0.05, defval=0.1)

// Configure backtest start date with inputs
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=2020, minval=1800, maxval=2100)

// See if this bar's time happened on/after start date
afterStartDate=(time >=timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0))

// Calculate Relative Strength Index
rsiValue=rsi(close, 14)

// Calculate moving averages
MA10_Val =sma(close, 10)
//plot(MA10_Val, color=color.yellow, linewidth=1)

MA20_Val =sma(close, 20)
plot(MA20_Val, color=color.green, linewidth=1)

MA50_Val =sma(close, 50)
plot(MA50_Val, color=color.red, linewidth=1)

MA100_Val =sma(close, 100)
plot(MA100_Val, color=color.blue, linewidth=1) 

MA200_Val =sma(close, 200)
plot(MA200_Val, color=color.purple, linewidth=1) 

// Calculate candlestick
C_BodyHi = max(close, open)
C_BodyLo = min(close, open)
C_Body = C_BodyHi - C_BodyLo
C_UpShadow = high - C_BodyHi
C_DnShadow = C_BodyLo - low

// STEP 2:
// Calculate entry trading conditions
buyCondition_1=crossover(MA10_Val, MA50_Val) and (rsiValue > 30) and ((MA20_Val >=  MA100_Val) or (MA50_Val >=  MA100_Val))
avg_price = (close + open)/2

// First Entry
if (afterStartDate)
    strategy.entry(id="Entry_Trade_1", long=true, limit=avg_price, when=buyCondition_1)

plotchar(afterStartDate and crossover(MA10_Val, MA50_Val), textcolor = color.blue, text = 'MA\n')

// Determine trail stop loss prices
longStopPrice=0.0

longStopPrice :=if (strategy.position_size > 0)
    stopValue=C_BodyHi * (1 - longTrailPerc)
    max(stopValue, longStopPrice[1])
else
    0
plot(longStopPrice, color=color.orange, linewidth=1)

bought_1=strategy.position_size[0] > strategy.position_size[1]
entry_Point_1=valuewhen(bought_1, avg_price, 0)

// STEP 3:
// Calculate exit trading conditions
sellCondition_2=crossunder(MA10_Val, MA50_Val) and (close < MA20_Val)
sellCondition_3_temp=valuewhen((C_BodyHi >= entry_Point_1*1.2), 1, 0)
sellCondition_1=(entry_Point_1*0.95 > close) and (sellCondition_3_temp != 1)
sellCondition_3=(sellCondition_3_temp == 1) and (strategy.position_size > 0) and close <= longStopPrice
plotchar((sellCondition_3 == 1) and (strategy.position_size > 0) and close <= longStopPrice, textcolor = color.red, text = 'TS\n', show_last = 11)
plotchar(crossunder(MA10_Val, MA50_Val), textcolor = color.red, text = 'MA\n')

id_val = ""
stop_val = close
condition = false

if sellCondition_1
    id_val := "Exit By Stop Loss At 7%"
    stop_val := entry_Point_1*0.93
    condition := true
else if sellCondition_2
    id_val := "Exit By Take Profit based on MA"
    stop_val := close
    condition := true
else if sellCondition_3
    id_val := "Exit By Trailing Stop"
    stop_val := longStopPrice
    condition := true

// Submit exit orders for trail stop loss price
if (strategy.position_size > 0)
    //strategy.exit(id="Exit By Stop Loss At 7%", from_entry="Entry_Trade_1", stop=entry_Point_1*0.93, when=sellCondition_1)
    //strategy.exit(id="Exit By Take Profit based on MA", from_entry="Entry_Trade_1", stop=close, when=sellCondition_2)
    strategy.exit(id=id_val, from_entry="Entry_Trade_1", stop=stop_val, when=condition)
    
    


अधिक