ای ایم اے فلٹر کی حکمت عملی کے ساتھ ماڈیولو منطق

مصنف:چاؤ ژانگ، تاریخ: 2023-12-13 15:55:07
ٹیگز:

img

جائزہ

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

حکمت عملی منطق

  1. قیمت ان پٹ ویلیو a کو بند کرنے کے لئے سیٹ کریں ، قابل ترمیم؛ تقسیم کار b کو 4 پر سیٹ کریں ، قابل ترمیم۔
  2. a تقسیم b کا باقی ماڈل حساب کریں، اس بات کا تعین کریں کہ ماڈل 0 کے برابر ہے یا نہیں۔
  3. EMA (MALen) کی لمبائی کو ڈیفالٹ کے طور پر 70 پیریڈ میں طے کریں تاکہ درمیانی اور طویل مدتی رجحان کا اندازہ لگایا جاسکے۔
  4. جب ماڈیولو 0 کے برابر ہوتا ہے تو ، ایک ٹریڈنگ سگنل جوڑ نمبر تیار ہوتا ہے۔ ای ایم اے تعلقات کے ساتھ مل کر یہ سمت کا تعین کرتا ہے۔ جب قیمت ای ایم اے سے تجاوز کرتی ہے تو ، خریدنے کا سگنل تیار کیا جاتا ہے۔ جب قیمت ای ایم اے سے نیچے گزرتی ہے تو ، فروخت کا سگنل تیار کیا جاتا ہے۔
  5. تجارتی اندراجات سگنل کی سمت کی بنیاد پر طویل یا مختصر کھولے جاتے ہیں۔ حکمت عملی تجارت کی تعداد کو کنٹرول کرنے کے لئے الٹ افتتاحی پوزیشن کو محدود کرسکتی ہے۔
  6. اسٹاپ نقصان کی شرائط 3 اختیارات کی بنیاد پر مقرر کی جاتی ہیں: فکسڈ اسٹاپ نقصان ، اے ٹی آر اسٹاپ نقصان ، قیمت سوئنگ اسٹاپ نقصان۔ منافع حاصل کرنے کی شرط اسٹاپ نقصان کا الٹ ہے۔
  7. ٹریلنگ سٹاپ کو زیادہ منافع میں مقفل کرنے کے لئے فعال کیا جا سکتا ہے، ڈیفالٹ کی طرف سے غیر فعال.

فوائد کا تجزیہ

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

خطرے کا تجزیہ

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

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

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

نتیجہ

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


/*backtest
start: 2023-11-12 00:00:00
end: 2023-12-12 00:00:00
period: 1h
basePeriod: 15m
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/
// © tweakerID

// To understand this strategy first we need to look into the Modulo (%) operator. The modulo returns the remainder numerator 
// of a division's quotient (the result). If we do 5 / 3, we get 1 and 2/3 as a result, where the remainder is 2 (two thirds, in this case). This can be
// used for many things, for example to determine when a number divides evenly into another number. If we divide 3/3, our result is 1,
// with no remainder numerator, hence our modulo result is 0. In this strategy, we compare a given number (divisor, user defined) with the
// the closing price of every candle (dividend, modifiable from the inputs panel) to determine if the result between their division is an even number. 
// If the answer is true, we have an entry signal. If this signal occurs below the EMA (length is defined by the user) we go short and
// viceversa for longs. This logic can be reversed. In this case, the modulo works as a random-like filter for a moving average strategy
// that usually struggles when the market is ranging.

//@version=4

//@version=4
strategy("Modulo Logic + EMA Strat", 
     overlay=true, 
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=100, 
     initial_capital=10000, 
     commission_value=0.04, 
     calc_on_every_tick=false, 
     slippage=0)

direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

/////////////////////// STRATEGY INPUTS ////////////////////////////////////////
title1=input(true, "-----------------Strategy Inputs-------------------")  

a=input(close, title="Dividend")
b=input(4, title="Divisor")
usemod=input(true, title="Use Modulo Logic")
MALen=input(70, title="EMA Length")

/////////////////////// BACKTESTER /////////////////////////////////////////////
title2=input(true, "-----------------General Inputs-------------------")  

// Backtester General Inputs
i_SL=input(true, title="Use Stop Loss and Take Profit")
i_SLType=input(defval="ATR Stop", title="Type Of Stop", options=["Strategy Stop", "Swing Lo/Hi", "ATR Stop"])
i_SPL=input(defval=10, title="Swing Point Lookback")
i_PercIncrement=input(defval=3, step=.1, title="Swing Point SL Perc Increment")*0.01
i_ATR = input(14, title="ATR Length")
i_ATRMult = input(4, step=.1, title="ATR Multiple")
i_TPRRR = input(1, step=.1, title="Take Profit Risk Reward Ratio")
TS=input(false, title="Trailing Stop")

// Bought and Sold Boolean Signal
bought = strategy.position_size > strategy.position_size[1] 
 or strategy.position_size < strategy.position_size[1]

// Price Action Stop and Take Profit
LL=(lowest(i_SPL))*(1-i_PercIncrement)
HH=(highest(i_SPL))*(1+i_PercIncrement)
LL_price = valuewhen(bought, LL, 0)
HH_price = valuewhen(bought, HH, 0)
entry_LL_price = strategy.position_size > 0 ? LL_price : na 
entry_HH_price = strategy.position_size < 0 ? HH_price : na 
tp=strategy.position_avg_price + (strategy.position_avg_price - entry_LL_price)*i_TPRRR
stp=strategy.position_avg_price - (entry_HH_price - strategy.position_avg_price)*i_TPRRR

// ATR Stop
ATR=atr(i_ATR)*i_ATRMult
ATRLong = ohlc4 - ATR
ATRShort = ohlc4 + ATR
ATRLongStop = valuewhen(bought, ATRLong, 0)
ATRShortStop = valuewhen(bought, ATRShort, 0)
LongSL_ATR_price = strategy.position_size > 0 ? ATRLongStop : na 
ShortSL_ATR_price = strategy.position_size < 0 ? ATRShortStop : na 
ATRtp=strategy.position_avg_price + (strategy.position_avg_price - LongSL_ATR_price)*i_TPRRR
ATRstp=strategy.position_avg_price - (ShortSL_ATR_price - strategy.position_avg_price)*i_TPRRR


// Strategy Stop

float LongStop = na
float ShortStop = na
float StratTP = na
float StratSTP = na

/////////////////////// STRATEGY LOGIC /////////////////////////////////////////

modulo=a%b
evennumber=modulo==0
MA=ema(close, MALen)
plot(MA)

BUY=usemod ? evennumber and close > MA : close > MA
SELL=usemod ? evennumber and close < MA : close < MA

//Trading Inputs
DPR=input(true, "Allow Direct Position Reverse")
reverse=input(false, "Reverse Trades")

// Entries
if reverse
    if not DPR
        strategy.entry("long", strategy.long, when=SELL and strategy.position_size == 0)
        strategy.entry("short", strategy.short, when=BUY and strategy.position_size == 0)
    else     
        strategy.entry("long", strategy.long, when=SELL)
        strategy.entry("short", strategy.short, when=BUY)
else
    if not DPR 
        strategy.entry("long", strategy.long, when=BUY and strategy.position_size == 0)
        strategy.entry("short", strategy.short, when=SELL and strategy.position_size == 0)
    else
        strategy.entry("long", strategy.long, when=BUY)
        strategy.entry("short", strategy.short, when=SELL)


SL= i_SLType == "Swing Lo/Hi" ? entry_LL_price : i_SLType == "ATR Stop" ? LongSL_ATR_price : LongStop
SSL= i_SLType == "Swing Lo/Hi" ? entry_HH_price : i_SLType == "ATR Stop" ? ShortSL_ATR_price : ShortStop
TP= i_SLType == "Swing Lo/Hi" ? tp : i_SLType == "ATR Stop" ? ATRtp : StratTP
STP= i_SLType == "Swing Lo/Hi" ? stp : i_SLType == "ATR Stop" ? ATRstp : StratSTP

//TrailingStop
dif=(valuewhen(strategy.position_size>0 and strategy.position_size[1]<=0, high,0))
 -strategy.position_avg_price
trailOffset     = strategy.position_avg_price - SL
var tstop = float(na)
if strategy.position_size > 0
    tstop := high- trailOffset - dif
    if tstop<tstop[1]
        tstop:=tstop[1]
else
    tstop := na
StrailOffset     = SSL - strategy.position_avg_price
var Ststop = float(na)
Sdif=strategy.position_avg_price-(valuewhen(strategy.position_size<0 
 and strategy.position_size[1]>=0, low,0))
if strategy.position_size < 0
    Ststop := low+ StrailOffset + Sdif
    if Ststop>Ststop[1]
        Ststop:=Ststop[1]
else
    Ststop := na

strategy.exit("TP & SL", "long", limit=TP, stop=TS? tstop : SL, when=i_SL)
strategy.exit("TP & SL", "short", limit=STP, stop=TS? Ststop : SSL, when=i_SL)

/////////////////////// PLOTS //////////////////////////////////////////////////

plot(i_SL and strategy.position_size > 0 and not TS ? SL : i_SL and strategy.position_size > 0 and TS ? tstop : na , title='SL', style=plot.style_cross, color=color.red)
plot(i_SL and strategy.position_size < 0 and not TS ? SSL : i_SL and strategy.position_size < 0 and TS ? Ststop : na , title='SSL', style=plot.style_cross, color=color.red)
plot(i_SL and strategy.position_size > 0 ? TP : na, title='TP', style=plot.style_cross, color=color.green)
plot(i_SL and strategy.position_size < 0 ? STP : na, title='STP', style=plot.style_cross, color=color.green)
// Draw price action setup arrows
plotshape(BUY ? 1 : na, style=shape.triangleup, location=location.belowbar, 
 color=color.green, title="Bullish Setup", size=size.auto)
plotshape(SELL ? 1 : na, style=shape.triangledown, location=location.abovebar, 
 color=color.red, title="Bearish Setup", size=size.auto)
 




مزید