ADX सूचक पर आधारित रुझान ट्रैकिंग और अल्पकालिक ट्रेडिंग रणनीति

लेखक:चाओझांग, दिनांकः 2024-01-22 17:10:55
टैगः

img

अवलोकन

यह रणनीति सुपर ट्रेंड, पिवोट पॉइंट्स और एवरेज ट्रू रेंज (एटीआर) को एक गतिशील स्टॉप लॉस लाइन बनाने के लिए और ट्रेंड्स को जज और ट्रैक करने के लिए एवरेज डायरेक्शनल मूवमेंट इंडेक्स (एडीएक्स) संकेतक को जोड़ती है। यह रणनीति अल्पकालिक ट्रेडिंग के लिए उपयुक्त है और रेंज-बाउंड के बाद ट्रेंड की निरंतरता को पकड़ सकती है। ड्रॉडाउन कंट्रोल भी सभ्य है।

सिद्धांत

सुपर ट्रेंड, पिवोट पॉइंट्स और एटीआर स्टॉप लॉस के साथ मिलकर, शुरुआती दिशा निर्धारित करने के लिए गतिशील स्टॉप लॉस लाइन के माध्यम से कीमत के टूटने की दिशा का आकलन करता है। साथ ही, एडीएक्स संकेतक प्रवृत्ति की ताकत का आकलन करता है और केवल तभी ट्रेडिंग सिग्नल जारी करता है जब प्रवृत्ति पर्याप्त मजबूत होती है।

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

स्टॉप लॉस लाइन को नवीनतम मूल्य और एटीआर मूल्य के अनुसार गतिशील रूप से समायोजित किया जाएगा, जो प्रवृत्ति को बहुत अच्छी तरह से ट्रैक कर सकता है।

लाभ विश्लेषण

इस रणनीति के निम्नलिखित फायदे हैंः

  1. बाजारों में उतार-चढ़ाव के कारण मुनाफे में लॉक होने से बचने के लिए सुपर ट्रेंड इंडिकेटर का उपयोग करें।

  2. प्रवृत्ति की मजबूती का आकलन करने के लिए ADX सूचक की सहायता से समेकन के दौरान व्यापार में त्रुटियों से बचें।

  3. लॉक-इन लाभ को अधिकतम करने के लिए स्टॉप लॉस लाइन को गतिशील रूप से समायोजित किया जाता है।

  4. अति-खरीद और अति-बिक्री से बचने के लिए आरएसआई को मिलाएं।

  5. कुल मिलाकर, रणनीति पैरामीटर सेटिंग उचित है। dframe का चयन निरंतरता को ध्यान में रखता है। लाभ लेने और स्टॉप लॉस की सेटिंग भी अच्छी है।

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

इस रणनीति में कुछ जोखिम भी हैं:

  1. सुपर ट्रेंड और एमए संकेतक परस्पर विरोधी संकेत दे सकते हैं।

  2. ADX सूचक 14 चक्रों पर सेट है, जो अचानक घटनाओं के लिए पर्याप्त संवेदनशील नहीं है।

  3. आरएसआई पैरामीटर डिफ़ॉल्ट पर सेट है, जो ओवरबॉट और ओवरसोल्ड से पूरी तरह बचने में विफल हो सकता है।

  4. अचानक होने वाली घटनाओं के प्रभाव पर विचार नहीं किया गया है, जैसे बड़ी बुरी/अच्छी खबरें।

संबंधित समाधान:

  1. सुपर ट्रेंड सूचक के अनुरूप एमए चक्र को समायोजित करें।

  2. अचानक घटनाओं के प्रति संवेदनशीलता बढ़ाने के लिए ADX चक्र को छोटा करने का प्रयास करें।

  3. आरएसआई मापदंडों को अनुकूलित करें ताकि इष्टतम मान मिल सकें।

  4. प्रमुख समाचार विज्ञप्ति से बचने के लिए समाचार फ़िल्टर मॉड्यूल जोड़ें.

अनुकूलन

इस रणनीति को निम्नलिखित पहलुओं में भी अनुकूलित किया जा सकता हैः

  1. प्रवृत्ति का न्याय करने के लिए मशीन लर्निंग मॉडल जोड़ें, व्यापारिक निर्णयों को अधिक बुद्धिमान बनाते हैं।

  2. प्रवृत्ति की ताकत का आकलन करने के लिए ADX के बजाय वैकल्पिक भावनात्मक संकेतक पेश करने का प्रयास करें।

  3. स्टॉप लॉस को अधिक गतिशील और सटीक बनाने के लिए अनुकूलन स्टॉप लॉस मॉड्यूल को बढ़ाएं।

  4. समग्र रणनीति को अनुकूलित करने के लिए गहरी सीखने की तकनीक के साथ अधिक सुविधाओं को निकालें।

  5. रणनीतिक स्केलेबिलिटी बढ़ाने के लिए रणनीति विकास के लिए पायथन जैसी उन्नत भाषाओं का उपयोग करें।

सारांश

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


/*backtest
start: 2023-01-15 00:00:00
end: 2024-01-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Bendre ADX STrend", overlay = true)

///////////////////////////
// SuperTrend + Pivot Point
//////////////////////////

src =  input(close, title="EMA Source")
PPprd = input(defval = 2, title="Pivot Point Period")
AtrFactor=input(defval = 2, title = "ATR Factor")
AtrPd=input(defval = 21, title = "ATR Period")

StartDate = input(timestamp("1 Dec 2023"), title="Start Date")
EndDate = input(timestamp("12 Jan 2024"), title="End Date")
window()  => true

var float ph = na
var float pl = na
ph := ta.pivothigh(PPprd, PPprd)
pl :=ta.pivotlow(PPprd, PPprd)

float center = na
center := center[1]
// float lastpp = ph ? ph : pl ? pl : 0.0
float lastpp = na(ph) ? na(pl) ? na : pl : ph

if lastpp > 0
    if na(center)
        center := lastpp
    else
        center := (center * 2 + lastpp) / 3

Up = center - (AtrFactor * ta.atr(AtrPd))
Dn = center + (AtrFactor * ta.atr(AtrPd))

var float TUp = na
var float TDown = na
Trend = 0
TUp := close[1] > TUp[1] ? math.max(Up, TUp[1]) : Up
TDown := close[1] < TDown[1] ? math.min(Dn, TDown[1]) : Dn
Trend := close > TDown[1] ? 1: close < TUp[1]? -1: nz(Trend[1], 1)
Trailingsl = Trend == 1 ? TUp : TDown

// Lines
linecolor = Trend == 1 and nz(Trend[1]) == 1 ? color.lime : Trend == -1 and nz(Trend[1]) == -1 ? color.red : na
plot(Trailingsl, color = linecolor ,  linewidth = 2, title = "PP SuperTrend")

bsignalSSPP = close > Trailingsl
ssignalSSPP = close < Trailingsl


///////
// ADX
//////

lenADX = 14
th = 14
TrueRange = math.max(math.max(high-low, math.abs(high-nz(close[1]))), math.abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? math.max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? math.max(nz(low[1])-low, 0): 0
SmoothedTrueRange = 0.0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/lenADX) + TrueRange
SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/lenADX) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus = 0.0
SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/lenADX) + DirectionalMovementMinus
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = math.abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = ta.sma(DX, lenADX)


//////
// MA
/////

lenMA = 21
srcMA = input(close, title="Source")
// offsetMA = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
offsetMA = input(0, title="Offset")
outMA = ta.sma(srcMA, lenMA)

//
// RSI
//
length = input( 14 )
overSold = input( 30 )
overBought = input( 65 )
price = close
vrsi = ta.rsi(price, length)

//
// DMI - Direction Movement Index
// 
[diplus1, diminus1, adx] = ta.dmi(14, 14)

// Buy - Sell Entries
buy = bsignalSSPP and outMA < close and ADX > th
sell = ssignalSSPP 


if (buy and vrsi > overBought and adx > 19)
    // .order // Tuned version
    strategy.entry("Buy", strategy.long, when = window())
    // strategy.close("Sell", "close Sell")

if (sell) and (strategy.position_size > 0)
    // strategy.entry("Sell", strategy.short)
    strategy.close("Buy", "Close Buy")

if(sell and vrsi < overSold and adx > 25)
    strategy.entry("Sell", strategy.short, when = window())

if ( ta.crossover( diminus1, diplus1) or ((buy) and (strategy.position_size > 0)) )
    strategy.close("Sell", "close Sell")

// if(sell) and (diminus1 > diplus1) and adx > 23 and adx > adx[1] and (vrsi < overSold)
//     strategy.entry("Sell", strategy.short, when = window())

// if (strategy.position_size > 0 and ta.crossunder(diminus1, adx)) or (strategy.position_size > 0  and (buy))
//     strategy.close("Sell", "close Sell")





अधिक