KDJ انتہائی الٹ رجحان سے باخبر رہنے کی حکمت عملی: J اشارے پر مبنی کثیر جہتی مقداری تجارتی نظام

KDJ J值 趋势跟踪 极值反转 EMA 技术指标 量化交易 动量策略 波动率过滤 风险管理
تخلیق کی تاریخ: 2025-08-04 09:33:31 آخر میں ترمیم کریں: 2025-08-04 09:33:31
کاپی: 4 کلکس کی تعداد: 228
2
پر توجہ دیں
319
پیروکار

KDJ انتہائی الٹ رجحان سے باخبر رہنے کی حکمت عملی: J اشارے پر مبنی کثیر جہتی مقداری تجارتی نظام KDJ انتہائی الٹ رجحان سے باخبر رہنے کی حکمت عملی: J اشارے پر مبنی کثیر جہتی مقداری تجارتی نظام

حکمت عملی کا جائزہ

کے ڈی جے انتہائی ریورس ٹرینڈ ٹریکنگ حکمت عملی ایک مقداری تجارتی نظام ہے جس میں حرکیات کے الٹ اور رجحان ٹریکنگ کا تصور شامل ہے۔ اس حکمت عملی کا بنیادی مقصد J اشارے کے انتہائی خطے ((0 یا 100) کے بعد پہلی الٹ سگنل کو پکڑنا ہے ، اور EMA676 کی یکساں لائن کے ذریعے رجحان کی سمت کو فلٹر کرنا ہے تاکہ اس بات کا یقین کیا جا سکے کہ تجارت کی سمت مرکزی رجحان کے مطابق ہے۔ یہ نظام عین مطابق اندراج کی شرائط ، لچکدار پوزیشن مینجمنٹ اور سخت رسک کنٹرول میکانزم کا استعمال کرتا ہے ، جو اتار چڑھاؤ والی مارکیٹوں میں اعلی امکان کے تجارتی مواقع کی تلاش کرتا ہے۔ یہ حکمت عملی خاص طور پر تکنیکی اشارے کے اوور بیس اور اوور سیل کے بعد باؤنس کی پیروی کرنے کے لئے موزوں ہے۔

حکمت عملی کا اصول

اس حکمت عملی کا بنیادی منطق کے ڈی جے اشارے کی جے ویلیو خصوصیت پر مبنی ہے ، اور رجحان فلٹرنگ کے ساتھ مل کر عین مطابق اندراج کو حاصل کرتا ہے۔ اس کے بنیادی اصول مندرجہ ذیل ہیں:

  1. J قدر انتہائی قدر شناختحکمت عملی کی نگرانی کریں کہ آیا جے کی قیمت پہلے سے طے شدہ انتہائی حد تک پہنچ گئی ہے ((ڈیفالٹ اوپری 100 ، نچلی حد 0) ، یہ انتہائی حد علاقہ عام طور پر مارکیٹ کو زیادہ خریدنے یا زیادہ فروخت کرنے کی نمائندگی کرتے ہیں۔

  2. مسلسل تبدیلی کے پیٹرن کی تصدیق: حکمت عملی کا تقاضا ہے کہ J کی قیمت انتہائی حد تک پہنچنے کے بعد ، مسلسل 3 K لائنوں میں یکطرفہ تبدیلیاں ہونی چاہئیں ((مسلسل اوپر یا نیچے)) ، یہ نمونہ اشارے کی مضبوط نقل و حرکت کی تصدیق کرسکتا ہے۔

  3. ریورس سگنل کی گرفتاری: جب J قدر نے مسلسل 3 K لائنوں کی یکطرفہ حرکت مکمل کی ، تو حکمت عملی نے پہلی بار سامنے آنے والی الٹا سمت میں تبدیلی کی نگرانی کی ، یعنی J قدر مسلسل عروج سے زوال میں تبدیل ہوگئی ، یا مسلسل زوال سے عروج میں تبدیل ہوگئی۔

  4. رجحانات کی سمت فلٹر کریں: حکمت عملی ای ایم اے 676 اوسط لائن کو رجحانات کے معیار کے طور پر استعمال کرتی ہے ، صرف اس صورت میں جب قیمت اوسط سے اوپر ہو تو زیادہ سگنل دینے پر غور کریں ، اور اس بات کو یقینی بنائیں کہ تجارت کی سمت مجموعی رجحان کے مطابق ہو۔

  5. متحرک سٹاپ نقصاناسٹریٹجی: اسٹاپ اور نقصان کی حد کو داخلے کی قیمت پر مبنی فی صد کے حساب سے استعمال کیا جاتا ہے ، 3٪ اسٹاپ اور 2.2٪ اسٹاپ نقصان کی ڈیفالٹ ترتیب کے ساتھ ، 1 سے زیادہ رسک سے فائدہ اٹھانے کے لئے ایک تجارتی ڈھانچہ۔

  6. ذہین گودام کا انتظام: سسٹم فکسڈ معاہدوں کی تعداد اور خطرے پر مبنی فی صد کے حساب سے دو پوزیشنوں کا حساب کتاب فراہم کرتا ہے ، جو ہر تجارت کے خطرے کے حاشیہ کی متحرک حرکت کے مطابق پوزیشن کا سائز ایڈجسٹ کرتا ہے ، فنڈز کے استعمال کی کارکردگی کو بہتر بناتا ہے۔

اسٹریٹجک فوائد

کوڈ کا گہرائی سے تجزیہ کرنے کے بعد ، اس حکمت عملی میں درج ذیل نمایاں فوائد ہیں:

  1. درست سگنل ٹرگر: J قدر نہ صرف انتہائی حد تک پہنچنے کی ضرورت ہے، لیکن یہ بھی مسلسل 3 K لائنوں کی ایک طرفہ تحریک کا سامنا کرنا پڑتا ہے، اور پھر پہلی الٹ پکڑنے کے بعد، یہ پیچیدہ شرط سگنل کی وشوسنییتا میں بہت اضافہ ہوا ہے، جھوٹے ٹوٹنے کم.

  2. رجحان اور الٹ کا کامل امتزاجاس حکمت عملی میں رجحانات کی پیروی کرنے (EMA676 سمت فلٹرنگ) اور الٹ ٹریڈنگ (J قیمت کی انتہائی قیمتوں میں واپسی) دونوں ٹریڈنگ خیالات کا ایک ہوشیار امتزاج کیا گیا ہے ، جس میں بڑے رجحانات کی سمت کا احترام کیا گیا ہے ، جبکہ رجحانات میں اعلی امکانات کے واپسی کے مواقع کو بھی پکڑ لیا گیا ہے۔

  3. خود کار طریقے سے خطرے کا انتظام: کوڈ میں خطرے کے فیصد کی بنیاد پر متحرک پوزیشن کی جگہ کا حساب لگانا ہے ، جس سے ہر تجارت کے لئے خطرے کی کھڑکی مستقل رہتی ہے ، اس سے قطع نظر کہ مارکیٹ میں اتار چڑھاؤ کس طرح بدلتا ہے ، اس سے مستحکم خطرے پر قابو پایا جاسکتا ہے۔

  4. واضح بصری آراءحکمت عملی: چارٹ پر داخلہ سگنل ، اسٹاپ اسٹاپ ٹریلرز اور اہم قیمت لائنیں نقشہ تیار کی گئیں ، تاجر ہر تجارت کے نفاذ کے منطق اور نتائج کو بصری طور پر سمجھ سکتا ہے۔

  5. لچکدار پیرامیٹرز ترتیبسسٹم میں بہت سارے ایڈجسٹ پیرامیٹرز ہیں ، بشمول کے ڈی جے حساب کتاب کی مدت ، ای ایم اے کی لمبائی ، انتہائی حد کی ترتیب ، اسٹاپ نقصان کا تناسب ، وغیرہ۔ حکمت عملی کو مختلف مارکیٹ کے حالات اور تجارت کی اقسام کے مطابق ڈھال لیا جاسکتا ہے۔

  6. ابتدائی انتباہ کا نظام: کوڈ میں سگنل ٹرگر کے قریب انتباہی حالات ڈیزائن کیے گئے ہیں ، جیسے کہ جب جے کی قیمت انتہائی حد کے علاقے کے قریب ہے یا انٹری سگنل بننے والا ہے تو ، تاجر کو تیاری کے لئے پہلے سے مطلع کیا جاسکتا ہے ، جس سے آپریشنل کارکردگی میں اضافہ ہوتا ہے۔

اسٹریٹجک رسک

اس حکمت عملی کے ڈیزائن کے باوجود ، اس میں مندرجہ ذیل ممکنہ خطرات ہیں:

  1. انتہائی حالات میں سٹاپ نقصان: مارکیٹ میں اچھال یا انتہائی اتار چڑھاؤ کی صورت میں ، پیش گوئی شدہ فیصد اسٹاپ نقصان متوقع قیمت پر عملدرآمد نہیں کرسکتا ہے ، جس کی وجہ سے اصل نقصانات توقع سے زیادہ ہیں۔ اس کا حل یہ ہے کہ آؤٹ سٹیج اسٹاپ کا نظام متعارف کرایا جائے ، یا انڈور شرائط کے استعمال پر غور کیا جائے۔

  2. اوسط خطے کے پیچھے کا خطرہ:EMA676 طویل مدتی اوسط کے طور پر نمایاں طور پر پیچھے رہ جانے والی ہے ، جو رجحان کی تبدیلی کے ابتدائی مرحلے میں غلط سمت کی رہنمائی کرسکتی ہے۔ سگنل کے معیار کو بہتر بنانے کے لئے کثیر دورانیہ تجزیہ کے ساتھ مل کر یا مختصر مدت کے رجحان کی تصدیق کے اشارے شامل کرنے کی سفارش کی جاتی ہے۔

  3. پیرامیٹرز کو زیادہ سے زیادہ فٹ ہونے کے لئے بہتر بنائیں: موجودہ پیرامیٹرز ((جیسے کے ڈی جے کا دورانیہ 60 ، انتہائی قیمت کی ترتیب 1000) ممکنہ طور پر تاریخی اعداد و شمار کی اصلاح پر مبنی ہے ، جس میں زیادہ سے زیادہ فٹ ہونے کا خطرہ ہے۔ پیرامیٹرز کی استحکام کو پہلے سے قیاس آرائیاں اور مختلف دورانیہ کی جانچ کے ذریعے جانچنے کی سفارش کی گئی ہے۔

  4. J قدر کے حساب سے انحرافحکمت عملی: اپنی مرضی کے مطابق bcwsma فنکشن کا استعمال کرتے ہوئے کے ڈی جے کی قیمتوں کا حساب لگائیں۔ مختلف پلیٹ فارمز پر معیاری کے ڈی جے کے حساب سے اختلافات ہوسکتے ہیں ، جس کی وجہ سے ریٹرننگ اور ریلڈ ڈسک سگنل میں تضاد پیدا ہوتا ہے۔ ریلڈ ڈسک سے پہلے حساب کتاب کے طریقہ کار کی مستقل مزاجی کی تصدیق کی جانی چاہئے۔

  5. کم لیکویڈیٹی مارکیٹ کا خطرہ: کم تجارت والے بازاروں میں ، اسٹاپ اسٹاپ نقصان کی سلائڈ پوائنٹس زیادہ ہوسکتی ہیں ، جو حکمت عملی کی اصل کارکردگی کو متاثر کرتی ہیں۔ اس حکمت عملی کو اعلی لیکویڈیٹی والے بازاروں یا مرکزی دھارے میں شامل تجارت کی اقسام پر لاگو کرنے کی سفارش کی گئی ہے۔

  6. سگنل کی تعدد غیر مستحکم: انتہائی قیمت پر مبنی الٹ سگنل مختلف مارکیٹ کے ماحول میں تعدد میں بڑے پیمانے پر مختلف ہوسکتے ہیں ، جس سے فنڈز کے استعمال کی کارکردگی میں عدم استحکام پیدا ہوتا ہے۔ تجارتی تعدد کو ہموار کرنے کے لئے معاون تجارتی سگنل یا کثیر ٹائم فریم تصدیق کے طریقہ کار کو شامل کرنے پر غور کیا جاسکتا ہے۔

حکمت عملی کی اصلاح کی سمت

حکمت عملی کی موجودہ خصوصیات کے لئے، مندرجہ ذیل اصلاحات پر غور کیا جا سکتا ہے:

  1. متحرک چوٹی کی ترتیب: موجودہ حکمت عملی میں فکسڈ انتہائی قیمتوں کی اوپر اور نیچے کی حد استعمال کی جاتی ہے ((100 اور 0) ، تاریخی اتار چڑھاؤ کی شرح پر مبنی انتہائی حد کی حد کو متحرک طور پر ایڈجسٹ کرنے پر غور کیا جاسکتا ہے ، جو مختلف اتار چڑھاؤ کے ماحول میں خود کو ڈھال سکتا ہے ، مثال کے طور پر کم اتار چڑھاؤ کے دوران انتہائی حد کی حد کو مناسب طریقے سے تنگ کرنا ، اعلی اتار چڑھاؤ کے دوران انتہائی حد کی حد کو بڑھانا۔

  2. ملٹی ٹائم فریم تصدیق: اعلی درجے کی ٹائم فریم کی تصدیق کے سگنل متعارف کروائیں ، جیسے کہ سورج کی روشنی کی سطح کی جے ویلیو بھی انتہائی حد کے علاقے میں ہے ، یا 3 منٹ اور 15 منٹ کی مدت کے لئے سگنل کی مطابقت کی تصدیق ، سگنل کے معیار کو بہتر بنائیں۔

  3. ذہین روکنے کا طریقہ کار: متحرک اسٹاپ حکمت عملی کو نافذ کریں ، جیسے کہ بیچوں میں کھلی پوزیشن یا اے ٹی آر (حقیقی اتار چڑھاؤ کی حد) پر مبنی اسٹاپ حساب کتاب ، یا منافع کی ایک حد تک پہنچنے کے بعد ٹریکنگ اسٹاپ کا استعمال کریں ، تاکہ رجحانات کو زیادہ سے زیادہ فائدہ اٹھائیں۔

  4. مارکیٹ ماحول فلٹرنگ: اتار چڑھاؤ کی شرح فلٹرنگ کی شرائط میں اضافہ کریں ، مارکیٹ کے ماحول میں زیادہ اتار چڑھاؤ یا انتہائی کم اتار چڑھاؤ کے ساتھ تجارت کو روکیں ، یا پوزیشن کا سائز ایڈجسٹ کریں تاکہ مارکیٹ کے ماحول میں تجارت سے گریز کیا جاسکے جو حکمت عملی کی خصوصیات کے لئے موزوں نہیں ہے۔

  5. سگنل طاقت درجہ بندی: جے ویلیو الٹ پٹ کی چوڑائی ، کے لائن کی شکل ، ٹرانسمیشن کی تصدیق جیسے عوامل کی بنیاد پر ، سگنل کی طاقت کو درجہ بندی کریں ، اور سگنل کی طاقت کے مطابق پوزیشن کا سائز ایڈجسٹ کریں ، مضبوط سگنل پوزیشن کو بڑھا دیتا ہے ، کمزور سگنل پوزیشن کو کم کرتا ہے۔

  6. مشین لرننگ کی اصلاح: مشین لرننگ الگورتھم متعارف کروانا تاکہ پیرامیٹرز کے مجموعے کو خود بخود بہتر بنایا جاسکے ، یا تاریخی سگنل کی خصوصیات کو نکالنا ، ہر سگنل کی کامیابی کے امکانات کا اندازہ لگانے کے لئے پیش گوئی کرنے والے ماڈل تیار کرنا ، حکمت عملی کی موافقت اور استحکام کو بہتر بنانا۔

خلاصہ کریں۔

کے ڈی جے انتہائی قیمت میں الٹ رجحان ٹریکنگ حکمت عملی ایک اچھی طرح سے منظم ، منطقی طور پر واضح ، مقداری تجارتی نظام ہے جو تکنیکی اشارے کے انتہائی قیمت میں الٹ کو پکڑنے اور رجحان کی سمت کو فلٹر کرنے کے ساتھ مل کر اعلی جیت کی شرح کو برقرار رکھتے ہوئے خطرے کو کنٹرول کرتا ہے۔ حکمت عملی کا بنیادی فائدہ اس کے سگنل ٹرگرز کی درستگی اور خطرے کے انتظام کی سالمیت میں ہے ، جو درمیانی اور طویل مدتی رجحانات کے واضح لیکن اتار چڑھاؤ والے بازار کے ماحول کے لئے موزوں ہے۔

عمل درآمد کے نقطہ نظر سے ، اس حکمت عملی کا کوڈ ڈھانچہ واضح ہے ، حساب کتاب کا منطق سخت ہے ، اس میں مکمل ٹرانزیکشن مینجمنٹ کی خصوصیات شامل ہیں ، سگنل کی تخلیق ، پوزیشن کا حساب لگانے سے لے کر اسٹاپ نقصان پر عمل درآمد تک اس کی تفصیلی عمل درآمد ہے۔ اس مضمون میں تجویز کردہ اصلاح کی سمت ، خاص طور پر متحرک پیرامیٹر ایڈجسٹمنٹ اور کثیر جہتی سگنل کی تصدیق ، حکمت عملی کی استحکام اور موافقت کو مزید بڑھانے کی امید ہے۔

اس حکمت عملی کو لاگو کرنے والے تاجروں کے لئے ، مارکیٹ کے مختلف حالات میں توثیقی پیرامیٹرز کے اطلاق پر توجہ دی جانی چاہئے ، اور ذاتی خطرے کی ترجیحات کے مطابق اسٹاپ نقصان اور پوزیشن کی ترتیب کو ایڈجسٹ کیا جانا چاہئے۔ اس کے علاوہ ، بنیادی تجزیہ اور اعلی ٹائم فریم کے تکنیکی تجزیہ کو جوڑنے کی سفارش کی جاتی ہے تاکہ تجارتی فیصلوں کی جامعیت اور درستگی کو بہتر بنایا جاسکے۔

حکمت عملی کا ماخذ کوڈ
//@version=6
strategy("J值极值趋势跟随策略", overlay = true, 
         default_qty_type = strategy.percent_of_equity, default_qty_value = 10,  // 降低每笔交易的仓位大小
         initial_capital = 10000, 
         margin_long = 20, margin_short = 20)  // 设置合理的保证金要求

// === 策略说明:J值极值趋势跟随策略 ===
// 主图:显示J值连续下降后反弹的买点和连续上升后回调的卖点
// 副图:显示J线走势、中轴线、极值区域
// 方向过滤:676均线,价格在上方只做多,下方只做空
// 止盈止损:基于百分比波动,默认1%止盈1%止损

// === 输入参数 ===
lengthK = input.int(60, title = "K period")
lengthD = input.int(3, title = "D period")
smoothK = input.int(3, title = "Smooth K")
emaLength = input.int(576, title = "趋势EMA周期", inline="ema")
extremeHigh = input.float(100, title = "J值极值上限", minval = 80, maxval = 120)
extremeLow = input.float(0, title = "J值极值下限", minval = -20, maxval = 20)

// === 止盈止损参数(改为百分比) ===
takeProfitPercent = input.float(3, title = "止盈百分比", minval = 0.1, step = 0.1)
stopLossPercent = input.float(2.2, title = "止损百分比", minval = 0.1, step = 0.1)

// === 风险控制参数 ===
useFixedPositionSize = input.bool(true, title = "使用固定合约数量")
fixedPositionSize = input.float(1.0, title = "固定合约数量", minval = 0.1, step = 0.1)
riskPerTrade = input.float(1.0, title = "每笔交易风险百分比", minval = 0.1, maxval = 10, step = 0.1)

// === KDJ计算(使用与bitcoinwisdom一致的算法) ===
// 自定义加权移动平均函数(与bitcoinwisdom一致)
bcwsma(s, l, m) => 
    var _bcwsma = 0.0
    _bcwsma := (m*s + (l-m)*nz(_bcwsma[1])) / l
    _bcwsma

highestHigh = ta.highest(high, lengthK)
lowestLow = ta.lowest(low, lengthK)
rsv = (close - lowestLow) / (highestHigh - lowestLow) * 100
K = bcwsma(rsv, smoothK, 1)
D = bcwsma(K, lengthD, 1)
J = 3 * K - 2 * D

// === 676均线方向判断 ===
ema676 = ta.ema(close, emaLength)
trendUp = close > ema676    // 价格在676均线上方
trendDown = close < ema676  // 价格在676均线下方

// === 检测J值连续下降和上升 ===
// 检测连续3根下降:J < J[1] < J[2] < J[3]
jContinuousDown = J < J[1] and J[1] < J[2] and J[2] < J[3]

// 检测连续3根上升:J > J[1] > J[2] > J[3]
jContinuousUp = J > J[1] and J[1] > J[2] and J[2] > J[3]

// === 检测反弹和回调(必须在极值区域内) ===
// 反弹:当前J值上升,且之前连续下降,且J值在极值下限以下
jBounce = J > J[1] and jContinuousDown[1] and J[1] <= extremeLow

// 回调:当前J值下降,且之前连续上升,且J值在极值上限以上
jPullback = J < J[1] and jContinuousUp[1] and J[1] >= extremeHigh

// === 开仓信号(带方向过滤) ===
// 买点:J值连续下降后反弹 + 价格在676均线上方
longEntry = jBounce and trendUp

// 卖点:J值连续上升后回调 + 价格在676均线下方
shortEntry = jPullback and trendDown

// === 记录开仓价格和止盈止损价格 ===
var float entryPrice = na
var float tpPrice = na
var float slPrice = na

// === 计算仓位大小 ===
// 基于风险百分比的仓位计算需要考虑止损百分比
positionSize = useFixedPositionSize ? fixedPositionSize : (strategy.equity * (riskPerTrade / 100)) / (close * stopLossPercent / 100)

// === 止盈止损信号变量 ===
var bool longTakeProfitHit = false
var bool longStopLossHit = false
var bool shortTakeProfitHit = false
var bool shortStopLossHit = false

// === 警报信号指示器 ===
// 多单入场信号将触发
longSignalComing = J <= extremeLow and jContinuousDown and trendUp
// 空单入场信号将触发
shortSignalComing = J >= extremeHigh and jContinuousUp and trendDown
// J值接近极值区域
jNearExtremeLow = J <= extremeLow + 5 and J > extremeLow
jNearExtremeHigh = J >= extremeHigh - 5 and J < extremeHigh

// === 策略执行 ===
if (longEntry and strategy.position_size == 0)
    entryPrice := close
    // 计算基于百分比的止盈止损价格
    tpPrice := entryPrice * (1 + takeProfitPercent / 100)
    slPrice := entryPrice * (1 - stopLossPercent / 100)
    strategy.entry("多单", strategy.long, qty=positionSize)
    // 重置止盈止损信号
    longTakeProfitHit := false
    longStopLossHit := false

if (shortEntry and strategy.position_size == 0)
    entryPrice := close
    // 计算基于百分比的止盈止损价格
    tpPrice := entryPrice * (1 - takeProfitPercent / 100)
    slPrice := entryPrice * (1 + stopLossPercent / 100)
    strategy.entry("空单", strategy.short, qty=positionSize)
    // 重置止盈止损信号
    shortTakeProfitHit := false
    shortStopLossHit := false

// === 手动检查止盈止损条件 ===
// 多单止盈止损
longTPHit = strategy.position_size > 0 and high >= tpPrice and not longTakeProfitHit
longSLHit = strategy.position_size > 0 and low <= slPrice and not longStopLossHit

if (longTPHit)
    strategy.close("多单", comment="止盈")
    longTakeProfitHit := true
    
if (longSLHit)
    strategy.close("多单", comment="止损")
    longStopLossHit := true

// 空单止盈止损
shortTPHit = strategy.position_size < 0 and low <= tpPrice and not shortTakeProfitHit
shortSLHit = strategy.position_size < 0 and high >= slPrice and not shortStopLossHit

if (shortTPHit)
    strategy.close("空单", comment="止盈")
    shortTakeProfitHit := true
    
if (shortSLHit)
    strategy.close("空单", comment="止损")
    shortStopLossHit := true

// === 在主图绘制676均线 ===
plot(ema676, title="676 EMA", color=color.blue, linewidth=2)

// === 在主图标注开仓信号 ===
plotshape(longEntry, title="多单入场", location=location.belowbar, color=color.lime, style=shape.triangleup, size=size.small, text="多单", force_overlay=true)
plotshape(shortEntry, title="空单入场", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small, text="空单", force_overlay=true)

// === 添加止盈止损信号 ===
// 多单止盈信号
plotshape(longTPHit, title="多单止盈", location=location.abovebar, 
         color=color.green, style=shape.circle, size=size.normal, text="止盈", force_overlay=true)

// 多单止损信号
plotshape(longSLHit, title="多单止损", location=location.abovebar, 
         color=color.red, style=shape.xcross, size=size.normal, text="止损", force_overlay=true)

// 空单止盈信号
plotshape(shortTPHit, title="空单止盈", location=location.belowbar, 
         color=color.green, style=shape.circle, size=size.normal, text="止盈", force_overlay=true)

// 空单止损信号
plotshape(shortSLHit, title="空单止损", location=location.belowbar, 
         color=color.red, style=shape.xcross, size=size.normal, text="止损", force_overlay=true)



// === 绘制止盈止损线 ===
plot(strategy.position_size != 0 ? tpPrice : na, title="止盈", color=color.green, style=plot.style_line, linewidth=1)
plot(strategy.position_size != 0 ? slPrice : na, title="止损", color=color.red, style=plot.style_line, linewidth=1)
plot(strategy.position_size != 0 ? entryPrice : na, title="入场价", color=color.yellow, style=plot.style_line, linewidth=1)

// === 设置警报条件(使用常量字符串) ===
// 基础信号警报
alertcondition(longEntry, title="多单入场信号", message="J值极值策略: 多单入场信号触发")
alertcondition(shortEntry, title="空单入场信号", message="J值极值策略: 空单入场信号触发")
alertcondition(longTPHit, title="多单止盈触发", message="J值极值策略: 多单止盈触发")
alertcondition(longSLHit, title="多单止损触发", message="J值极值策略: 多单止损触发")
alertcondition(shortTPHit, title="空单止盈触发", message="J值极值策略: 空单止盈触发")
alertcondition(shortSLHit, title="空单止损触发", message="J值极值策略: 空单止损触发")


// === 添加交易详情标签 ===
if (longTPHit)
    label.new(bar_index, high, text="多单止盈 +" + str.tostring(takeProfitPercent) + "%", 
              style=label.style_label_down, color=color.green, textcolor=color.white)

if (longSLHit)
    label.new(bar_index, low, text="多单止损 -" + str.tostring(stopLossPercent) + "%", 
              style=label.style_label_up, color=color.red, textcolor=color.white)

if (shortTPHit)
    label.new(bar_index, low, text="空单止盈 +" + str.tostring(takeProfitPercent) + "%", 
              style=label.style_label_up, color=color.green, textcolor=color.white)

if (shortSLHit)
    label.new(bar_index, high, text="空单止损 -" + str.tostring(stopLossPercent) + "%", 
              style=label.style_label_down, color=color.red, textcolor=color.white)