गति की ईंट रणनीति

लेखक:चाओझांग, दिनांकः 2024-02-19 15:32:17
टैगः

img

यह रणनीति बाजार की गति में बदलाव का आकलन सिम्युलेटेड ईंटों के गठन और ईंटों की दिशा पर लंबी या छोटी ईंटों के गठन के आधार पर करती है।

रणनीति तर्क

मूल तर्क एटीआर और समापन मूल्य संबंध की गणना करके ईंट गठन का अनुकरण करना है। विशेष रूप से, दो चर Brick1 और Brick2 परिभाषित किए गए हैं।

Brick1 की गणना इस प्रकार की जाती हैः यदि समापन मूल्य Brick1 के पिछले मूल्य + ATR से अधिक है, तो Brick1 = Brick1 का पिछला मूल्य + ATR; यदि समापन मूल्य Brick1 के पिछले - ATR से कम है, तो Brick1 Brick1 का पिछला - ATR मूल्य है; अन्यथा, Brick1 Brick1 के पिछले मूल्य को विरासत में लेता है।

Brick2 की गणना इस प्रकार की जाती हैः यदि Brick1 Brick1 के पिछले मान के बराबर नहीं है, तो Brick2 = Brick1 पिछले मान; अन्यथा, Brick2 के पिछले मान को विरासत में लें।

यह ईंट के गठन का अनुकरण करता है। जब ईंट 1 एक एटीआर से अधिक उठती है, तो एक ऊपर की ईंट बनती है; जब ईंट 1 एक एटीआर से अधिक गिरती है, तो एक नीचे की ईंट बनती है। ईंट 2 केवल पिछले ईंट की स्थिति को रिकॉर्ड करती है।

जब Brick1 और Brick2 पार करते हैं, इसका मतलब है कि ईंट ऊपर की ओर फैलती है, लंबे समय तक माना जाता है। जब Brick1 और Brick2 पार करते हैं, इसका मतलब है कि ईंट नीचे की ओर सिकुड़ जाती है, छोटी माना जाता है।

लाभ

  1. ईंट के गठन को निर्धारित करने के लिए एटीआर का उपयोग करें, निश्चित ईंट आकार से बचें, बाजार में उतार-चढ़ाव के लिए गतिशील रूप से अनुकूलित कर सकते हैं
  2. ईंटों के क्रॉसओवर के माध्यम से गति परिवर्तन की पहचान करें
  3. बाजार गति के आकलन के प्रति संवेदनशीलता को विभिन्न एटीआर चक्रों द्वारा समायोजित किया जा सकता है
  4. बाजार के रुझानों को सहज रूप से निर्धारित करने के लिए ईंटों के गठन और क्रॉसओवर को कल्पना करें

जोखिम

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

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

अनुकूलन

  1. अमान्य संकेतों से बचने के लिए सिग्नल फ़िल्टरिंग के लिए अन्य संकेतकों के साथ संयोजन, उदाहरण के लिए वॉल्यूम और अस्थिरता संकेतकों
  2. रुझान फ़िल्टरिंग जोड़ें, रिवर्स हानि से बचने के लिए केवल रुझान दिशा में संकेत जारी करें
  3. परीक्षण अवधि के दौरान पूर्ण नमूना पैरामीटर अनुकूलन को अपनाने के लिए स्वचालित रूप से इष्टतम पैरामीटर खोजने के लिए

सारांश

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


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

//@version=4


///Component Code Start
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)

testStopYear = input(2025, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(1, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)



/// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=input.bool, defval=false)
testPeriodBackgroundColor = testPeriodBackground and time >= testPeriodStart and time <= testPeriodStop ? 
   #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
/// Component Code Stop


//Zack_the_Lego (original AUTHOR) made into strategy by mkonsap
strategy("Flex Renko Emulator", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
margin = input(true, title="Margin?")
Margin = margin ? margin : false
res = input(type=input.resolution, defval="D", title="Resolution of ATR")
xATR = atr(14)
//TF = x78tf ? "78" : "39"
BrickSize = security(syminfo.tickerid, res, xATR)

//Brick1 =  close >  nz(Brick1[1]) + BrickSize ? nz(Brick1[1]) + BrickSize : close <
                    //nz(Brick1[1]) - BrickSize ?
                        //nz(Brick1[1]) - BrickSize
                            //: nz(Brick1[1]))


Brick1() =>
    s1 = 0.0
    s1 := close > nz(s1[1]) + BrickSize ? nz(s1[1]) + BrickSize : 
       close < nz(s1[1]) - BrickSize ? nz(s1[1]) - BrickSize : nz(s1[1])
    s1


Brick2() =>
    s2 = 0.0
    Brick1_1 = Brick1()
    s2 := Brick1() != Brick1()[1] ? Brick1_1[1] : nz(s2[1])
    s2

colorer = Brick1() > Brick2() ? color.green : color.red
p1 = plot(Brick1(), color=colorer, linewidth=4, title="Renko")
p2 = plot(Brick2(), color=colorer, linewidth=4, title="Renko")
fill(p1, p2, color=color.purple, transp=50)




mylong = crossover(Brick1(), Brick2())
myshort = crossunder(Brick1(), Brick2())

last_long = float(na)
last_short = float(na)
last_long := mylong ? time : nz(last_long[1])
last_short := myshort ? time : nz(last_short[1])

in_long = last_long > last_short ? 2 : 0
in_short = last_short > last_long ? 2 : 0

mylong2 = crossover(Brick1(), Brick2())
myshort2 = crossunder(Brick1(), Brick2())

last_long2 = float(na)
last_short2 = float(na)
last_long2 := mylong2 ? time : nz(last_long2[1])
last_short2 := myshort2 ? time : nz(last_short2[1])

in_long2 = last_long2 > last_short2 ? 0 : 0
in_short2 = last_short2 > last_long2 ? 0 : 0


condlongx = in_long + in_long2
condlong = crossover(condlongx, 1.9)
condlongclose = crossunder(condlongx, 1.9)

condshortx = in_short + in_short2
condshort = crossover(condshortx, 1.9)
condshortclose = crossunder(condshortx, 1.9)


// === STRATEGY - LONG POSITION EXECUTION WITH CLOSE ORDERS ===
//enterLong() => crossover(condlongx, 1.9) and testPeriod() and strategy.position_size <= 0
//exitLong()  => crossunder(condlongx, 1.9) and testPeriod() and strategy.position_size > 0
//strategy.entry(id = "Long", long = true, when = enterLong())
//strategy.close(id = "Long", when = exitLong())
// === STRATEGY - SHORT POSITION EXECUTION WITH CLOSE ORDER===
//enterShort() => crossover(condshortx, 1.9) and testPeriod() and strategy.position_size >= 0 and Margin
//exitShort() => crossunder(condshortx, 1.9)  and testPeriod() and strategy.position_size < 0
//strategy.entry(id = "Short", long = false, when = enterShort())
//strategy.close(id = "Short", when = exitShort())   
//END


///STRATEGY ONLY LONG AND SHORT/////
if crossover(condlongx, 1.9) and testPeriod() and strategy.position_size <= 0
    strategy.entry("Long", strategy.long, comment="Long")

if crossover(condshortx, 1.9) and testPeriod() and strategy.position_size >= 0
    strategy.close("Long", when=not Margin)

if crossover(condshortx, 1.9) and testPeriod() and strategy.position_size >= 0
    strategy.entry("Short", strategy.short, comment="Short", when=Margin)

/////// END ////


अधिक