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

यूट्यूब दिग्गजों की "जादूई डबल ईएमए रणनीति"

लेखक:FMZ~Lydia, बनाया गयाः 2022-11-07 12:02:31, अद्यतन किया गयाः 2023-09-15 20:51:23

img

जादूई डबल ईएमए रणनीति यूट्यूब दिग्गजों से

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

रणनीति द्वारा उपयोग किए जाने वाले संकेतक

  1. ईएमए संकेतक

डिजाइन सादगी के लिए, हम वीडियो में सूचीबद्ध चलती औसत घातीय का उपयोग नहीं करेंगे, हम इसके बजाय व्यापार दृश्य के अंतर्निहित ta.ema का उपयोग करेंगे (यह वास्तव में एक ही है) ।

  1. VuManChu स्विंग फ्री संकेतक

यह ट्रेडिंग व्यू पर एक संकेतक है, हम ट्रेडिंग व्यू पर जाने के लिए और स्रोत कोड लेने की जरूरत है।

img

VuManChu स्विंग फ्री का कोडः

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

// Credits to the original Script - Range Filter DonovanWall https://www.tradingview.com/script/lut7sBgG-Range-Filter-DW/
// This version is the old version of the Range Filter with less settings to tinker with

//@version=4
study(title="Range Filter - B&S Signals", shorttitle="RF - B&S Signals", overlay=true)

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Functions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Size Function
rng_size(x, qty, n)=> 
//    AC       = Cond_EMA(abs(x - x[1]), 1, n)
    wper      = (n*2) - 1
    avrng     = ema(abs(x - x[1]), n)
    AC = ema(avrng, wper)*qty
    rng_size = AC

//Range Filter Function
rng_filt(x, rng_, n)=>
    r          = rng_
    var rfilt  = array.new_float(2, x)
    array.set(rfilt, 1, array.get(rfilt, 0))
    if x - r > array.get(rfilt, 1)
        array.set(rfilt, 0, x - r)
    if x + r < array.get(rfilt, 1)
        array.set(rfilt, 0, x + r)
    rng_filt1 = array.get(rfilt, 0)
    
    hi_band   = rng_filt1 + r
    lo_band   = rng_filt1 - r
    rng_filt  = rng_filt1
    [hi_band, lo_band, rng_filt]
 
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Inputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Source
rng_src = input(defval=close, type=input.source, title="Swing Source")

//Range Period
rng_per = input(defval=20, minval=1, title="Swing Period")

//Range Size Inputs
rng_qty   = input(defval=3.5, minval=0.0000001, title="Swing Multiplier")

//Bar Colors
use_barcolor = input(defval=false, type=input.bool, title="Bar Colors On/Off")

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Definitions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Filter Values
[h_band, l_band, filt] = rng_filt(rng_src, rng_size(rng_src, rng_qty, rng_per), rng_per)

//Direction Conditions
var fdir = 0.0
fdir    := filt > filt[1] ? 1 : filt < filt[1] ? -1 : fdir
upward   = fdir==1 ? 1 : 0
downward = fdir==-1 ? 1 : 0

//Trading Condition
longCond = rng_src > filt and rng_src > rng_src[1] and upward > 0 or rng_src > filt and rng_src < rng_src[1] and upward > 0 
shortCond = rng_src < filt and rng_src < rng_src[1] and downward > 0 or rng_src < filt and rng_src > rng_src[1] and downward > 0

CondIni = 0
CondIni := longCond ? 1 : shortCond ? -1 : CondIni[1]
longCondition = longCond and CondIni[1] == -1
shortCondition = shortCond and CondIni[1] == 1

//Colors
filt_color = upward ? #05ff9b : downward ? #ff0583 : #cccccc
bar_color  = upward and (rng_src > filt) ? (rng_src > rng_src[1] ? #05ff9b : #00b36b) :
             downward and (rng_src < filt) ? (rng_src < rng_src[1] ? #ff0583 : #b8005d) : #cccccc

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Outputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Filter Plot
filt_plot = plot(filt, color=filt_color, transp=67, linewidth=3, title="Filter")

//Band Plots
h_band_plot = plot(h_band, color=color.new(#05ff9b, 100), title="High Band")
l_band_plot = plot(l_band, color=color.new(#ff0583, 100), title="Low Band")

//Band Fills
fill(h_band_plot, filt_plot, color=color.new(#00b36b, 92), title="High Band Fill")
fill(l_band_plot, filt_plot, color=color.new(#b8005d, 92), title="Low Band Fill")

//Bar Color
barcolor(use_barcolor ? bar_color : na)

//Plot Buy and Sell Labels
plotshape(longCondition, title = "Buy Signal", text ="BUY", textcolor = color.white, style=shape.labelup, size = size.normal, location=location.belowbar, color = color.new(color.green, 0))
plotshape(shortCondition, title = "Sell Signal", text ="SELL", textcolor = color.white, style=shape.labeldown, size = size.normal, location=location.abovebar, color = color.new(color.red, 0))

//Alerts
alertcondition(longCondition, title="Buy Alert", message = "BUY")
alertcondition(shortCondition, title="Sell Alert", message = "SELL")

रणनीति तर्क

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

  • लंबी पोजीशन व्यवस्था तेज लाइन धीमी लाइन के ऊपर है।

  • छोटी स्थिति की व्यवस्था तेज रेखा धीमी रेखा के नीचे है।

VuManChu Swing Free Indicator: VuManChu Swing Free indicator का उपयोग संकेत भेजने और अन्य शर्तों के साथ संयोजन में ऑर्डर देने के लिए किया जाता है। यह VuManChu Swing Free indicator स्रोत कोड से देखा जा सकता है कि longCondition चर खरीद संकेत का प्रतिनिधित्व करता है और shortCondition चर बिक्री संकेत का प्रतिनिधित्व करता है। इन दो चरों का उपयोग ऑर्डर देने की शर्तों के बाद के लेखन के लिए किया जाएगा।

अब चलिए ट्रेडिंग सिग्नल की विशिष्ट ट्रिगर स्थितियों के बारे में बात करते हैं:

  1. लंबी स्थिति में प्रवेश करने के नियम: पॉजिटिव के-लाइन का क्लोजिंग प्राइस ईएमए की फास्ट लाइन से ऊपर होना चाहिए, दोनों ईएमए एक लॉन्ग पोजीशन (स्लो लाइन से ऊपर फास्ट लाइन) होनी चाहिए, और वूमनचु स्विंग फ्री इंडिकेटर को एक खरीद संकेत दिखाना चाहिए (longCondition true) । यदि तीन शर्तें पूरी हो जाती हैं, तो यह के-लाइन लॉन्ग पोजीशन के प्रवेश के लिए प्रमुख के-लाइन है, और इस के-लाइन का क्लोजिंग प्राइस एंट्री पोजीशन है।

  2. लघु स्थिति में प्रवेश करने के नियम (लंबी स्थिति के विपरीत): नकारात्मक K-लाइन का समापन मूल्य EMA की फास्ट लाइन से नीचे होना चाहिए, दोनों EMA एक शॉर्ट पोजीशन (स्लो लाइन से नीचे फास्ट लाइन) होनी चाहिए, और VuManChu Swing Free इंडिकेटर को एक सेल सिग्नल दिखाना चाहिए (shortCondition true है) । यदि तीन शर्तें पूरी हो जाती हैं, तो K-लाइन का समापन मूल्य शॉर्ट एंट्री पोजीशन है।

क्या ट्रेडिंग का तर्क बहुत सरल है? चूंकि स्रोत वीडियो में लाभ स्टॉप और हानि स्टॉप निर्दिष्ट नहीं है, इसलिए मैं एक मध्यम लाभ स्टॉप और हानि स्टॉप विधि का उपयोग करता हूं, हानि को रोकने के लिए निश्चित बिंदुओं का उपयोग करता हूं, और लाभ स्टॉप को ट्रैक करता हूं।

कोड का डिजाइन

VuManChu स्विंग फ्री संकेतक के लिए कोड, हम इसे किसी भी परिवर्तन के बिना सीधे हमारी रणनीति कोड में डाल दिया।

img

इसके तुरंत बाद, हम पाइन भाषा कोड का एक टुकड़ा लिखते हैं जो ट्रेडिंग फ़ंक्शन को लागू करता हैः

// extend
fastEmaPeriod = input(50, "fastEmaPeriod")         // fast line period
slowEmaPeriod = input(200, "slowEmaPeriod")        // slow line period
loss = input(30, "loss")                           // stop loss points
trailPoints = input(30, "trailPoints")             // number of trigger points for moving stop loss
trailOffset = input(30, "trailOffset")             // moving stop profit offset (points)
amount = input(1, "amount")                        // order amount

emaFast = ta.ema(close, fastEmaPeriod)             // calculate the fast line EMA
emaSlow = ta.ema(close, slowEmaPeriod)             // calculate the slow line EMA

buyCondition = longCondition and emaFast > emaSlow and close > open and close > emaFast         // entry conditions for long positions
sellCondition = shortCondition and emaFast < emaSlow and close < open and close < emaFast       // entry conditions for short positions

if buyCondition and strategy.position_size == 0
    strategy.entry("long", strategy.long, amount)
    strategy.exit("exit_long", "long", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset)
if sellCondition and strategy.position_size == 0
    strategy.entry("short", strategy.short, amount)
    strategy.exit("exit_short", "short", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset)

A.Itदेखा जा सकता है कि जब buyCondition सच है, यानीः

  1. चर longCondition true (VuManChu Swing Free सूचक एक लंबी स्थिति संकेत भेजता है) ।
  2. ईएमए फास्ट > ईएमए स्लो (ईएमए लंबी स्थिति संरेखण)
  3. close > open (वर्तमान BAR सकारात्मक है), close > emaFast (बंद मूल्य EMA फास्ट लाइन से ऊपर है) ।

लंबे समय तक चलने के लिए तीन शर्तें।

B.जब sellCondition सही है, तो शॉर्ट पोजीशन बनाने के लिए तीन शर्तें लागू होती हैं (यहां दोहराई नहीं गई हैं) ।

फिर हम उपयोग strategy.entry समारोह में प्रवेश करने के लिए और एक स्थिति खोलने के मामले में एक अगर स्थिति निर्णय संकेत ट्रिगर, और सेट करने के लिएstrategy.exitएक ही समय में हानि को रोकने और लाभ को ट्रेल करने के लिए कार्य।

पूर्ण कोड

/*backtest
start: 2022-01-01 00:00:00
end: 2022-10-08 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
args: [["ZPrecision",0,358374]]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

// Credits to the original Script - Range Filter DonovanWall https://www.tradingview.com/script/lut7sBgG-Range-Filter-DW/
// This version is the old version of the Range Filter with less settings to tinker with

//@version=4
study(title="Range Filter - B&S Signals", shorttitle="RF - B&S Signals", overlay=true)

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Functions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Size Function
rng_size(x, qty, n)=> 
//    AC       = Cond_EMA(abs(x - x[1]), 1, n)
    wper      = (n*2) - 1
    avrng     = ema(abs(x - x[1]), n)
    AC = ema(avrng, wper)*qty
    rng_size = AC

//Range Filter Function
rng_filt(x, rng_, n)=>
    r          = rng_
    var rfilt  = array.new_float(2, x)
    array.set(rfilt, 1, array.get(rfilt, 0))
    if x - r > array.get(rfilt, 1)
        array.set(rfilt, 0, x - r)
    if x + r < array.get(rfilt, 1)
        array.set(rfilt, 0, x + r)
    rng_filt1 = array.get(rfilt, 0)
    
    hi_band   = rng_filt1 + r
    lo_band   = rng_filt1 - r
    rng_filt  = rng_filt1
    [hi_band, lo_band, rng_filt]
 
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Inputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Source
rng_src = input(defval=close, type=input.source, title="Swing Source")

//Range Period
rng_per = input(defval=20, minval=1, title="Swing Period")

//Range Size Inputs
rng_qty   = input(defval=3.5, minval=0.0000001, title="Swing Multiplier")

//Bar Colors
use_barcolor = input(defval=false, type=input.bool, title="Bar Colors On/Off")

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Definitions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Filter Values
[h_band, l_band, filt] = rng_filt(rng_src, rng_size(rng_src, rng_qty, rng_per), rng_per)

//Direction Conditions
var fdir = 0.0
fdir    := filt > filt[1] ? 1 : filt < filt[1] ? -1 : fdir
upward   = fdir==1 ? 1 : 0
downward = fdir==-1 ? 1 : 0

//Trading Condition
longCond = rng_src > filt and rng_src > rng_src[1] and upward > 0 or rng_src > filt and rng_src < rng_src[1] and upward > 0 
shortCond = rng_src < filt and rng_src < rng_src[1] and downward > 0 or rng_src < filt and rng_src > rng_src[1] and downward > 0

CondIni = 0
CondIni := longCond ? 1 : shortCond ? -1 : CondIni[1]
longCondition = longCond and CondIni[1] == -1
shortCondition = shortCond and CondIni[1] == 1

//Colors
filt_color = upward ? #05ff9b : downward ? #ff0583 : #cccccc
bar_color  = upward and (rng_src > filt) ? (rng_src > rng_src[1] ? #05ff9b : #00b36b) :
             downward and (rng_src < filt) ? (rng_src < rng_src[1] ? #ff0583 : #b8005d) : #cccccc

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Outputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Filter Plot
filt_plot = plot(filt, color=filt_color, transp=67, linewidth=3, title="Filter")

//Band Plots
h_band_plot = plot(h_band, color=color.new(#05ff9b, 100), title="High Band")
l_band_plot = plot(l_band, color=color.new(#ff0583, 100), title="Low Band")

//Band Fills
fill(h_band_plot, filt_plot, color=color.new(#00b36b, 92), title="High Band Fill")
fill(l_band_plot, filt_plot, color=color.new(#b8005d, 92), title="Low Band Fill")

//Bar Color
barcolor(use_barcolor ? bar_color : na)

//Plot Buy and Sell Labels
plotshape(longCondition, title = "Buy Signal", text ="BUY", textcolor = color.white, style=shape.labelup, size = size.normal, location=location.belowbar, color = color.new(color.green, 0))
plotshape(shortCondition, title = "Sell Signal", text ="SELL", textcolor = color.white, style=shape.labeldown, size = size.normal, location=location.abovebar, color = color.new(color.red, 0))

//Alerts
alertcondition(longCondition, title="Buy Alert", message = "BUY")
alertcondition(shortCondition, title="Sell Alert", message = "SELL")


// extend
fastEmaPeriod = input(50, "fastEmaPeriod")
slowEmaPeriod = input(200, "slowEmaPeriod")
loss = input(30, "loss")
trailPoints = input(30, "trailPoints")
trailOffset = input(30, "trailOffset")
amount = input(1, "amount")

emaFast = ta.ema(close, fastEmaPeriod)
emaSlow = ta.ema(close, slowEmaPeriod)

buyCondition = longCondition and emaFast > emaSlow and close > open and close > emaFast
sellCondition = shortCondition and emaFast < emaSlow and close < open and close < emaFast

if buyCondition and strategy.position_size == 0
    strategy.entry("long", strategy.long, amount)
    strategy.exit("exit_long", "long", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset)
if sellCondition and strategy.position_size == 0
    strategy.entry("short", strategy.short, amount)
    strategy.exit("exit_short", "short", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset)

बैकटेस्ट

बैकटेस्ट की समय सीमा जनवरी 2022 से अक्टूबर 2022 तक है। के-लाइन अवधि 15 मिनट है और बैकटेस्ट के लिए क्लोजिंग प्राइस मॉडल का उपयोग किया जाता है। बाजार बिनेंस ईटीएच_यूएसडीटी परपीट्यूअल कॉन्ट्रैक्ट चुनता है। पैरामीटर स्रोत वीडियो में फास्ट लाइन की 50 अवधि और स्लो लाइन की 200 अवधि के अनुसार सेट किए जाते हैं। अन्य पैरामीटर डिफ़ॉल्ट रूप से अपरिवर्तित रहते हैं। मैंने स्टॉप लॉस और ट्रैकिंग स्टॉप प्रॉफिट पॉइंट्स को 30 बिंदुओं पर व्यक्तिपरक रूप से सेट किया।

img

img

img

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

चलो एक अलग BTC_USDT शाश्वत अनुबंध की कोशिश करते हैंः

img

बीटीसी पर बैकटेस्ट का परिणाम भी बहुत लाभदायक था:

img

img

रणनीतिःhttps://www.fmz.com/strategy/385745

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


संबंधित

अधिक