संसाधन लोड हो रहा है... लोड करना...

न्यूरल नेटवर्क सुपर ट्रेंड रणनीति

लेखक:चाओझांग, दिनांकः 2023-09-14 16:49:38
टैगः

रणनीति तर्क

यह रणनीति व्यापार के लिए तंत्रिका नेटवर्क मॉडल, आरएसआई सूचक और सुपर ट्रेंड सूचक को जोड़ती है।

तर्क यह हैः

  1. वॉल्यूम परिवर्तन, बोलिंगर बैंड, आरएसआई आदि सहित इनपुट के साथ एक तंत्रिका नेटवर्क मॉडल बनाएं।

  2. नेटवर्क भविष्य में मूल्य परिवर्तन दर की भविष्यवाणी करता है

  3. आरएसआई मानों की गणना करें और अनुमानित मूल्य परिवर्तन के साथ संयोजन करें

  4. आरएसआई के आधार पर गतिशील स्टॉप लॉस लाइनें उत्पन्न करें

  5. जब कीमत स्टॉप लॉस से ऊपर टूटती है तो शॉर्ट करें; जब कीमत डाउन स्टॉप से नीचे टूटती है तो लॉन्ग करें

  6. फ़िल्टरिंग के लिए सुपर ट्रेंड ट्रेंड जजमेंट का प्रयोग करें

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

लाभ

  • ट्रेंड निर्धारित करने के लिए तंत्रिका नेटवर्क मॉडल बहुआयामी डेटा

  • आरएसआई रुके लाभ की रक्षा करता है, सुपर ट्रेंड निर्णय में सहायता करता है

  • सिग्नल की गुणवत्ता में सुधार के लिए कई संकेतकों का संयोजन

जोखिम

  • न्यूरल नेटवर्क प्रशिक्षण के लिए बड़े डेटासेट की आवश्यकता होती है

  • आरएसआई और सुपर ट्रेंड मापदंडों का ठीक से समायोजन आवश्यक है

  • प्रदर्शन मॉडल की भविष्यवाणियों पर निर्भर करता है, अनिश्चितताएं मौजूद हैं

सारांश

इस रणनीति में मशीन लर्निंग को जोखिम नियंत्रण के साथ दक्षता के लिए पारंपरिक तकनीकों के साथ जोड़ा गया है। लेकिन मापदंडों और मॉडल की व्याख्या करने में सुधार की आवश्यकता है।


/*backtest
start: 2023-08-14 00:00:00
end: 2023-09-13 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//ANN taken from https://www.tradingview.com/script/Eq4zZsTI-ANN-MACD-BTC/
//it only work for BTC as the ANN is trained for this data only
//super trend https://www.tradingview.com/script/VLWVV7tH-SuperTrend/
// Strategy version created for @che_trader
strategy ("ANN RSI SUPER TREND STRATEGY BY che_trader", overlay = true)
qty = input(10000, "Buy quantity")

testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testStartMin = input(0, "Backtest Start Minute")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,testStartMin)
testStopYear = input(2099, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
testPeriod() => true

max_bars_back = (21)
src = close[0]

// Essential Functions

// Highest - Lowest Functions ( All efforts goes to RicardoSantos )

f_highest(_src, _length)=>
    _adjusted_length = _length < 1 ? 1 : _length
    _value = _src
    for _i = 0 to (_adjusted_length-1)
        _value := _src[_i] >= _value ? _src[_i] : _value
    _return = _value

f_lowest(_src, _length)=>
    _adjusted_length = _length < 1 ? 1 : _length
    _value = _src
    for _i = 0 to (_adjusted_length-1)
        _value := _src[_i] <= _value ? _src[_i] : _value
    _return = _value

// Function Sum  

f_sum(_src , _length) => 

    _output  = 0.00 
    
    _length_adjusted = _length < 1 ? 1 : _length
    
    for i = 0 to _length_adjusted-1
        _output := _output + _src[i]


// Unlocked Exponential Moving Average Function

f_ema(_src, _length)=>
    _length_adjusted = _length < 1 ? 1 : _length
    _multiplier = 2 / (_length_adjusted + 1)
    _return  = 0.00
    _return := na(_return[1]) ? _src : ((_src - _return[1]) * _multiplier) + _return[1]


// Unlocked Moving Average Function 

f_sma(_src, _length)=>
    
    _output = 0.00
    _length_adjusted = _length < 0 ? 0 : _length
    w = cum(_src)

    _output:= (w - w[_length_adjusted]) / _length_adjusted
   
    _output    


// Definition : Function Bollinger Bands

Multiplier = 2 
_length_bb = 20


e_r = f_sma(src,_length_bb)


// Function Standard Deviation : 

f_stdev(_src,_length) =>

    float _output = na 
    _length_adjusted = _length < 2 ? 2 : _length
    _avg  = f_ema(_src , _length_adjusted)
    evar  = (_src - _avg) * (_src - _avg)
    evar2 = ((f_sum(evar,_length_adjusted))/_length_adjusted)
    
    _output := sqrt(evar2)


std_r = f_stdev(src , _length_bb )


upband = e_r + (Multiplier * std_r)  // Upband
dnband = e_r - (Multiplier * std_r)  // Lowband
basis  = e_r                         // Midband

// Function : RSI


length = input(14, minval=1) // 


f_rma(_src, _length) =>
    _length_adjusted = _length < 1 ? 1 : _length
    alpha = _length_adjusted
    sum = 0.0
    sum := (_src + (alpha - 1) * nz(sum[1])) / alpha



f_rsi(_src, _length) => 

    _output = 0.00 
    _length_adjusted = _length < 0 ? 0 : _length

    u = _length_adjusted < 1 ? max(_src - _src[_length_adjusted], 0) : max(_src - _src[1] , 0) // upward change
    d = _length_adjusted < 1 ? max(_src[_length_adjusted] - _src, 0) : max(_src[1] - _src , 0) // downward change
    rs = f_rma(u, _length) / f_rma(d, _length)
    res = 100 - 100 / (1 + rs)
    res


_rsi = f_rsi(src, length)


// MACD 

_fastLength   = input(12 , title = "MACD Fast Length")
_slowlength   = input(26 , title = "MACD Slow Length")
_signalLength = input(9  , title = "MACD Signal Length")


_macd   = f_ema(close, _fastLength) - f_ema(close, _slowlength)
_signal = f_ema(_macd, _signalLength)
	   
_macdhist = _macd - _signal


// Inputs on Tangent Function : 

tangentdiff(_src) => nz((_src - _src[1]) / _src[1] ) 


// Deep Learning Activation Function (Tanh) : 

ActivationFunctionTanh(v) => (1 - exp(-2 * v))/( 1 + exp(-2 * v))


// DEEP LEARNING 

// INPUTS : 

input_1 = tangentdiff(volume)
input_2 = tangentdiff(dnband)
input_3 = tangentdiff(e_r)
input_4 = tangentdiff(upband)
input_5 = tangentdiff(_rsi)
input_6 = tangentdiff(_macdhist)

// LAYERS : 

// Input Layers 

n_0 = ActivationFunctionTanh(input_1 + 0)   
n_1 = ActivationFunctionTanh(input_2 + 0) 
n_2 = ActivationFunctionTanh(input_3 + 0) 
n_3 = ActivationFunctionTanh(input_4 + 0) 
n_4 = ActivationFunctionTanh(input_5 + 0)
n_5 = ActivationFunctionTanh(input_6 + 0)


// Hidden Layers 

n_6   = ActivationFunctionTanh( -2.580743 * n_0 + -1.883627 * n_1 + -3.512462 * n_2 + -0.891063 * n_3 + -0.767728 * n_4 + -0.542699 * n_5 +  0.221093) 
n_7   = ActivationFunctionTanh( -0.131977 * n_0 + -1.543499 * n_1 +  0.019450 * n_2 +  0.041301 * n_3 + -0.926690 * n_4 + -0.797512 * n_5 + -1.804061) 
n_8   = ActivationFunctionTanh( -0.587905 * n_0 + -7.528007 * n_1 + -5.273207 * n_2 +  1.633836 * n_3 +  6.099666 * n_4 +  3.509443 * n_5 + -4.384254) 
n_9   = ActivationFunctionTanh( -1.026331 * n_0 + -1.289491 * n_1 + -1.702887 * n_2 + -1.052681 * n_3 + -1.031452 * n_4 + -0.597999 * n_5 + -1.178839) 
n_10  = ActivationFunctionTanh( -5.393730 * n_0 + -2.486204 * n_1 +  3.655614 * n_2 +  1.051512 * n_3 + -2.763198 * n_4 +  6.062295 * n_5 + -6.367982) 
n_11  = ActivationFunctionTanh(  1.246882 * n_0 + -1.993206 * n_1 +  1.599518 * n_2 +  1.871801 * n_3 +  0.294797 * n_4 + -0.607512 * n_5 + -3.092821) 
n_12  = ActivationFunctionTanh( -2.325161 * n_0 + -1.433500 * n_1 + -2.928094 * n_2 + -0.715416 * n_3 + -0.914663 * n_4 + -0.485397 * n_5 + -0.411227) 
n_13  = ActivationFunctionTanh( -0.350585 * n_0 + -0.810108 * n_1 + -1.756149 * n_2 + -0.567176 * n_3 + -0.954021 * n_4 + -1.027830 * n_5 + -1.349766) 


// Output Layer 

_output  = ActivationFunctionTanh(2.588784 * n_6  + 0.100819 * n_7  + -5.305373 * n_8  + 1.167093 * n_9  + 
                                  3.770143 * n_10 + 1.269190 * n_11 +  2.090862 * n_12 + 0.839791 * n_13 + -0.196165)

_chg_src = tangentdiff(src) * 100

_seed = (_output - _chg_src)
// BEGIN ACTUAL STRATEGY
length1 = input(title="RSI Period", type=input.integer, defval=21)
mult = input(title="RSI Multiplier", type=input.float, step=0.1, defval=4.0)
wicks = input(title="Take Wicks into Account ?", type=input.bool, defval=false)
showLabels = input(title="Show Buy/Sell Labels ?", type=input.bool, defval=true)

srsi = mult* rsi(_seed ,length1)

longStop = hl2 - srsi
longStopPrev = nz(longStop[1], longStop)
longStop := (wicks ? low[1] : close[1]) > longStopPrev ? max(longStop, longStopPrev) : longStop

shortStop = hl2 + srsi
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := (wicks ? high[1] : close[1]) < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and (wicks ? high : close) > shortStopPrev ? 1 : dir == 1 and (wicks ? low : close) < longStopPrev ? -1 : dir

longColor = color.green
shortColor = color.red

plot(dir == 1 ? longStop : na, title="Long Stop", style=plot.style_linebr, linewidth=2, color=longColor)
buySignal = dir == 1 and dir[1] == -1
plotshape(buySignal ? longStop : na, title="Long Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=longColor, transp=0)
plotshape(buySignal and showLabels ? longStop : na, title="Buy Label", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=longColor, textcolor=color.white, transp=0)

plot(dir == 1 ? na : shortStop, title="Short Stop", style=plot.style_linebr, linewidth=2, color=shortColor)
sellSignal = dir == -1 and dir[1] == 1
plotshape(sellSignal ? shortStop : na, title="Short Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=shortColor, transp=0)
plotshape(sellSignal and showLabels ? shortStop : na, title="Sell Label", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=shortColor, textcolor=color.white, transp=0)





if testPeriod() and buySignal
    strategy.entry("Long",strategy.long)

if testPeriod() and sellSignal
    strategy.entry("Short",strategy.short)

अधिक