मोमेंटम स्क्रैच ब्रेकआउट ट्रेंड ट्रैकिंग रणनीति

लेखक:चाओझांग, दिनांक: 2023-11-13 17:46:01
टैगः

img

अवलोकन

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

रणनीति तर्क

  1. बोलिंगर बैंड के मध्य बैंड, ऊपरी बैंड और निचले बैंड की गणना करें। मध्य बैंड बंद मूल्य का n-दिन का सरल चलती औसत है, ऊपरी और निचले बैंड बंद मूल्य का मध्य बैंड प्लस/माइनस m गुना n-दिन का मानक विचलन है।

  2. केल्टनर चैनलों की मध्य रेखा, ऊपरी रेखा और निचली रेखा की गणना करें। मध्य रेखा बंद मूल्य का n-दिवसीय सरल चलती औसत है, ऊपरी और निचली रेखाएँ मध्य रेखा प्लस/माइनस एम गुना वास्तविक सीमा का n-दिवसीय सरल चलती औसत हैं।

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

  4. गति संकेतक के रूप में रैखिक प्रतिगमन वक्र के मूल्य की गणना करें। ऊपर की ओर 0 खरीद संकेत है जबकि नीचे की ओर 0 बिक्री संकेत है।

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

रणनीति के फायदे

  1. गुणवत्ता संपीड़न और विस्तार पैटर्न की पहचान करने के लिए बोलिंगर बैंड और केल्टनर चैनलों के दोहरे निस्पंदन का उपयोग करना।

  2. गति संकेतक समय पर मूल्य प्रवृत्ति उलट को पकड़ सकता है, चैनल संकेतक को पूरक करता है।

  3. लाभ के अवसरों को बढ़ाने के लिए जल्दी प्रवेश की अनुमति दें।

  4. Adopt multiple condition judgment to avoid over-trading during ranging markets. कई शर्तों का निर्णय लें ताकि बाजारों में ओवर-ट्रेडिंग से बचा जा सके।

  5. तकनीकी संकेतकों के मापदंडों को अनुकूलित किया जा सकता है, विभिन्न उत्पादों और मापदंड संयोजनों के अनुकूल।

  6. बैकटेस्ट समय सीमा को विशिष्ट अवधियों में अनुकूलित करने के लिए सेट किया जा सकता है।

रणनीति के जोखिम

  1. ट्रेंड फॉलो करने वाली रणनीतियां ट्रेंड रिवर्स होने पर नुकसान का शिकार होती हैं।

  2. अनुचित पैरामीटर सेटिंग्स से ओवर-ट्रेडिंग या खराब सिग्नल गुणवत्ता हो सकती है।

  3. ऐतिहासिक आंकड़ों पर निर्भरता भविष्य में स्थिर लाभ की गारंटी नहीं दे सकती है।

  4. ब्लैक स्वान घटनाओं के कारण बाजार की अशांति और कीमतों में भारी उतार-चढ़ाव से निपटने में असमर्थ।

  5. गलत बैकटेस्ट समय विंडो सेटिंग्स ओवरफिटिंग का कारण बन सकती हैं।

अनुकूलन दिशाएँ

  1. सबसे अच्छा संयोजन खोजने के लिए बोलिंगर बैंड और केल्टनर चैनलों के मापदंडों का अनुकूलन करें।

  2. ट्रेड प्रति अधिकतम हानि को नियंत्रित करने के लिए ट्रैलिंग स्टॉप लॉस जोड़ने का परीक्षण करें।

  3. विशिष्ट उत्पादों और अवधि/पैरामीटर संयोजनों के लिए आगे के अनुकूलन का प्रयास करें।

  4. ट्रेंड रिवर्स का पता लगाने के लिए मशीन लर्निंग मॉडल को एकीकृत करना।

  5. विभिन्न प्रविष्टि अनुक्रम और स्थिति आकार रणनीति का परीक्षण करें।

  6. समय पर रुझान बदलने और बाहर निकलने के संकेतों की पहचान करने के लिए शोध करें।

सारांश

This strategy integrates multiple technical indicators to judge price trend direction and follow the trend, having relatively strong adaptability. By customizing parameters and using multiple condition filters, it can effectively control trading frequency and improve signal quality. But reversal trades and black swan events should still be watched out for. Further exploring trend reversal signals and risk control mechanisms can be done to make the strategy more robust. This strategy integrates multiple technical indicators to judge the price trend direction and follow the trend, having relatively strong adaptability. By customizing parameters and using multiple condition filters, it can effectively control trading frequency and improve signal quality. But reversal trades and black swan events should still be watched out for. आगे की खोज trend reversal signals and risk control mechanisms can be done to make the strategy more robust. इस रणनीति में ट्रेडिंग की आवृत्ति को प्रभावी ढंग से नियंत्रित करने और संकेतों की गुणवत्ता में सुधार करने के लिए कई प्रकार के तकनीकी संकेत शामिल हैं।


/*backtest
start: 2022-11-06 00:00:00
end: 2023-11-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//Strategy based on LazyBear Squeeze Momentum Indicator
//I added some custom feature and filters
//
// @author LazyBear
// List of all my indicators:
// https://docs.google.com/document/d/15AGCufJZ8CIUvwFJ9W-IKns88gkWOKBCvByMEvm5MLo/edit?usp=sharing
// v2 - fixed a typo, where BB multipler was always stuck at 1.5. [Thanks @ucsgears]
//
strategy(shorttitle = "SQZMOM_LB", title="Strategy for Squeeze Momentum Indicator [LazyBear]", overlay=false, calc_on_every_tick=true, pyramiding=0,default_qty_type=strategy.percent_of_equity,default_qty_value=100,currency=currency.USD)

length = input(14, title="BB Length")
mult = input(2.0,title="BB MultFactor")
lengthKC=input(16, title="KC Length")
multKC = input(1.5, title="KC MultFactor")
 
useTrueRange = input(true, title="Use TrueRange (KC)", type=bool)

//FILTERS
useExtremeOrders  = input(false, title="Early entry on momentum change", type=bool)
useMomAverage = input(false, title="Filter for Momenutum value", type=bool)
MomentumMin = input(20, title="Min for momentum")

// Calculate BB
src = close
basis = sma(src, length)
dev = mult * stdev(src, length)
upperBB = basis + dev
lowerBB = basis - dev
 
// Calculate KC
ma = sma(src, lengthKC)
range = useTrueRange ? tr : (high - low)
rangema = sma(range, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC
 
sqzOn  = (lowerBB > lowerKC) and (upperBB < upperKC)
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
noSqz  = (sqzOn == false) and (sqzOff == false)
 
val = linreg(src  -  avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), lengthKC,0)
 
bcolor = iff( val > 0,            iff( val > nz(val[1]), lime, green),            iff( val < nz(val[1]), red, maroon))
scolor = noSqz ? blue : sqzOn ? black : aqua
plot(val, color=bcolor, style=histogram, linewidth=4)
plot(0, color=scolor, style=cross, linewidth=2)

//LOGIC
//momentum filter
filterMom=useMomAverage?abs(val)>(MomentumMin/100000)?true:false:true

//standard condition
longCondition = scolor[1]!=aqua and scolor==aqua and bcolor==lime and filterMom
exitLongCondition = bcolor==green and not useExtremeOrders
shortCondition = scolor[1]!=aqua and scolor==aqua and bcolor==red and filterMom
exitShortCondition = bcolor==maroon and not useExtremeOrders

//early entry
extremeLong= useExtremeOrders and scolor==aqua and bcolor==maroon and bcolor[1]!=bcolor[0] and filterMom
exitExtLong = scolor==black or bcolor==red
extremeShort = useExtremeOrders and scolor==aqua and bcolor==green and bcolor[1]!=bcolor[0] and filterMom
exitExtShort = scolor==black or bcolor==lime

//STRATEGY

strategy.entry("SQ_Long", strategy.long, when = longCondition)
strategy.close("SQ_Long",when = exitLongCondition )

strategy.entry("SQ_Long_Ext", strategy.long, when = extremeLong)
strategy.close("SQ_Long_Ext",when = exitExtLong)
//strategy.exit("exit Long", "SQ_Long", when = exitLongCondition)

strategy.entry("SQ_Short", strategy.short, when = shortCondition)
strategy.close("SQ_Short",when = exitShortCondition)

strategy.entry("SQ_Short_Ext", strategy.short, when = extremeShort)
strategy.close("SQ_Short_Ext",when = exitExtShort)
//strategy.exit("exit Short", "SQ_Short", when = exitShortCondition)



// // === Backtesting Dates === thanks to Trost

// testPeriodSwitch = input(true, "Custom Backtesting Dates")
// testStartYear = input(2018, "Backtest Start Year")
// testStartMonth = input(1, "Backtest Start Month")
// testStartDay = input(1, "Backtest Start Day")
// testStartHour = input(0, "Backtest Start Hour")
// testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
// testStopYear = input(2018, "Backtest Stop Year")
// testStopMonth = input(12, "Backtest Stop Month")
// testStopDay = input(14, "Backtest Stop Day")
// testStopHour = input(23, "Backtest Stop Hour")
// testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
// testPeriod() =>
//     time >= testPeriodStart and time <= testPeriodStop ? true : false
// isPeriod = testPeriodSwitch == true ? testPeriod() : true
// // === /END

// if not isPeriod
//     strategy.cancel_all()
//     strategy.close_all()
        



अधिक