ट्रेलिंग स्टॉप लॉस रणनीति के साथ ट्रिपल ईएमए

लेखक:चाओझांग, दिनांक: 2023-10-17 15:05:41
टैगः

img

अवलोकन

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

सिद्धांत

जब 5-दिवसीय ईएमए 20-दिवसीय ईएमए से ऊपर जाता है, और सभी तीन ईएमए तेजी से संरेखित होते हैं (5-दिवसीय ईएमए > 20-दिवसीय ईएमए > 50-दिवसीय ईएमए), और वर्तमान बार बंद कुछ टिक के पास पिछले बार बंद से ऊपर होता है, तो लंबा हो जाता है। जब 5-दिवसीय ईएमए 20-दिवसीय ईएमए से नीचे जाता है, और सभी तीन ईएमए मंदी से संरेखित होते हैं (5-दिवसीय ईएमए < 20-दिवसीय ईएमए < 50-दिवसीय ईएमए), और वर्तमान बार बंद कुछ टिक के पास पिछले बार बंद से नीचे होता है, तो छोटा हो जाता है।

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

लाभ

  1. संकेत उत्पन्न करने के लिए ट्रिपल ईएमए का उपयोग करने से बाजार शोर को प्रभावी ढंग से फ़िल्टर किया जा सकता है और रुझानों की पहचान की जा सकती है। फास्ट ईएमए नवीनतम परिवर्तनों को दर्शाता है, मध्यम ईएमए रुझान की दिशा निर्धारित करता है, और धीमी ईएमए ऑसिलेशन को फ़िल्टर करता है।

  2. वर्तमान बार बंद को पिछले बार बंद से तुलना करने से नकली संकेतों को और फ़िल्टर किया जाता है और अनावश्यक ट्रेडों को कम किया जाता है।

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

  4. इस रणनीति की लचीली पैरामीटर सेटिंग्स दैनिक से मिनट बार तक विभिन्न उत्पादों और समय सीमाओं में अनुकूलन की अनुमति देती हैं।

जोखिम

  1. ईएमए के लगातार क्रॉसिंग से विभिन्न बाजारों में अत्यधिक ट्रेड हो सकते हैं, जिससे कमीशन और स्लिप से होने वाली लागत बढ़ जाती है।

  2. ट्रेलिंग स्टॉप लॉस बड़े पैमाने पर विप्सॉव के दौरान प्रवृत्ति से समय से पहले बाहर निकल सकता है।

  3. ईएमए विलंब के कारण प्रमुख मोड़ और नुकसान हो सकते हैं।

  4. ईएमए अवधि जैसे मापदंडों के लिए विभिन्न उत्पादों और समय सीमाओं के लिए अनुकूलन की आवश्यकता होती है।

सुधार दिशाएँ

  1. ट्रेडिंग सिग्नल को फ़िल्टर करने के लिए एमएसीडी, केडी जैसे अन्य संकेतकों को शामिल करें।

  2. सर्वोत्तम संयोजन खोजने के लिए विशिष्ट उत्पादों और समय सीमाओं के लिए मापदंडों का परीक्षण और अनुकूलन करें।

  3. मानवीय पर्यवेक्षण या मशीन लर्निंग के माध्यम से गतिशील रूप से मापदंडों को समायोजित करें।

  4. विशेष बाजार स्थितियों के लिए ट्रेलिंग स्टॉप को निष्क्रिय करने और पूर्ण स्थिति को बनाए रखने पर विचार करें।

  5. सरल ट्रेलिंग स्टॉप लॉस को अधिक उन्नत स्वचालित लाभ लेने वाले तंत्रों से बदल दें।

निष्कर्ष

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


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-02 12:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Matt Dearden - IndoPilot
// @version=4

/////////////////////////////////////////////////////// Initial Parameters /////////////////////////////////////////////////////// 
SystemName = "Triple EMA Strategy"
ShortSystemName = "TEMA"
InitPosition = 0
InitCapital = 50000
InitCommission = 0.004 //approx value to compensate for Oanda spreads
InitPyramidMax = 0
CalcOnorderFills = true

strategy(title=SystemName, shorttitle=ShortSystemName, overlay=true, pyramiding=InitPyramidMax, 
 default_qty_type=strategy.cash, default_qty_value=InitPosition, commission_type=strategy.commission.percent, 
 commission_value=InitCommission, initial_capital=InitCapital, max_lines_count=500, 
 max_labels_count=500, process_orders_on_close=false, calc_on_every_tick=false) 

///////////////////////////////////////////////////////////// Inputs /////////////////////////////////////////////////////////////

DateFilter = input(false, "═════ Data Filtering ═════") 
InitYear = input(title="Year", type=input.integer, defval=2021, minval=2000, maxval=2021)
InitMonth = input(title="Month (0=ALL)", type=input.integer, defval=0, minval=0, maxval=12)
InitStopLoss = input(title="Stop Loss (ticks)", type=input.integer, defval=100, minval=0, maxval=1000) 
TrailingStopLoss = input(title="Trailing S/L (ticks)", type=input.integer, defval=130, minval=0, maxval=1000) 
InitBuffer = input(title="Buffer (ticks)", type=input.integer, defval=15, minval=0, maxval=1000) 
InitEMA1 = input(title="EMA 1", type=input.integer, defval=5, minval=0, maxval=1000) 
InitEMA2 = input(title="EMA 2", type=input.integer, defval=20, minval=0, maxval=1000) 
InitEMA3 = input(title="EMA 3", type=input.integer, defval=50, minval=0, maxval=1000) 

//////////////////////////////////////////////////////////// Variables ///////////////////////////////////////////////////////////

var StopLoss = float(0.0)
var StartPrice = float(0.0)
//setup multipliers and catch JPY difference
Multiplier = syminfo.currency == "JPY" ? 10 : 1000
//get the daily exchange rate from yesterday
//X_rate = security(AccountCurrency+syminfo.currency, "D", close[1]) 
OrderQty = 1  
Buffer = InitBuffer / (Multiplier * 100)

/////////////////////////////////////////////////////// Triple EMA Strategy //////////////////////////////////////////////////////

EMA1 = ema(close, InitEMA1)
EMA2= ema(close, InitEMA2)
EMA3 = ema(close, InitEMA3)

//entry conditions
longCondition = crossover(EMA1, EMA2) and close > EMA3 and EMA1 > EMA3 and EMA2 > EMA3 and close > (close[1] + Buffer) 
shortCondition = crossunder(EMA1, EMA2) and close < EMA3 and EMA1 < EMA3 and EMA2 < EMA3 and close < (close[1] - Buffer) 

/////////////////////////////////////////////////////// Trailing Stoploss ////////////////////////////////////////////////////////

if (strategy.position_size > 0 and (close > (StartPrice + (TrailingStopLoss / (100 * Multiplier)))))  
    StopLoss := max(StopLoss, close - (TrailingStopLoss / (100 * Multiplier))) 
    strategy.exit("Long Stoploss", "Long") 
    
if (strategy.position_size < 0 and (close < (StartPrice - (InitStopLoss / (100 * Multiplier))))) 
    StopLoss := min(StopLoss, close + (TrailingStopLoss / (100 * Multiplier)))
    strategy.exit("Short Stoploss", "Short") 
    
///////////////////////////////////////////////////////// Setup entries /////////////////////////////////////////////////////////

if (longCondition)
    StartPrice := close
    StopLoss := StartPrice - (InitStopLoss / (100 * Multiplier)) 
    strategy.entry("Long", strategy.long, qty=OrderQty)
    strategy.exit("Long Stoploss", "Long")

if (shortCondition)
    StartPrice := close
    StopLoss := StartPrice + (InitStopLoss / (100 * Multiplier)) 
    strategy.entry("Short", strategy.short, qty=OrderQty)
    strategy.exit("Short Stoploss", "Short")
    
///////////////////////////////////////////////////////// Draw the EMAs /////////////////////////////////////////////////////////
plot(EMA1, "EMA1", color=#00FF00)
plot(EMA2, "EMA2", color=#FF0000)
plot(EMA3, "EMA3", color=#4040FF)


अधिक