मत्स्य जाल की बेहतर रणनीति

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

मत्स्य जाल की बेहतर रणनीति

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

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

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

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

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

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


/*backtest
start: 2023-09-04 00:00:00
end: 2023-09-11 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// Copyright nilux: https://www.tradingview.com/u/nilux/
// Based on the original of dasanc: https://www.tradingview.com/u/dasanc/

strategy("FSCG-TSSL", "FSCG-TSSL Mod Backtest", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 100000, slippage = 5)
Price = input.source(close, "Source")
Length = input(20,"Period")
transform = input("Inphase-Quadrature","Use Transform?",options=["Hilbert","Inphase-Quadrature","False"])
min = input(108,"Min. Period")
buyTreshold = input(-2.41, title = "Buy Treshold (-)", type = float, defval=-2.0, minval = -2.50, maxval = -0.01, step = 0.01)
sellTreshold = input(2.43, title = "Sell Treshold (+)", type = float, defval=2.0, minval = 0.01, maxval = 2.50, step = 0.01)

// === TSSL ===
fixedSL = input(title="SL Activation", defval=300)
trailSL = input(title="SL Trigger", defval=1)
fixedTP = input(title="TP Activation", defval=150)
trailTP = input(title="TP Trigger", defval=50)

// === BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2015)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2015)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)
window()  => time >= start and time <= finish ? true : false

getIQ(src,min,max) =>
    PI = 3.14159265359
    P = src - src[7]
    lenIQ = 0.0
    lenC = 0.0
    imult = 0.635
    qmult = 0.338
    inphase = 0.0
    quadrature = 0.0
    re = 0.0
    im = 0.0
    deltaIQ = 0.0
    instIQ = 0.0
    V = 0.0
    
    inphase := 1.25*(P[4] - imult*P[2]) + imult*nz(inphase[3])
    quadrature := P[2] - qmult*P + qmult*nz(quadrature[2])
    re := 0.2*(inphase*inphase[1] + quadrature*quadrature[1]) + 0.8*nz(re[1])
    im := 0.2*(inphase*quadrature[1] - inphase[1]*quadrature) + 0.8*nz(im[1])
    if (re!= 0.0)
        deltaIQ := atan(im/re)
    for i=0 to max
        V := V + deltaIQ[i]
        if (V > 2*PI and instIQ == 0.0)
            instIQ := i
    if (instIQ == 0.0)
        instIQ := nz(instIQ[1])
    lenIQ := 0.25*instIQ + 0.75*nz(lenIQ[1],1)
    length = lenIQ<min ? min : lenIQ


getHT(src) =>
    Price = src
    Imult = .635
    Qmult = .338
    PI = 3.14159
    InPhase = 0.0
    Quadrature = 0.0
    Phase = 0.0
    DeltaPhase = 0.0
    InstPeriod = 0.0
    Period = 0.0
    Value4 = 0.0
    
    if(n > 5)
        //Detrend Price
        Value3 = Price - Price[7]
        //Compute InPhase and Quadrature components
        InPhase := 1.25*(Value3[4] - Imult*Value3[2]) + Imult*nz(InPhase[3])
        Quadrature := Value3[2] - Qmult*Value3 + Qmult*nz(Quadrature[2])
        //Use ArcTangent to compute the current phase
        if(abs(InPhase + InPhase[1]) > 0)
            Phase := 180/PI * atan(abs((Quadrature + Quadrature[1]) / (InPhase + InPhase[1])))
        //Resolve the ArcTangent ambiguity
        if(InPhase < 0 and Quadrature > 0)
            Phase := 180 - Phase
        if(InPhase < 0 and Quadrature < 0)
            Phase := 180 + Phase
        if(InPhase > 0 and Quadrature < 0)
            Phase := 360 - Phase
        //Compute a differential phase, resolve phase wraparound, and limit delta phase errors
        DeltaPhase := Phase[1] - Phase
        if(Phase[1] < 90 and Phase > 270)
            DeltaPhase := 360 + Phase[1] - Phase
        if(DeltaPhase < 1)
            DeltaPhase := 1
        if(DeltaPhase > 60)
            DeltaPhase := 60
        //Sum DeltaPhases to reach 360 degrees. The sum is the instantaneous period.
        for i = 0 to 50
            Value4 := Value4 + DeltaPhase[i]
            if(Value4 > 360 and InstPeriod == 0)
                InstPeriod := i
        //Resolve Instantaneous Period errors and smooth
        if(InstPeriod == 0)
            InstPeriod = nz(InstPeriod[1])
        Period := .25*(InstPeriod) + .75*Period[1]
    Period
    
//Get highest val in period
getHighest(src, len)=>
    H = src[len]
    for i=0 to len
        if src[i]>H
            H := src[i]
    H
    
//Get lowest val in period
getLowest(src, len)=>
    L = src[len]
    for i=0 to len
        if src[i]<L
            L := src[i]
    L

if transform == "Hilbert"
    Length := round(getHT(Price)/2)
if transform == "Inphase-Quadrature"
    Length := round(getIQ(Price,min,50)/2)
if Length<min
    Length := min
    

Num = 0.0
Denom = 0.0
CG = 0.0
MaxCG = 0.0
MinCG = 0.0
Value1 = 0.0
Value2 = 0.0
Value3 = 0.0
for i = 0 to Length - 1
    Num := Num + (1 + i)*(Price[i])
    Denom := Denom + (Price[i])
if(Denom != 0)
    CG := -Num/Denom + (Length + 1) / 2
MaxCG := getHighest(CG, Length)
MinCG := getLowest(CG, Length)
if(MaxCG != MinCG)
    Value1 := (CG - MinCG) / (MaxCG - MinCG)
Value2 := (4*Value1 + 3*Value1[1] + 2*Value1[2] + Value1[3]) / 10
Value3 := .5*log((1+1.98*(Value2-.5))/(1-1.98*(Value2-.5)))

plot(Value3, "CG",orange, linewidth=2)
plot(Value3[1], "Trigger",green, linewidth=2)
hline(0,color=color(black,60))
hline(2,linestyle=hline.style_solid,color=color(black,70))
hline(-2,linestyle=hline.style_solid,color=color(black,70))

sell = crossover(Value3[1],Value3) and Value3 > sellTreshold
buy = crossunder(Value3[1],Value3) and Value3 < buyTreshold

strategy.entry("Long", strategy.long, when= buy and window())
strategy.exit("Exit", loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP)
strategy.exit("Exit", when= sell)

strategy.entry("Short", strategy.short, when= sell and window())
strategy.exit("Exit", loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP)
strategy.exit("Exit", when= buy)

अधिक