ट्रिपल माइक्रो-चैनल मोमेंटम प्रोबेबिलिटी मल्टी-फैक्टर ट्रेडिंग रणनीति

ATR MC EOD TP SL RR
निर्माण तिथि: 2025-05-20 14:16:22 अंत में संशोधित करें: 2025-05-20 14:16:22
कॉपी: 0 क्लिक्स: 450
2
ध्यान केंद्रित करना
319
समर्थक

ट्रिपल माइक्रो-चैनल मोमेंटम प्रोबेबिलिटी मल्टी-फैक्टर ट्रेडिंग रणनीति ट्रिपल माइक्रो-चैनल मोमेंटम प्रोबेबिलिटी मल्टी-फैक्टर ट्रेडिंग रणनीति

अवलोकन

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

रणनीति सिद्धांत

ट्रिपल माइक्रोकैनल गतिशीलता बहु-कारक ट्रेडिंग रणनीति का मूल सिद्धांत बाजार में तीन लगातार के-लाइनों के रूप में बनाई गई एकतरफा गतिशीलता चैनल की पहचान करना है। यह रणनीति निम्नलिखित चरणों के माध्यम से काम करती हैः

  1. माइक्रो-चैनल पहचानरणनीतिः सबसे पहले, लगातार तीन समदिश K लाइनों को ढूंढें ((सभी या तो सकारात्मक या नकारात्मक हैं), यह दर्शाता है कि बाजार एक अल्पकालिक एक-दिशात्मक प्रवृत्ति में हो सकता है।

  2. मल्टी फैक्टर स्कोरिंग सिस्टम: 10 प्रमुख कारकों के मूल्यांकन के माध्यम से आकृति गुणवत्ता का मात्रात्मक मूल्यांकन किया गयाः

    • फैक्टर 1: तीन K लाइनों की आकार की एकरूपता
    • फैक्टर 2: ऊपर/नीचे छाया को कम से कम करें
    • कारक 3: एक छोटा सा अंतर मौजूद है ((बहुहेड रूप में वर्तमान K लाइन का निम्न बिंदु तीन K लाइनों से पहले के उच्च बिंदुओं से अधिक है)
    • कारक 4: K-लाइन संस्थाओं के बीच की खाई
    • कारक 5: समापन मूल्य संबंध ((मल्टिहेड प्रारूप में वर्तमान समापन मूल्य पिछले K-लाइन के उच्चतम बिंदु से अधिक है)
    • फैक्टर 6: उच्च निचला / कम ऊंचा
    • फैक्टर 7: ओपन प्राइस पिछले K लाइन क्लोज प्राइस से अधिक/कम
    • फैक्टर 8: कोई नीचे/ऊपर की रेखा नहीं
    • कारक 9: कोई क्रॉसस्टार या उलटी K लाइन नहीं
  3. संभावना स्कोरप्रत्येक ट्रेडिंग सिग्नल के लिए अपेक्षित जीत की गणना करने के लिए, आधारभूत जीत की दर (70%) के आधार पर, गुणांक स्कोर जोड़ें।

  4. प्रवेश की शर्तें: जब समग्र स्कोर डिफ़ॉल्ट थ्रेशोल्ड ((50%) से अधिक होता है, तो सिस्टम एक ट्रेडिंग सिग्नल उत्पन्न करता है।

  5. जोखिम प्रबंधन

    • बहु-प्रवेश बिंदु लक्ष्य K रेखा के उच्च बिंदु या समापन मूल्य पर स्थित है (ऊपर की छाया रेखा के आकार के आधार पर)
    • स्टॉप लॉस प्रारंभिक K लाइन के नीचे सेट किया गया है
    • लक्ष्य मूल्य पूर्व निर्धारित रिस्क-रिटर्न अनुपात पर आधारित है
  6. स्थिति प्रबंधन: खाता निधि और प्रति लेनदेन जोखिम अनुपात के आधार पर ((डिफ़ॉल्ट 1%)), अनुबंधों की संख्या की गतिशील गणना।

  7. निकासी तंत्रस्टॉप-लॉस ट्रैक करने की रणनीति का उपयोग करना, लक्ष्य पर पहुंचने के बाद लाभ के कुछ हिस्सों को लॉक करना, और एक निश्चित स्टॉप-लॉस और एक दिन के भीतर अनिवार्य पीस समय सेट करना।

रणनीतिक लाभ

कोड के गहन विश्लेषण के माध्यम से, इस रणनीति के निम्नलिखित प्रमुख फायदे हैंः

  1. वस्तुनिष्ठ मात्रात्मक स्कोररणनीतिः 10 कारकों के माध्यम से प्रत्येक ट्रेडिंग सिग्नल के लिए एक मात्रात्मक स्कोर प्रदान करना, व्यक्तिपरक निर्णयों को कम करना और ट्रेडिंग की स्थिरता और निष्पक्षता को बढ़ाना।

  2. अनुकूलन क्षमताइस रणनीति को विभिन्न बाजारों और समय अवधि के लिए लागू किया जा सकता है क्योंकि यह विशिष्ट बाजार विशेषताओं के बजाय सामान्य मूल्य पैटर्न पर आधारित है।

  3. संभावना संचालितरणनीतियाँ सांख्यिकीय संभावनाओं पर आधारित होती हैं, प्रत्येक ट्रेडिंग सिग्नल में एक स्पष्ट अपेक्षित जीत होती है, जिससे व्यापारी डेटा के आधार पर निर्णय ले सकते हैं।

  4. उत्तम जोखिम नियंत्रण: प्रत्येक लेनदेन के लिए एक स्पष्ट स्टॉप-लॉस पोजीशन होती है और डायनामिक पोजीशन एडजस्टमेंट के माध्यम से खाते की निधि के एक निश्चित प्रतिशत के भीतर जोखिम को सीमित करती है।

  5. कई मैचों की व्यवस्थाइस रणनीति में ट्रेडरों के धन की सुरक्षा के लिए स्टॉप ट्रैकिंग, स्टॉप फिक्सिंग और इंट्राडे क्लियर पोजीशन जैसे कई विकल्प शामिल हैं।

  6. दृश्य प्रतिक्रियारणनीतियाँः चार्ट पर विस्तृत ट्रेडिंग सिग्नल मार्किंग और फैक्टर स्कोर प्रदान करते हैं, जिससे ट्रेडरों को प्रत्येक सिग्नल की गुणवत्ता को समझने में मदद मिलती है।

  7. समय का सही प्रबंधन: ट्रेडिंग समय खिड़की को सीमित करके और दिन के अंत में बंद होने की स्थिति को अनिवार्य करके, रातोंरात स्थिति रखने के जोखिम से बचा जाता है।

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

इस रणनीति के कई फायदे हैं, लेकिन इसके साथ निम्नलिखित संभावित जोखिम और चुनौतियां भी हैं:

  1. अति-अनुरूपता का जोखिम10 कारक भार और थ्रेशोल्ड सेटिंग्स में ऐतिहासिक डेटा के साथ अति-अनुरूपता का जोखिम हो सकता है, जिससे भविष्य में खराब प्रदर्शन हो सकता है।

  2. कम तरलता वाले बाजार जोखिम: कम तरलता वाले बाजारों में, प्रवेश और निकास की कीमतों में उतार-चढ़ाव हो सकता है, जो वास्तविक लेनदेन के परिणामों को प्रभावित कर सकता है।

  3. पैरामीटर संवेदनशीलता: रणनीति प्रदर्शन कई मापदंडों के लिए अत्यधिक संवेदनशील है, जिसमें एटीआर लंबाई, जीत की दर थ्रेशोल्ड और रिस्क रिटर्न अनुपात शामिल हैं। गलत पैरामीटर सेटिंग रणनीति प्रदर्शन को काफी प्रभावित कर सकती है।

  4. बाजार पर्यावरण पर निर्भरता: यह रणनीति स्पष्ट रूप से ट्रेंडिंग बाजार के वातावरण में सबसे अच्छा प्रदर्शन करती है, जो कि अस्थिर या अत्यधिक अस्थिर बाजारों में गलत संकेत दे सकती है।

  5. सिग्नल की कमी: कई सख्त शर्तों को पूरा करने की आवश्यकता के कारण, रणनीति कुछ समय के लिए कम व्यापारिक संकेत दे सकती है, जिससे समग्र रिटर्न प्रभावित हो सकता है।

  6. कम्प्यूटेशनल जटिलता: बहु-कारक मूल्यांकन रणनीति की गणना जटिलता को बढ़ाता है, और वास्तविक समय के लेनदेन में विलंबता चुनौतियों का सामना करना पड़ सकता है।

इन जोखिमों को कम करने के लिए निम्नलिखित उपाय किए जा सकते हैंः

  • विभिन्न बाजारों और समय-सीमाओं में रणनीति के लिए एक व्यापक पुनर्मूल्यांकन, इसकी स्थिरता का सत्यापन
  • एक छोटे से स्थान पर कुछ समय के लिए परीक्षण करें और धीरे-धीरे स्थान बढ़ाएं
  • विभिन्न बाजार स्थितियों के लिए समय-समय पर पैरामीटर का पुनर्मूल्यांकन और समायोजन करना
  • अतिरिक्त बाजार परिदृश्य फ़िल्टर जैसे कि रुझान संकेतक या अस्थिरता माप को जोड़ने पर विचार करें

रणनीति अनुकूलन दिशा

कोड विश्लेषण के आधार पर, इस रणनीति को निम्नलिखित दिशाओं में अनुकूलित किया जा सकता हैः

  1. कारक भार अनुकूलनवर्तमान में, सभी कारक समान भारित हैं (प्रत्येक प्रभाव के लिए 5% की सफलता दर) । मशीन सीखने के तरीकों के माध्यम से, इष्टतम कारक भार निर्धारित किया जा सकता है, जिससे पूर्वानुमान की सटीकता में सुधार हो सकता है। इस अनुकूलन से कुछ अधिक महत्वपूर्ण कारकों को अधिक वजन दिया जा सकता है, जबकि अन्य कारकों की प्रभावशीलता कम हो सकती है।

  2. बाजार परिवेश फ़िल्टर: बाजार के माहौल के आकलन के घटकों को जोड़ें, जैसे कि प्रवृत्ति की ताकत या अस्थिरता सूचकांक, केवल अनुकूल बाजार स्थितियों में व्यापार करें। यह ADX, अस्थिरता प्रतिशत और अन्य संकेतकों को जोड़कर किया जा सकता है, जिससे प्रतिकूल बाजार के माहौल में व्यापार संकेतों को रोका जा सके।

  3. समय फ़िल्टर में सुधार: वर्तमान रणनीति एक निश्चित ट्रेडिंग समय खिड़की का उपयोग करती है, जो विभिन्न समय अवधि के लिए रणनीति के प्रदर्शन का विश्लेषण करके ट्रेडिंग समय सीमा को अनुकूलित कर सकती है। उदाहरण के लिए, कुछ बाजार कुछ समय में अधिक दिशात्मक हो सकते हैं, जबकि अन्य समय में अधिक अस्थिर हो सकते हैं।

  4. अनुकूलन पैरामीटरस्थिर मापदंडों (जैसे एटीआर लंबाई, रिस्क-रिटर्न अनुपात) को बाजार की स्थितियों के आधार पर गतिशील समायोजन के लिए परिवर्तित करें। उदाहरण के लिए, उच्च अस्थिरता वाले बाजारों में रिस्क-रिटर्न अनुपात बढ़ाया जा सकता है, कम अस्थिरता वाले बाजारों में कम।

  5. बहु समय चक्र की पुष्टि करें: उच्च समय चक्र की पुष्टि करने के लिए एक तंत्र की शुरूआत, उदाहरण के लिए, मांग है कि सूर्य रेखा की प्रवृत्ति वर्तमान व्यापार की दिशा के साथ मेल खाती है। यह रणनीति की सफलता की दर में काफी वृद्धि कर सकता है और विपरीत व्यापार से बचा जा सकता है।

  6. खेल से बाहर निकलने की व्यवस्था: वर्तमान ट्रैकिंग स्टॉप को एटीआर-आधारित गतिशील ट्रैकिंग स्टॉप में सुधार किया जा सकता है, या समर्थन प्रतिरोध बिंदुओं के आधार पर एक संरचित आउटपुट। इस अनुकूलन से ट्रेंड की निरंतरता को बेहतर ढंग से पकड़ने में मदद मिलती है, जबकि ट्रेंड के अंत में समय पर बाहर निकलता है।

  7. एकीकृत मशीन लर्निंग: मशीन सीखने के एल्गोरिदम का उपयोग करें कि कौन से सिग्नल अधिक सफल होने की संभावना है, प्रत्येक ट्रेडिंग सिग्नल को अधिक सटीक संभावना स्कोर आवंटित करें। उदाहरण के लिए, अधिक जटिल पैटर्न निकालने के लिए यादृच्छिक वन या ग्रेडिएंट ट्री मॉडल का उपयोग करके ऐतिहासिक संकेतों को वर्गीकृत किया जा सकता है।

संक्षेप

ट्रिपल माइक्रोकैनल गतिशीलता बहु-कारक ट्रेडिंग रणनीति एक प्रणालीगत ट्रेडिंग विधि है जिसमें मूल्य पैटर्न पहचान और बहु-कारक स्कोरिंग शामिल है। यह रणनीति लगातार तीन के-लाइनों के निर्माण की पहचान करके और 10 प्रमुख कारकों का उपयोग करके सिग्नल गुणवत्ता का मूल्यांकन करके एक उद्देश्यपूर्ण, मात्रात्मक ट्रेडिंग निर्णय लेने की रूपरेखा प्रदान करती है।

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

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

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

रणनीति स्रोत कोड
/*backtest
start: 2024-05-20 00:00:00
end: 2025-05-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDC"}]
*/



//@version=5
strategy("Ali 3-Bar MC v6 10 Factor", overlay=true, pyramiding=0)

// === INPUTS ===
showLabels = input.bool(true, title="Show Entry Labels")
rewardMultiple = input.float(1, title="Reward : Risk")


atrLength = input.int(4, title="ATR Length")
var int bullSignalBarIndex = na
var int bearSignalBarIndex = na

// === ATR ===
atr = ta.sma(ta.tr(true), atrLength)

signalTimeout = 1  // 例如3根bar




// === 风险控制参数 ===
riskPerTradePercent = input.float(1, title="每笔风险占比 (%)")  // 如 1%
pointValue = input.float(5, title="每点价值,例如 ES 是 $50/pt")

// 10 Factor 
//@version=5

baseWinRate = 0.70
tick = syminfo.mintick
tolerance = 0.2  // 用于判断 bar 大小一致的容忍比例


// 获取3根 bar 的关键数据
body(i) => math.abs(close[i] - open[i])
barSize(i)  => math.abs(high[i] - low[i])
upperTailRatio(i) => (high[i] - math.max(close[i], open[i])) / barSize(i)
lowerTailRatio(i) => (math.min(close[i], open[i]) - low[i])/barSize(i)

upperTailTolerance = 0.15
lowerTailTolerance = 0.15
bodyTolerance = 0.7
barUniformTolerance = 0.3
win_threshold = 0.5
// 检测 BL MC(3-bar micro channel 向上)
isBLMC = close[2] > open[2] and close[1] > open[1] and close > open

// === 各项因子判断 ===
//f1_uniform = math.max(barSize(2)/barSize(1), barSize(1)/barSize(2)) < 1 + barUniformTolerance and  math.max(barSize(1)/barSize(0), barSize(1)/barSize(0)) < 1 + barUniformTolerance
f1_uniform = math.max(barSize(2)/barSize(0) , barSize(0)/barSize(2)) < 1 + barUniformTolerance 


f2_mostCOH = ((upperTailRatio(2) < upperTailTolerance? 1:0) +  (upperTailRatio(1) < upperTailTolerance? 1:0)  +  (upperTailRatio(0) < upperTailTolerance? 1:0) )>=2
f3_microGap = low > high[2] 
f4_tickGap = open > close[1] or open[1] > close[2] 
f5_closesAboveHigh = close > high[1] and close[1] > high[2]
f6_higherLows = low > low[1] and low[1] > low[2]
f7_opensAbovePriorClose = open >= close[1] or open[1] >= close[2]
f8_noLowerTail =  ((lowerTailRatio(2) < lowerTailTolerance? 1:0) +  (lowerTailRatio(1) < lowerTailTolerance? 1:0)  +  (lowerTailRatio(0) < lowerTailTolerance? 1:0) )>=1
f9_noDojiOrOpposite  =body(2) /  barSize(2) > bodyTolerance and body(1) /  barSize(1) > bodyTolerance and body(0) /  barSize(0) > bodyTolerance

// === 总评分计算 ===
score = 0
score := score - (f1_uniform ? 0 : 1)
score := score - (f2_mostCOH ? 0 : 1)
score := score - (f3_microGap ? 0 : 4)
score := score - (f4_tickGap ? 0 : 1)
score := score - (f5_closesAboveHigh ? 0 : 1)
score := score - (f6_higherLows ? 0 : 1)
score := score - (f7_opensAbovePriorClose ? 0 : 1)
score := score - (f8_noLowerTail ? 0 : 1)
score := score - (f9_noDojiOrOpposite ? 0 : 1)

winProb = baseWinRate + (score * 0.05)  // 每个因子加5%,最高 1.20

// === 图上标记 ===
if isBLMC


    labelText = str.tostring(winProb * 100, "#.##") + "%\n" +        "1️⃣ uniform: " + str.tostring(f1_uniform) + "\n" +         "2️⃣ mostCOL: " + str.tostring(f2_mostCOH) + "\n" +        "3️⃣ microGap: " + str.tostring(f3_microGap) + "\n" +        "4️⃣ tickGap: " + str.tostring(f4_tickGap) + "\n" +        "5️⃣ closes<priorLow: " + str.tostring(f5_closesAboveHigh) + "\n" +        "6️⃣ lowerHighs: " + str.tostring(f6_higherLows) + "\n" +        "7️⃣ opensBelowClose: " + str.tostring(f7_opensAbovePriorClose) + "\n" +        "8️⃣ noLowerTail: " + str.tostring(f8_noLowerTail) + "\n" +        "9️⃣ noDoji: " + str.tostring(f9_noDojiOrOpposite)    ,
    label.new(        bar_index,         low,         text=labelText,         style=label.style_label_up,         color=color.new(color.green, 0),         textcolor=color.white,         size=size.small    )



// === Ali BULL MC ===


isAliBull =  isBLMC and  winProb>=win_threshold

// === 检测 Bear Micro Channel ===
isBRMC = close[2] < open[2] and close[1] < open[1] and close < open

// === Bear 各项因子 ===
br_f1_uniform = math.max(barSize(2)/barSize(0) , barSize(0)/barSize(2)) < 1 + barUniformTolerance 
br_f2_mostCOL = ((lowerTailRatio(2) < lowerTailTolerance ? 1:0) +  (lowerTailRatio(1) < lowerTailTolerance ? 1:0) +  (lowerTailRatio(0) < lowerTailTolerance ? 1:0)) >= 2
br_f3_microGap = low[2] > high 
br_f4_tickGap = open < close[1] or open[1] < close[2]
br_f5_closesBelowLow = close < low[1] and close[1] < low[2]
br_f6_lowerHighs = high < high[1] and high[1] < high[2]
br_f7_opensBelowPriorClose = open < close[1] or open[1] < close[2]
br_f8_noUpperTail = ((upperTailRatio(2) < upperTailTolerance ? 1:0) +  (upperTailRatio(1) < upperTailTolerance ? 1:0) +  (upperTailRatio(0) < upperTailTolerance ? 1:0)) >= 1
br_f9_noDojiOrOpposite = body(2)/barSize(2) > bodyTolerance and body(1)/barSize(1) > bodyTolerance and body(0)/barSize(0) > bodyTolerance

// === Bear 总评分计算 ===
br_score = 0
br_score := br_score - (br_f1_uniform ? 0 : 1)
br_score := br_score - (br_f2_mostCOL ? 0 : 1)
br_score := br_score - (br_f3_microGap ? 0 : 4)
br_score := br_score - (br_f4_tickGap ? 0 : 1)
br_score := br_score - (br_f5_closesBelowLow ? 0 : 1)
br_score := br_score - (br_f6_lowerHighs ? 0 : 1)
br_score := br_score - (br_f7_opensBelowPriorClose ? 0 : 1)
br_score := br_score - (br_f8_noUpperTail ? 0 : 1)
br_score := br_score - (br_f9_noDojiOrOpposite ? 0 : 1)

br_winProb = baseWinRate + (br_score * 0.05)

// === Bear 图上标记 ===
if isBRMC

    labelText = str.tostring(br_winProb * 100, "#.##") + "%\n" +        "1️⃣ uniform: " + str.tostring(br_f1_uniform) + "\n" +         "2️⃣ mostCOL: " + str.tostring(br_f2_mostCOL) + "\n" +        "3️⃣ microGap: " + str.tostring(br_f3_microGap) + "\n" +        "4️⃣ tickGap: " + str.tostring(br_f4_tickGap) + "\n" +        "5️⃣ closes<priorLow: " + str.tostring(br_f5_closesBelowLow) + "\n" +        "6️⃣ lowerHighs: " + str.tostring(br_f6_lowerHighs) + "\n" +        "7️⃣ opensBelowClose: " + str.tostring(br_f7_opensBelowPriorClose) + "\n" +        "8️⃣ noUpperTail: " + str.tostring(br_f8_noUpperTail) + "\n" +        "9️⃣ noDoji: " + str.tostring(br_f9_noDojiOrOpposite)    ,
    label.new(        bar_index,         low,         text=labelText,         style=label.style_label_up,         color=color.new(color.red, 0),         textcolor=color.white,         size=size.small    )







// === Ali BEAR MC ===



isAliBear = isBRMC  and br_winProb >=win_threshold

// === ENTRY/RISK/TARGET ===
bullEntry = (upperTailRatio(0)<0.1 ? close :high + tick) 
bullStop =  open[2] - tick
bullRisk = bullEntry - bullStop
bullTarget = bullEntry + bullRisk * rewardMultiple

bearEntry = (lowerTailRatio(0)<0.1? close :low - tick) 
bearStop = open[2]  + tick
bearRisk =  bearStop - bearEntry 
bearTarget = bearEntry - bearRisk * rewardMultiple

// === 动态仓位计算(基于账户资金和止损大小) ===
riskAmount = strategy.equity * (riskPerTradePercent / 100)
bullContracts = math.max(math.floor(riskAmount / (bullRisk * pointValue)),1)
bearContracts = math.max(math.floor(riskAmount / (bearRisk * pointValue)),1)


// === STATE ===
var float bullGapCloseLine = na
var float bearGapCloseLine = na
var bool inLong = false
var bool inShort = false
var bool bullStructureExitArmed = false
var bool bearStructureExitArmed = false
var float lastBullOpen = na
var float lastBearOpen = na
var line currentTPLine = na
var line currentSLLine = na
var float fixedBullStop = na
var float fixedBullTarget = na
var float fixedBearStop = na
var float fixedBearTarget = na

canTradeNow = not na(time(timeframe.period, "0930-1545", "America/New_York"))  // 只在盘中前6小时交易




// === BULL ENTRY ===
if isAliBull and na(bullSignalBarIndex) and canTradeNow and strategy.position_size  == 0
    strategy.entry("Ali Long", strategy.long, stop=bullEntry, qty=bullContracts)
    strategy.exit("Close Long", from_entry = "Ali Long", stop = bullStop, trail_price = bullTarget, trail_offset =    atrLength )
    bullSignalBarIndex := bar_index
    fixedBullStop := bullStop
    fixedBullTarget := bullTarget

// === BEAR ENTRY ===
if isAliBear and na(bearSignalBarIndex) and canTradeNow and strategy.position_size  == 0
    strategy.entry("Ali Short", strategy.short, stop=bearEntry, qty=bearContracts)
    strategy.exit("Close Short", from_entry = "Ali Short", stop = bearStop,trail_price = bearTarget, trail_offset =    atrLength)
    bearSignalBarIndex := bar_index
    fixedBearStop := bearStop
    fixedBearTarget := bearTarget





// === RESET ===
if strategy.position_size != 0
    bullSignalBarIndex := na
    bearSignalBarIndex := na

if not na(bullSignalBarIndex) and (bar_index - bullSignalBarIndex >= signalTimeout) and strategy.opentrades == 0
    strategy.cancel("Ali Long")
    bullSignalBarIndex := na
    fixedBullStop := na
    fixedBullTarget := na

if not na(bearSignalBarIndex) and (bar_index - bearSignalBarIndex >= signalTimeout) and strategy.opentrades == 0
    strategy.cancel("Ali Short")
    bearSignalBarIndex := na
    fixedBearStop := na
    fixedBearTarget := na



eodTime = timestamp("America/New_York", year, month, dayofmonth, 15, 55)

if time >= eodTime and strategy.position_size != 0
    strategy.close_all(comment="EOD Exit")
    label.new(bar_index, close, "Exit: EOD", style=label.style_label_down, color=color.gray, textcolor=color.white, size=size.small)
    bearSignalBarIndex := na
    bullSignalBarIndex:=na
    fixedBearStop := na
    fixedBearTarget := na


plot(fixedBearTarget, title="Bull TP", color=color.green, style=plot.style_linebr)
plot(fixedBearStop, title="Bull SL", color=color.red, style=plot.style_linebr)