وسائل لوڈ ہو رہے ہیں... لوڈنگ...

متغیر فلٹر کے ساتھ حکمت عملی کے بعد کثیر حرکت پذیر اوسط کراس اوور رجحان

مصنف:چاؤ ژانگ، تاریخ: 2024-07-29 13:37:09
ٹیگز:ایم اےای ایم اےایس ایم اےڈبلیو ایم اےوی ڈبلیو ایم اےایس ایم ایم اےآر ایم اے

img

جائزہ

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

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

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

  2. رجحان کا تعین:

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

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

  5. انٹری منطق:

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

    • جزوی خروج: جب رجحان الٹ جاتا ہے تو پوزیشن کا ایک خاص فیصد بند ہوجاتا ہے (درمیانی مدتی ایم اے ایک بار پھر طویل مدتی ایم اے کو عبور کرتا ہے) ۔
    • مکمل باہر نکلیں: جب قیمت بیل / ریچھ مارکیٹ کی تقسیم کی لائن کو عبور کرتی ہے تو مخالف سمت میں تمام پوزیشنوں کو بند کریں۔
  7. سٹاپ نقصان: ایک مقررہ فیصد سٹاپ نقصان کا استعمال کرتا ہے، جو صارف کی طرف سے اپنی مرضی کے مطابق کیا جا سکتا ہے.

  8. پوزیشن مینجمنٹ: ہر تجارت کے لئے اکاؤنٹ کی ایکویٹی کا ایک مقررہ فیصد استعمال کرتا ہے ، جسے صارف اپنی مرضی کے مطابق بنا سکتا ہے۔

حکمت عملی کے فوائد

  1. کثیر جہتی رجحان تجزیہ: متعدد حرکت پذیر اوسط کا استعمال کرتے ہوئے ، حکمت عملی مارکیٹ کے رجحانات کو زیادہ جامع انداز میں پکڑ سکتی ہے ، غلط اشاروں کو کم کرتی ہے۔

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

  3. اتار چڑھاؤ فلٹرنگ: اتار چڑھاؤ کے اشارے کو شامل کرکے ، حکمت عملی کم اتار چڑھاؤ کے ماحول میں تجارت سے بچ سکتی ہے ، سگنل کے معیار کو بہتر بناتی ہے۔

  4. بل/بیئر مارکیٹ ایڈجسٹمنٹ: اختیاری بل/بیئر مارکیٹ کے تعین کا طریقہ کار حکمت عملی کو مختلف مارکیٹ کے ماحول میں بہتر طور پر اپنانے کی اجازت دیتا ہے، مخالف رجحان کی تجارت کو کم کرتا ہے.

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

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

  7. دو طرفہ تجارت: طویل اور مختصر پوزیشنوں دونوں کی حمایت کرتا ہے، مختلف مارکیٹ کے حالات میں تجارتی مواقع کی اجازت دیتا ہے.

  8. بصری امداد: اسٹریٹجی چارٹ پر مختلف چلتی اوسط اور تجارتی سگنل لیبلز کو پلاٹ کرتی ہے ، جس سے بدیہی تجزیہ اور بیک ٹسٹنگ میں آسانی ہوتی ہے۔

حکمت عملی کے خطرات

  1. پسماندہ نوعیت: حرکت پذیر اوسطاً پسماندہ اشارے ہوتے ہیں ، جس کی وجہ سے اندراج اور باہر نکلنے کے اوقات میں قدرے تاخیر ہوسکتی ہے ، جس سے منافع پر اثر پڑتا ہے۔

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

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

  4. ڈراونگ رسک: رجحان کی تبدیلی کے دوران، حکمت عملی بروقت طریقے سے پوزیشنوں سے مکمل طور پر باہر نہیں نکل سکتی ہے، جس سے ممکنہ طور پر اہم ڈراونگ کا باعث بن سکتا ہے۔

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

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

  7. اسٹاپ نقصان کی ترتیب: مقررہ فیصد اسٹاپ نقصان تمام مارکیٹ کے ماحول کے لئے موزوں نہیں ہوسکتا ہے اور اعلی اتار چڑھاؤ کے ادوار کے دوران قبل از وقت باہر نکلنے کا باعث بن سکتا ہے۔

حکمت عملی کی اصلاح کی ہدایات

  1. موافقت پذیر پیرامیٹرز: مارکیٹ کے حالات کی بنیاد پر متحرک اوسط پیرامیٹرز اور اتار چڑھاؤ کی حدوں کو متحرک طور پر ایڈجسٹ کرنے کے لئے موافقت پذیر میکانزم متعارف کروائیں۔

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

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

  4. رفتار اشارے انضمام: داخلہ اور باہر نکلنے کے وقت کو بہتر بنانے کے لئے آر ایس آئی یا ایم اے سی ڈی جیسے رفتار اشارے کو یکجا کریں.

  5. اسٹاپ نقصان کا بہتر طریقہ کار: مارکیٹ میں اتار چڑھاؤ کو بہتر طور پر اپنانے کے لئے ٹریلر اسٹاپ یا اے ٹی آر پر مبنی متحرک اسٹاپ نقصانات کو نافذ کریں۔

  6. مارکیٹ سینٹیمنٹ انٹیگریشن: مختلف مارکیٹ کے ماحول میں حکمت عملی کی کارکردگی کو بہتر بنانے کے لئے VIX جیسے مارکیٹ سینٹیمنٹ اشارے شامل کریں۔

  7. پوزیشن مینجمنٹ کی اصلاح: بہتر رسک کنٹرول کے لیے اتار چڑھاؤ یا موجودہ منافع/نقصان کی بنیاد پر متحرک پوزیشن سائزنگ کا نفاذ کریں۔

  8. بنیادی فلٹر کا اضافہ: اعلی خطرے کے ادوار کے دوران تجارت سے بچنے کے لئے اہم معاشی اعداد و شمار کی رہائی یا کمپنی کی آمدنی کی رپورٹوں جیسے بنیادی عوامل پر غور کریں۔

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

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

نتیجہ

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


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

//@version=5
strategy(title="WODIsMA Strategy", shorttitle="WMA_Strategy", overlay=true, overlay=true, pyramiding=2, default_qty_value=6, default_qty_type=strategy.fixed, initial_capital=1000, currency=currency.USD)

// 用户输入参数
capital_pct = input.float(20, title="每笔订单使用的资金百分比(%)", minval=0.1, maxval=100, group="Position") / 100
close_pct = input.float(20, title="每次平仓使用的百分比(%)", minval=0, maxval=100, group="Position") / 100
stop_loss_user = input.float(10, title="止损百分比(%)", minval=0, maxval=100, group="Position") / 100
allow_long = input.bool(true, title="是否做多", group="Position")
allow_short = input.bool(true, title="是否做空", group="Position")

// 用户选择的移动平均线
short_term_ma = input.string("MA 0", title="短期趋势均线", options=["MA 0", "MA 1", "MA 2", "MA 3", "MA 4", "MA 5"], group="TrendIdentify")
mid_term_ma = input.string("MA 1", title="中期趋势均线", options=["MA 0", "MA 1", "MA 2", "MA 3", "MA 4", "MA 5"], group="TrendIdentify")
long_term_ma = input.string("MA 2", title="长期趋势均线", options=["MA 0", "MA 1", "MA 2", "MA 3", "MA 4", "MA 5"], group="TrendIdentify")
bull_bear_ma = input.string("MA 3", title="牛熊趋势均线", options=["MA 0", "MA 1", "MA 2", "MA 3", "MA 4", "MA 5"], group="TrendIdentify")
enable_bull_bear = input.bool(false, title="是否启用牛熊趋势线", group="TrendIdentify")
// 波动率指标参数
volatility_k = input.int(60, title="波动率数值K线数" , group="volatility")
volatility_threshold = input.float(1, minval=0, title="波动率值 0则不使用(%)", group="volatility")

// 定义不同类型的移动平均线函数
ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

// 定义每根均线的输入参数和颜色
length0 = input.int(16, minval=1, title="Length 0", group="MA 0")
source0 = input.source(hl2, title="Source 0", group="MA 0")
type0 = input.string("SMA", title="Type 0", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA 0")
timeframe0 = input.timeframe("", title="Timeframe 0", group="MA 0")
color0 = input.color(color.gray, title="Color 0", group="MA 0")
show0 = input.bool(true, title="Show MA 0", group="MA 0")

length1 = input.int(48, minval=1, title="Length 1", group="MA 1")
source1 = input.source(hl2, title="Source 1", group="MA 1")
type1 = input.string("SMA", title="Type 1", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA 1")
timeframe1 = input.timeframe("", title="Timeframe 1", group="MA 1")
color1 = input.color(color.aqua, title="Color 1", group="MA 1")
show1 = input.bool(true, title="Show MA 1", group="MA 1")

length2 = input.int(144, minval=1, title="Length 2", group="MA 2")
source2 = input.source(hl2, title="Source 2", group="MA 2")
type2 = input.string("SMA", title="Type 2", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA 2")
timeframe2 = input.timeframe("", title="Timeframe 2", group="MA 2")
color2 = input.color(color.orange, title="Color 2", group="MA 2")
show2 = input.bool(true, title="Show MA 2", group="MA 2")

length3 = input.int(432, minval=1, title="Length 3", group="MA 3")
source3 = input.source(hl2, title="Source 3", group="MA 3")
type3 = input.string("SMA", title="Type 3", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA 3")
timeframe3 = input.timeframe("", title="Timeframe 3", group="MA 3")
color3 = input.color(color.green, title="Color 3", group="MA 3")
show3 = input.bool(true, title="Show MA 3", group="MA 3")

length4 = input.int(91, minval=1, title="Length 4", group="MA 4")
source4 = input.source(hl2, title="Source 4", group="MA 4")
type4 = input.string("SMA", title="Type 4", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA 4")
timeframe4 = input.timeframe("D", title="Timeframe 4", group="MA 4")
color4 = input.color(color.rgb(159, 110, 208), title="Color 4", group="MA 4") // 浅紫色
style4 = input.string("step", title="Style 4", options=["line", "step"], group="MA 4")
show4 = input.bool(false, title="Show MA 4", group="MA 4")

length5 = input.int(182, minval=1, title="Length 5", group="MA 5")
source5 = input.source(hl2, title="Source 5", group="MA 5")
type5 = input.string("SMA", title="Type 5", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA 5")
timeframe5 = input.timeframe("D", title="Timeframe 5", group="MA 5")
color5 = input.color(color.red, title="Color 5", group="MA 5")
style5 = input.string("step", title="Style 5", options=["line", "step"], group="MA 5")
show5 = input.bool(true, title="Show MA 5", group="MA 5")

// 计算每根均线的值
value0 = request.security(syminfo.tickerid, timeframe0, ma(source0, length0, type0))
value1 = request.security(syminfo.tickerid, timeframe1, ma(source1, length1, type1))
value2 = request.security(syminfo.tickerid, timeframe2, ma(source2, length2, type2))
value3 = request.security(syminfo.tickerid, timeframe3, ma(source3, length3, type3))
value4 = request.security(syminfo.tickerid, timeframe4, ma(source4, length4, type4))
value5 = request.security(syminfo.tickerid, timeframe5, ma(source5, length5, type5))

// 绘制每根均线
plot(show0 ? value0 : na, title="MA 0", color=color0)
plot(show1 ? value1 : na, title="MA 1", color=color1)
plot(show2 ? value2 : na, title="MA 2", color=color2)
plot(show3 ? value3 : na, title="MA 3", color=color3)
plot(show4 ? value4 : na, title="MA 4", color=color4, style=style4 == "step" ? plot.style_stepline : plot.style_line, linewidth=2)
plot(show5 ? value5 : na, title="MA 5", color=color5, style=style5 == "step" ? plot.style_stepline : plot.style_line, linewidth=2)

// 添加策略部分

// 选择均线值
get_ma_value(ma_name) =>
    if (ma_name == "MA 0")
        value0
    else if (ma_name == "MA 1")
        value1
    else if (ma_name == "MA 2")
        value2
    else if (ma_name == "MA 3")
        value3
    else if (ma_name == "MA 4")
        value4
    else
        value5

short_ma_value = get_ma_value(short_term_ma)
mid_ma_value = get_ma_value(mid_term_ma)
long_ma_value = get_ma_value(long_term_ma)
bull_bear_ma_value = get_ma_value(bull_bear_ma)

// 计算波动率
high_close = ta.highest(high, volatility_k)
low_close = ta.lowest(low, volatility_k)
volatility = 100 * (high_close - low_close) / low_close

// 波动率条件背景色
volatilityCondition = (volatility > volatility_threshold)
volatilityConditionBG = (volatility > volatility_threshold) and volatility_threshold != 0

bgcolor(volatilityConditionBG ? color.new(color.green, 90) : na, title="Volatility Background")

// 策略信号
long_condition = (short_ma_value > long_ma_value and ta.crossover(mid_ma_value, long_ma_value))
short_condition = (short_ma_value < long_ma_value and ta.crossunder(mid_ma_value, long_ma_value))

var float stop_level_long = na
var float stop_level_short = na

// 执行策略
if (volatilityCondition and allow_long and (not enable_bull_bear or close > bull_bear_ma_value)) 
    if (long_condition and close > long_ma_value)  // 判断是否立即触发止损
        strategy.entry("Long", strategy.long, qty=capital_pct * strategy.equity / close)
        label.new(bar_index, low*0.996, text="BUY", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)

if (volatilityCondition and allow_short and (not enable_bull_bear or close < bull_bear_ma_value)) 
    if (short_condition and close < long_ma_value)  // 判断是否立即触发止损
        strategy.entry("Short", strategy.short, qty=capital_pct * strategy.equity / close)
        label.new(bar_index, high*1.004, text="SELL", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)

// 部分平仓逻辑
if (enable_bull_bear)
    // 当当前价格处在牛熊趋势均线之下时
    if (close < bull_bear_ma_value)
        // 平所有多仓
        if (strategy.position_size > 0)
            strategy.close("Long", comment="平所有多仓")
            label.new(bar_index, low*0.996, text="CLOSE", color=color.gray, textcolor=color.white, style=label.style_label_up, size=size.small)
        // 当短期均线在长期均线之上时,中期均线向上穿过长期均线,平空
        if (short_ma_value > long_ma_value and ta.crossover(mid_ma_value, long_ma_value) and volatilityCondition)
            if (strategy.position_size < 0)
                strategy.close("Short", qty=close_pct * strategy.position_size, comment="部分平空")
                label.new(bar_index, high*1.004, text="CLOSE", color=color.gray, textcolor=color.white, style=label.style_label_down, size=size.small)

    // 当当前价格处在牛熊趋势均线之上时
    if (close > bull_bear_ma_value)
        // 平所有空仓
        if (strategy.position_size < 0)
            strategy.close("Short", comment="平所有空仓")
            label.new(bar_index, high*1.004, text="CLOSE", color=color.gray, textcolor=color.white, style=label.style_label_up, size=size.small)
        // 当短期均线在长期均线之下时,中期均线向下穿过长期均线,平多
        if (short_ma_value < long_ma_value and ta.crossunder(mid_ma_value, long_ma_value) and volatilityCondition)
            if (strategy.position_size > 0)
                strategy.close("Long", qty=close_pct * strategy.position_size, comment="部分平多")
                label.new(bar_index, low*0.996, text="CLOSE", color=color.gray, textcolor=color.white, style=label.style_label_down, size=size.small)
else if (not enable_bull_bear and not (allow_long and allow_short))
    // 当短期均线在长期均线之上时,中期均线向上穿过长期均线,平空
    if (short_ma_value > long_ma_value and ta.crossover(mid_ma_value, long_ma_value) and volatilityCondition)
        if (strategy.position_size < 0)
            strategy.close("Short", qty=close_pct * strategy.position_size, comment="部分平空")
            label.new(bar_index, low*0.996, text="CLOSE", color=color.gray, textcolor=color.white, style=label.style_label_up, size=size.small)

    // 当短期均线在长期均线之下时,中期均线向下穿过长期均线,平多
    if (short_ma_value < long_ma_value and ta.crossunder(mid_ma_value, long_ma_value) and volatilityCondition)
        if (strategy.position_size > 0)
            strategy.close("Long", qty=close_pct * strategy.position_size, comment="部分平多")
            label.new(bar_index, high*1.004, text="CLOSE", color=color.gray, textcolor=color.white, style=label.style_label_down, size=size.small)

// 止损处理
if (strategy.position_size > 0)
    stop_level_long_user = strategy.position_avg_price * (1 - stop_loss_user)
    strategy.exit("Stop Loss", from_entry="Long", stop=stop_level_long_user)
else if (strategy.position_size < 0)
    stop_level_short_user = strategy.position_avg_price * (1 + stop_loss_user)
    strategy.exit("Stop Loss", from_entry="Short", stop=stop_level_short_user)

متعلقہ

مزید