یہ ایک رجحان کی پیروی کرنے والی حکمت عملی ہے جس کی بنیاد متعدد تیزی سے چلنے والی اوسط (ای ایم اے) اور کموڈٹی چینل انڈیکس (سی سی آئی) پر ہے۔ یہ حکمت عملی ممکنہ رجحان کی تبدیلیوں کی نشاندہی کرنے کے لئے متعدد وقت کے ادوار سے ای ایم اے کراس اوورز کا استعمال کرتی ہے ، جس میں سی سی آئی اشارے کے ساتھ مل کر زیادہ خرید یا زیادہ فروخت ہونے والے مارکیٹ کے حالات کی تصدیق ہوتی ہے ، اس طرح انٹری ٹائمنگ کی درستگی میں بہتری آتی ہے۔ اس حکمت عملی میں خطرہ کو سنبھالنے اور منافع میں مقفل کرنے کے لئے وقت اور قیمت پر مبنی متحرک منافع اور اسٹاپ نقصان کے طریقہ کار بھی شامل ہیں۔
یہ حکمت عملی بنیادی طور پر مندرجہ ذیل اہم عناصر پر مبنی ہے:
متعدد ای ایم اے کراس اوورز: 8 ، 12 ، 24 اور 72 پیریڈ ای ایم اے کا استعمال کرتا ہے۔ جب مختصر مدت کے ای ایم اے (8 ، 12 ، 24) بیک وقت 72 پیریڈ ای ایم اے سے اوپر عبور کرتے ہیں تو ، اسے ممکنہ طویل سگنل سمجھا جاتا ہے۔ مختصر سگنل کے لئے اس کے برعکس سچ ہے۔
سی سی آئی اشارے کی تصدیق: 20 پیریڈ سی سی آئی اشارے کا استعمال کرتا ہے، جس میں سی سی آئی 150 سے اوپر ہے جب زیادہ خریدنے کی حالت کی تصدیق ہوتی ہے اور -150 سے نیچے ہے تو زیادہ فروخت کی حالت کی تصدیق ہوتی ہے.
داخلے کی شرائط:
متحرک منافع اور سٹاپ نقصان:
پوزیشن مینجمنٹ: حکمت عملی مکمل پوزیشن ٹریڈنگ کا استعمال کرتی ہے، ٹریڈنگ کے لئے اکاؤنٹ کے فنڈز کا 100٪ استعمال کرتے ہوئے.
متعدد تصدیق کا طریقہ کار: متعدد ای ایم اے کراس اوورز اور سی سی آئی اشارے کا امتزاج غلط سگنلز کے اثرات کو مؤثر طریقے سے کم کرتا ہے ، جس سے اندراج کی درستگی میں بہتری آتی ہے۔
لچکدار انٹری میکانزم: حکمت عملی میں ایک بار کے کراس اوورز اور ایک وقت کی ونڈو کے اندر کراس اوورز دونوں پر غور کیا گیا ہے ، جو مختلف مارکیٹ کے ماحول کو اپنانے کے لئے ہے۔
متحرک رسک مینجمنٹ: مختلف انٹری موڈز ، بہتر توازن منافع اور خطرات کی بنیاد پر مختلف منافع اور اسٹاپ نقصان کے تناسب طے کیے جاتے ہیں۔
ٹرینڈ فالو کرنے کی صلاحیت: درمیانی اور طویل مدتی ٹرینڈ تبدیلیوں کو مؤثر طریقے سے پکڑنے کے لئے متعدد ای ایم اے کراس اوورز کا استعمال کرتا ہے۔
متضاد منڈیوں کو فلٹر کرنا: سی سی آئی اشارے کے زیادہ خریدنے اور زیادہ فروخت ہونے کے فیصلوں سے سائیڈ ویز ، متضاد منڈیوں میں کثرت سے تجارت سے بچنے میں مدد ملتی ہے۔
تاخیر: ای ایم اے اور سی سی آئی دونوں تاخیر والے اشارے ہیں ، جو اتار چڑھاؤ والی منڈیوں میں کافی تیزی سے رد عمل ظاہر نہیں کرسکتے ہیں۔
کثرت سے تجارت: متضاد منڈیوں میں ، یہ بہت سے غلط بریک آؤٹ سگنل پیدا کرسکتا ہے ، جس سے کثرت سے تجارت اور لین دین کے اخراجات میں اضافہ ہوتا ہے۔
مکمل پوزیشن کا خطرہ: 100٪ پوزیشن ٹریڈنگ کا استعمال کرنے سے اہم ڈراؤنڈ خطرات پیدا ہوسکتے ہیں۔
مقررہ فیصد سٹاپ نقصان: انتہائی اتار چڑھاؤ والے بازاروں میں مقررہ فیصد سٹاپ نقصانات بہت جلد سازگار رجحانات سے باہر نکل سکتے ہیں۔
تاریخی اعداد و شمار پر انحصار: حکمت عملی کی کارکردگی کو تاریخی اعداد و شمار سے متاثر کیا جاسکتا ہے اور جب مستقبل میں مارکیٹ کے حالات بدل جاتے ہیں تو پیرامیٹر کو دوبارہ بہتر بنانے کی ضرورت پڑسکتی ہے۔
اتار چڑھاؤ کے اشارے متعارف کروانا: مارکیٹ کی اتار چڑھاؤ کی بنیاد پر منافع لینے اور اسٹاپ نقصان کی سطح کو ایڈجسٹ کرنے کے لئے اے ٹی آر (اوسط حقیقی رینج) اشارے کو شامل کرنے پر غور کریں ، مختلف مارکیٹ کے ماحول کو اپنانا۔
پوزیشن مینجمنٹ کو بہتر بنانا: رجحان کی طاقت اور اکاؤنٹ کے خطرے کی رواداری کی بنیاد پر پوزیشن کے سائز کو ایڈجسٹ کرنے کے لئے متحرک پوزیشن مینجمنٹ میکانزم متعارف کروانا۔
فلٹرنگ شرائط شامل کریں: تجارتی سگنل کو مزید فلٹر کرنے اور جیت کی شرح کو بہتر بنانے کے لئے حجم اور رجحان کی طاقت جیسے اشارے شامل کرنے پر غور کریں۔
پیرامیٹر کی اصلاح: مختلف مارکیٹ کے ماحول میں حکمت عملی کی موافقت کو بہتر بنانے کے لئے EMA ادوار اور CCI کی حد جیسے پیرامیٹرز کو بہتر بنانے کے لئے جینیاتی الگورتھم یا گرڈ سرچ کے طریقوں کا استعمال کریں۔
مارکیٹ ریجیم کی پہچان شامل کریں: مارکیٹ کی حالت (ٹرینڈ ، ہلکا پھلکا ، اعلی اتار چڑھاؤ) کی پہچان کا ماڈیول تیار کریں تاکہ حکمت عملی کے پیرامیٹرز کو ایڈجسٹ کیا جاسکے یا مارکیٹ کی مختلف حالتوں کی بنیاد پر تجارت کو روک دیا جاسکے۔
ملٹی ای ایم اے اور سی سی آئی کراس اوور ٹرینڈ فالونگ اسٹریٹیجی ایک مقداری تجارتی نظام ہے جو تکنیکی تجزیہ کو متحرک رسک مینجمنٹ کے ساتھ جوڑتا ہے۔ متعدد ای ایم اے کراس اوورز اور سی سی آئی اشارے کے امتزاج کے ذریعے ، یہ حکمت عملی مارکیٹ کے رجحانات کو مؤثر طریقے سے پکڑ سکتی ہے جبکہ لچکدار انٹری میکانزم اور متحرک منافع اور اسٹاپ نقصان کی ترتیبات کے ذریعے رسک کا انتظام کرتی ہے۔ اگرچہ اس حکمت عملی میں کچھ موروثی خطرات ہیں ، جیسے مکمل پوزیشن ٹریڈنگ سے تاخیر اور ممکنہ اعلی ڈراؤونگ ، لیکن یہ استحکام اور موافقت کو نمایاں طور پر بہتر بناسکتی ہے اور بہتر بناسکتی ہے ، جیسے اتار چڑھاؤ کی ایڈجسٹمنٹ ، متحرک پوزیشن مینجمنٹ ، اور مارکیٹ کی شناخت۔ مجموعی طور پر ، یہ ایک مضبوط بنیاد اور مختلف مارکیٹ کے ماحول میں مستحکم واپسی پیدا کرنے کی صلاحیت رکھنے والی حکمت عملی کا فریم ورک ہے۔
/*backtest start: 2019-12-23 08:00:00 end: 2024-09-24 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("EMA & CCI Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // Параметры EMA ema8_length = 8 ema12_length = 12 ema24_length = 24 ema72_length = 72 // Расчет EMA ema8 = ta.ema(close, ema8_length) ema12 = ta.ema(close, ema12_length) ema24 = ta.ema(close, ema24_length) ema72 = ta.ema(close, ema72_length) // Параметры CCI cci_length = 20 cci_overbought = 150 cci_oversold = -150 // Параметры тейк-профита и стоп-лосса takeProfitPercent = input.float(1.5, title="Take Profit (%)", step=0.1) stopLossPercent = input.float(0.5, title="Stop Loss (%)", step=0.1) takeProfitPercentTime = input.float(0.5, title="Take Profit (%) for Time-based", step=0.1) stopLossPercentTime = input.float(0.2, title="Stop Loss (%) for Time-based", step=0.1) max_wait_bars = input.float(2, title="Max wait candles", step=1) // Расчет CCI cci = ta.cci(close, cci_length) // Состояние открытой позиции sz = strategy.position_size // Флаги для отслеживания пересечений EMA вверх var int ema8_cross_index_up = na var int ema12_cross_index_up = na var int ema24_cross_index_up = na // Флаги для отслеживания пересечений EMA вниз var int ema8_cross_index_down = na var int ema12_cross_index_down = na var int ema24_cross_index_down = na // Проверка пересечения EMA с 72 вверх и обновление индекса пересечения if (ta.crossover(ema8, ema72)) ema8_cross_index_up := bar_index if (ta.crossover(ema12, ema72)) ema12_cross_index_up := bar_index if (ta.crossover(ema24, ema72)) ema24_cross_index_up := bar_index // Проверка пересечений EMA вниз и обновление индекса пересечения if (ta.crossunder(ema8, ema72)) ema8_cross_index_down := bar_index if (ta.crossunder(ema12, ema72)) ema12_cross_index_down := bar_index if (ta.crossunder(ema24, ema72)) ema24_cross_index_down := bar_index // Условия пересечения за одну свечу (лонг и шорт) cross_condition_one_candle_long = (na(ema8_cross_index_up) == false and (bar_index - ema8_cross_index_up) == 0) and (na(ema12_cross_index_up) == false and (bar_index - ema12_cross_index_up) == 0) and (na(ema24_cross_index_up) == false and (bar_index - ema24_cross_index_up) == 0) cross_condition_one_candle_short = (na(ema8_cross_index_down) == false and (bar_index - ema8_cross_index_down) == 0) and (na(ema12_cross_index_down) == false and (bar_index - ema12_cross_index_down) == 0) and (na(ema24_cross_index_down) == false and (bar_index - ema24_cross_index_down) == 0) // Условия пересечения в течение указанного времени (лонг и шорт) cross_condition_within_time_long = (not na(ema8_cross_index_up) and (bar_index - ema8_cross_index_up) <= max_wait_bars) and (not na(ema12_cross_index_up) and (bar_index - ema12_cross_index_up) <= max_wait_bars) and (not na(ema24_cross_index_up) and (bar_index - ema24_cross_index_up) <= max_wait_bars) cross_condition_within_time_short = (not na(ema8_cross_index_down) and (bar_index - ema8_cross_index_down) <= max_wait_bars) and (not na(ema12_cross_index_down) and (bar_index - ema12_cross_index_down) <= max_wait_bars) and (not na(ema24_cross_index_down) and (bar_index - ema24_cross_index_down) <= max_wait_bars) // Условие для открытия лонга long_condition_one = cross_condition_one_candle_long and cci > cci_overbought and close > ema72 long_condition_time = cross_condition_within_time_long and cci > cci_overbought and close > ema72 // Условие для открытия шорта short_condition_one = cross_condition_one_candle_short and cci < cci_oversold and close < ema72 short_condition_time = cross_condition_within_time_short and cci < cci_oversold and close < ema72 // Вход в лонг if (long_condition_one and sz == 0) strategy.entry(id='Long_one', direction=strategy.long) if (long_condition_time and sz == 0) strategy.entry(id='Long_time', direction=strategy.long) // Вход в шорт if (short_condition_one and sz == 0) strategy.entry(id='Short_one', direction=strategy.short) if (short_condition_time and sz == 0) strategy.entry(id='Short_time', direction=strategy.short) // Вычисление цен тейк-профита и стоп-лосса для лонга if (sz > 0 and strategy.opentrades.entry_id(0) == 'Long_one') entryPriceLong = strategy.opentrades.entry_price(0) takeProfitPriceLong = entryPriceLong * (1 + takeProfitPercent / 100) stopLossPriceLong = entryPriceLong * (1 - stopLossPercent / 100) strategy.exit("Close long one", "Long_one", limit=takeProfitPriceLong, stop=stopLossPriceLong) ema8_cross_index_up := na ema12_cross_index_up := na ema24_cross_index_up := na if (sz > 0 and strategy.opentrades.entry_id(0) == 'Long_time') entryPriceLongTime = strategy.opentrades.entry_price(0) takeProfitPriceLongTime = entryPriceLongTime * (1 + takeProfitPercentTime / 100) stopLossPriceLongTime = entryPriceLongTime * (1 - stopLossPercentTime / 100) strategy.exit("Close long time", "Long_time", limit=takeProfitPriceLongTime, stop=stopLossPriceLongTime) ema8_cross_index_up := na ema12_cross_index_up := na ema24_cross_index_up := na // Вычисление цен тейк-профита и стоп-лосса для шорта if (sz < 0 and strategy.opentrades.entry_id(0) == 'Short_one') entryPriceShort = strategy.opentrades.entry_price(0) takeProfitPriceShort = entryPriceShort * (1 - takeProfitPercent / 100) stopLossPriceShort = entryPriceShort * (1 + stopLossPercent / 100) strategy.exit("Close short one", "Short_one", limit=takeProfitPriceShort, stop=stopLossPriceShort) ema8_cross_index_down := na ema12_cross_index_down := na ema24_cross_index_down := na if (sz < 0 and strategy.opentrades.entry_id(0) == 'Short_time') entryPriceShortTime = strategy.opentrades.entry_price(0) takeProfitPriceShortTime = entryPriceShortTime * (1 - takeProfitPercentTime / 100) stopLossPriceShortTime = entryPriceShortTime * (1 + stopLossPercentTime / 100) strategy.exit("Close short time", "Short_time", limit=takeProfitPriceShortTime, stop=stopLossPriceShortTime) ema8_cross_index_down := na ema12_cross_index_down := na ema24_cross_index_down := na // Отображение EMA на графике plot(ema8, title="EMA 8", color=color.blue, linewidth=2) plot(ema12, title="EMA 12", color=color.orange, linewidth=2) plot(ema24, title="EMA 24", color=color.green, linewidth=2) plot(ema72, title="EMA 72", color=color.red, linewidth=2) // Вывод CCI в подвале //plot(cci, title="CCI", color=color.purple) //hline(100, "CCI 150", color=color.green) //hline(-100, "CCI -150", color=color.red) //hline(0, "CCI 0", color=color.gray) // Отладочная информация //plotshape(series=long_condition_one, location=location.belowbar, color=color.lime, style=shape.labelup, title="Long Condition") //plotshape(series=cross_condition_one_candle_long, location=location.belowbar, color=color.blue, style=shape.triangleup, title="Cross Condition Long") //plotshape(series=long_condition_time, location=location.belowbar, color=#e6d700, style=shape.labelup, title="Long Condition Time") //plotshape(series=cross_condition_within_time_long, location=location.belowbar, color=#a21dbd, style=shape.triangleup, title="Cross Condition Time Long") //plotshape(series=short_condition_one, location=location.abovebar, color=color.red, style=shape.labeldown, title="Short Condition") //plotshape(series=cross_condition_one_candle_short, location=location.abovebar, color=color.blue, style=shape.triangledown, title="Cross Condition Short") //plotshape(series=short_condition_time, location=location.abovebar, color=#e6d700, style=shape.labeldown, title="Short Condition Time") //plotshape(series=cross_condition_within_time_short, location=location.abovebar, color=#a21dbd, style=shape.triangledown, title="Cross Condition Time Short")