یہ حکمت عملی ایک عام ٹرپل ایکسپونینشل موونگ ایوریج (ای ایم اے) ٹریڈنگ سسٹم کو نافذ کرتی ہے۔ یہ تیز 5 دن کے ای ایم اے ، درمیانے 20 دن کے ای ایم اے اور سست 50 دن کے ای ایم اے کا موازنہ کرکے تجارتی سگنل تیار کرتی ہے۔ یہ جعلی سگنل کو فلٹر کرنے کے لئے پچھلے بار کے قریب موجودہ بار کی قیمت کا بھی استعمال کرتی ہے۔ اس کے علاوہ ، منافع میں مقفل ہونے کے لئے ٹریلنگ اسٹاپ نقصان کا استعمال کیا جاتا ہے۔
جب 5 دن کا ای ایم اے 20 دن کے ای ایم اے سے اوپر عبور کرتا ہے ، اور تینوں ای ایم اے تیزی سے سیدھ ہو جاتے ہیں (5 دن کا ای ایم اے > 20 دن کا ای ایم اے > 50 دن کا ای ایم اے) ، اور موجودہ بار
داخل ہونے کے بعد، جب قیمت کچھ ٹکس سے چلتی ہے، تو زیادہ منافع میں مقفل کرنے کے لئے قیمت کی اتار چڑھاؤ کی بنیاد پر سٹاپ نقصان کو ایڈجسٹ کرنے کے لئے ایک پیچھے سٹاپ نقصان شروع کیا جائے گا.
سگنل پیدا کرنے کے لئے ٹرپل ای ایم اے کا استعمال مارکیٹ کے شور کو مؤثر طریقے سے فلٹر کرسکتا ہے اور رجحانات کی نشاندہی کرسکتا ہے۔ فاسٹ ای ایم اے تازہ ترین تبدیلیوں کی عکاسی کرتا ہے ، میڈیم ای ایم اے رجحان کی سمت کا تعین کرتا ہے ، اور سست ای ایم اے اتار چڑھاؤ کو فلٹر کرتا ہے۔
موجودہ بار بندشوں کا پچھلے بار بندشوں کے ساتھ موازنہ کرنے سے جعلی سگنلز کو مزید فلٹر کیا جاتا ہے اور غیر ضروری تجارت کو کم کیا جاتا ہے۔
ٹریلنگ اسٹاپ نقصان متحرک طور پر منافع کو مقفل کرنے کے لئے قیمت کی کارروائی کی بنیاد پر اسٹاپ نقصان کو ایڈجسٹ کرتا ہے۔
اس حکمت عملی کی لچکدار پیرامیٹر کی ترتیبات روزانہ سے منٹ بار تک مختلف مصنوعات اور ٹائم فریموں میں اصلاح کی اجازت دیتی ہیں۔
ای ایم اے کی بار بار کراسنگ سے مختلف مارکیٹوں میں بہت زیادہ تجارت پیدا ہوسکتی ہے ، جس سے کمیشن اور سلائپج سے ہونے والے اخراجات میں اضافہ ہوتا ہے۔
ٹرائلنگ سٹاپ نقصان بڑے پیمانے پر whipsaws کے دوران رجحان سے قبل ہی باہر نکل سکتا ہے.
ای ایم اے تاخیر کے باعث اہم موڑ کے مقامات اور نقصانات کا فقدان ہوسکتا ہے۔
پیرامیٹرز جیسے ای ایم اے کے ادوار، ٹریلنگ سٹاپ ٹکس مختلف مصنوعات اور ٹائم فریم کے لئے اصلاح کی ضرورت ہوتی ہے.
ٹریڈنگ سگنل فلٹر کرنے کے لئے MACD، KD جیسے دیگر اشارے شامل کریں.
بہترین مجموعے تلاش کرنے کے لئے مخصوص مصنوعات اور ٹائم فریم کے لئے پیرامیٹرز کی جانچ اور اصلاح کریں۔
انسانی نگرانی یا مشین سیکھنے کے ذریعے پیرامیٹرز کو متحرک طور پر ایڈجسٹ کریں۔
مخصوص مارکیٹ کے حالات کے لئے ٹرائلنگ سٹاپ کو غیر فعال کرنے اور مکمل پوزیشن کو برقرار رکھنے پر غور کریں۔
سادہ ٹریلنگ سٹاپ نقصان کو زیادہ جدید خودکار منافع لینے کے طریقہ کار سے تبدیل کریں۔
یہ حکمت عملی تین عام تکنیکی تجزیہ کی تکنیکوں کو مربوط کرتی ہے - ای ایم اے کراس اوور ، پرائس بریک آؤٹ اور ٹریلنگ اسٹاپ نقصان ایک کافی جامع اور مضبوط رجحان کے بعد ٹریڈنگ سسٹم میں۔ پیرامیٹر کی اصلاح کے ذریعے ، اسے مختلف مصنوعات اور ٹائم فریموں کے مطابق بنایا جاسکتا ہے اور مضبوط رجحان سازی کی منڈیوں میں اچھی کارکردگی کا مظاہرہ کرتا ہے۔ لیکن اس میں تکنیکی تجزیہ کی حکمت عملی کی کچھ عام کمزورییں بھی ہیں جن کو زیادہ سے زیادہ مارکیٹ کی صورتحال کو سنبھالنے کے لئے مزید اصلاح کی ضرورت ہے۔ مجموعی طور پر ، یہ حکمت عملی کچھ عام حکمت عملی کے تصورات کو بہت اچھی طرح سے ظاہر کرکے مقداری تجارت کے لئے ایک آسان اور عملی خیال فراہم کرتی ہے۔
/*backtest start: 2023-10-01 00:00:00 end: 2023-10-02 12:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Matt Dearden - IndoPilot // @version=4 /////////////////////////////////////////////////////// Initial Parameters /////////////////////////////////////////////////////// SystemName = "Triple EMA Strategy" ShortSystemName = "TEMA" InitPosition = 0 InitCapital = 50000 InitCommission = 0.004 //approx value to compensate for Oanda spreads InitPyramidMax = 0 CalcOnorderFills = true strategy(title=SystemName, shorttitle=ShortSystemName, overlay=true, pyramiding=InitPyramidMax, default_qty_type=strategy.cash, default_qty_value=InitPosition, commission_type=strategy.commission.percent, commission_value=InitCommission, initial_capital=InitCapital, max_lines_count=500, max_labels_count=500, process_orders_on_close=false, calc_on_every_tick=false) ///////////////////////////////////////////////////////////// Inputs ///////////////////////////////////////////////////////////// DateFilter = input(false, "═════ Data Filtering ═════") InitYear = input(title="Year", type=input.integer, defval=2021, minval=2000, maxval=2021) InitMonth = input(title="Month (0=ALL)", type=input.integer, defval=0, minval=0, maxval=12) InitStopLoss = input(title="Stop Loss (ticks)", type=input.integer, defval=100, minval=0, maxval=1000) TrailingStopLoss = input(title="Trailing S/L (ticks)", type=input.integer, defval=130, minval=0, maxval=1000) InitBuffer = input(title="Buffer (ticks)", type=input.integer, defval=15, minval=0, maxval=1000) InitEMA1 = input(title="EMA 1", type=input.integer, defval=5, minval=0, maxval=1000) InitEMA2 = input(title="EMA 2", type=input.integer, defval=20, minval=0, maxval=1000) InitEMA3 = input(title="EMA 3", type=input.integer, defval=50, minval=0, maxval=1000) //////////////////////////////////////////////////////////// Variables /////////////////////////////////////////////////////////// var StopLoss = float(0.0) var StartPrice = float(0.0) //setup multipliers and catch JPY difference Multiplier = syminfo.currency == "JPY" ? 10 : 1000 //get the daily exchange rate from yesterday //X_rate = security(AccountCurrency+syminfo.currency, "D", close[1]) OrderQty = 1 Buffer = InitBuffer / (Multiplier * 100) /////////////////////////////////////////////////////// Triple EMA Strategy ////////////////////////////////////////////////////// EMA1 = ema(close, InitEMA1) EMA2= ema(close, InitEMA2) EMA3 = ema(close, InitEMA3) //entry conditions longCondition = crossover(EMA1, EMA2) and close > EMA3 and EMA1 > EMA3 and EMA2 > EMA3 and close > (close[1] + Buffer) shortCondition = crossunder(EMA1, EMA2) and close < EMA3 and EMA1 < EMA3 and EMA2 < EMA3 and close < (close[1] - Buffer) /////////////////////////////////////////////////////// Trailing Stoploss //////////////////////////////////////////////////////// if (strategy.position_size > 0 and (close > (StartPrice + (TrailingStopLoss / (100 * Multiplier))))) StopLoss := max(StopLoss, close - (TrailingStopLoss / (100 * Multiplier))) strategy.exit("Long Stoploss", "Long") if (strategy.position_size < 0 and (close < (StartPrice - (InitStopLoss / (100 * Multiplier))))) StopLoss := min(StopLoss, close + (TrailingStopLoss / (100 * Multiplier))) strategy.exit("Short Stoploss", "Short") ///////////////////////////////////////////////////////// Setup entries ///////////////////////////////////////////////////////// if (longCondition) StartPrice := close StopLoss := StartPrice - (InitStopLoss / (100 * Multiplier)) strategy.entry("Long", strategy.long, qty=OrderQty) strategy.exit("Long Stoploss", "Long") if (shortCondition) StartPrice := close StopLoss := StartPrice + (InitStopLoss / (100 * Multiplier)) strategy.entry("Short", strategy.short, qty=OrderQty) strategy.exit("Short Stoploss", "Short") ///////////////////////////////////////////////////////// Draw the EMAs ///////////////////////////////////////////////////////// plot(EMA1, "EMA1", color=#00FF00) plot(EMA2, "EMA2", color=#FF0000) plot(EMA3, "EMA3", color=#4040FF)