
مساوات سے باخبر رہنے کی حکمت عملی میں ہل چلنے والی اوسط کا استعمال مارکیٹ میں داخل ہونے کے اہم اشارے کے طور پر کیا جاتا ہے ، جس سے قیمت کے رجحان کی سمت کا تعین ہوتا ہے۔ اس کے علاوہ ، یہ حکمت عملی متعدد دیگر اشارے ، جیسے بیس لائن ، تصدیق کے اشارے وغیرہ کے ساتھ مل کر قیمت کے رجحانات اور فلٹرنگ کے جعلی سگنل کی تصدیق کرتی ہے۔ مارکیٹ میں داخل ہونے کے بعد ، حکمت عملی اوسطا حقیقی طول و عرض کا استعمال کرتے ہوئے متحرک اسٹاپ نقصان کا حساب لگاتی ہے ، تاکہ رجحانات سے فائدہ اٹھایا جاسکے۔
اوسط ٹریکنگ کی حکمت عملی کا مرکز ہل منتقل اوسط ہے۔ ہل منتقل اوسط قیمت کی تبدیلیوں کے لئے زیادہ حساس ہے ، لہذا اس رجحان کی سمت کو مؤثر طریقے سے طے کیا جاسکتا ہے۔ جب قیمت اوپر کی طرف ہل لائن کو توڑتی ہے تو ، اوپر کی طرف رجحان کی تصدیق ہوتی ہے ، اور زیادہ کام کرتی ہے۔ جب قیمت نیچے کی طرف ہل لائن کو توڑتی ہے تو ، نیچے کی طرف رجحان کی تصدیق ہوتی ہے ، اور خالی ہوجاتی ہے۔
اس کے علاوہ ، اس حکمت عملی میں بیس لائن اشارے بھی متعارف کروائے گئے ہیں ، جو طویل اور مختصر رجحانات کا فیصلہ کرنے کے لئے استعمال کیا جاتا ہے۔ تصدیق کے اشارے ، جعلی بریک کو فلٹر کرنے کے لئے استعمال کیا جاتا ہے۔ تجارتی سگنل صرف اس وقت جاری کیا جاتا ہے جب بیس لائن اور تصدیق کے اشارے دونوں ہی رجحان کی سمت کی تصدیق کرتے ہیں۔
مارکیٹ میں آنے کے بعد ، حکمت عملی نے اے ٹی آر اور ہل ای ایم اے کے ذریعہ حساب کردہ اوسط حقیقی طول و عرض کا استعمال کرتے ہوئے اسٹاپ نقصان کی پوزیشن طے کی۔ جیسا کہ رجحان جاری ہے ، اسٹاپ لائن بھی مسلسل اوپر / نیچے منتقل ہوتی ہے تاکہ رجحان کو منافع بخش بنایا جاسکے۔
مساوات سے باخبر رہنے کی حکمت عملی ، جو رجحان کے فیصلے اور خطرے پر قابو پانے کے فوائد کو جوڑتی ہے ، رجحان کے حالات میں بہتر منافع حاصل کرسکتی ہے۔ اس کے مقابلے میں فکسڈ اسٹاپ اسٹریٹجی ، یہ رجحان کو چلانے کے لئے متحرک اسٹاپ کے ذریعہ ٹریل کرسکتی ہے ، تاکہ مارکیٹ میں معمول کے اتار چڑھاؤ سے بچنے سے بچ سکے۔
بہت سے اشارے کا مجموعہ استعمال بھی حکمت عملی کو مارکیٹ میں تبدیلیوں کے لئے زیادہ حساس بناتا ہے ، اور جعلی سگنل کو مؤثر طریقے سے فلٹر کرسکتا ہے۔ اس کے علاوہ ، حکمت عملی متعدد پیرامیٹرز کو ایڈجسٹ کرنے کے لئے بھی فراہم کرتی ہے ، اور صارف مارکیٹ کے بارے میں اپنے فیصلے کے مطابق اصلاح کرسکتا ہے۔
یہ حکمت عملی بنیادی طور پر رجحان کے اشارے پر انحصار کرتی ہے ، اور اس میں غلط سگنل اور اسٹاپ نقصان کا سامنا کرنا پڑتا ہے۔ اس کے علاوہ ، متعدد اشارے کے مجموعے میں اشارے کے تنازعہ کی صورت بھی ہوسکتی ہے۔ پیرامیٹرز کی غلط ترتیب بھی حکمت عملی کی خراب کارکردگی کا سبب بن سکتی ہے۔
حکمت عملی میں اضافی فیصلے کے ماڈیول کو شامل کرنے پر غور کیا جاسکتا ہے ، اشارے میں اختلافات کی صورت میں تجارت کو روکنا۔ یا ووٹنگ کا طریقہ کار اپنانا ، متعدد اشارے کے فیصلے کے نتائج کو مربوط کرنا۔ پیرامیٹرز کی ترتیب کے معاملے میں ، بہترین پیرامیٹرز کو ریٹرننگ آپٹیمائزیشن کے ذریعہ تلاش کیا جاسکتا ہے۔
مساوات سے باخبر رہنے کی حکمت عملی کو مندرجہ ذیل طریقوں سے بہتر بنایا جاسکتا ہے:
مساوات سے باخبر رہنے کی حکمت عملی مجموعی طور پر ایک عمدہ رجحان سے باخبر رہنے کی حکمت عملی ہے۔ اس نے رجحان کے فیصلے اور متحرک اسٹاپ نقصان کو کامیابی کے ساتھ جوڑ دیا ہے ، جس سے رجحانات کو منافع بخش طریقے سے پیروی کیا جاسکتا ہے۔ مزید اصلاحات کے ذریعہ ، اس حکمت عملی کی بہتر کارکردگی حاصل کرنے کی امید ہے۔ یہ حکمت عملی ایک مقدار کی تجارت کی حکمت عملی کی تعمیر کے لئے ایک اچھا حوالہ فراہم کرتی ہے۔
/*backtest
start: 2023-11-28 00:00:00
end: 2023-12-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// © Milleman
//@version=4
strategy("MilleMachine", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital=10000, commission_type=strategy.commission.percent, commission_value=0.06)
// Additional settings
Mode = input(title="Mode", defval="LongShort", options=["LongShort", "OnlyLong", "OnlyShort","Indicator Mode"])
UseTP = false //input(false, title="Use Take Profit?")
QuickSwitch = true //input(true, title="Quickswitch")
UseTC = true //input(true, title="Use Trendchange?")
// Risk management settings
//Spacer2 = input(false, title="======= Risk management settings =======")
Risk = input(1.0, title="% Risk",minval=0)/100
RRR = 2 //input(2,title="Risk Reward Ratio",step=0.1,minval=0,maxval=20)
SL_Mode = false // input(true, title="ON = Fixed SL / OFF = Dynamic SL (ATR)")
SL_Fix = 3 //input(3,title="StopLoss %",step=0.25, minval=0)/100
ATR = atr(14) //input(14,title="Periode ATR"))
Mul = input(2,title="ATR Multiplier",step=0.1)
xATR = ATR * Mul
SL = SL_Mode ? SL_Fix : (1 - close/(close+xATR))
// INDICATORS //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Ind(type, src, len) =>
float result = 0
if type=="McGinley"
result := na(result[1]) ? ema(src, len) : result[1] + (src - result[1]) / (len * pow(src/result[1], 4))
if type=="HMA"
result := wma(2*wma(src, len/2)-wma(src, len), round(sqrt(len)))
if type=="EHMA"
result := ema(2*ema(src, len/2)-ema(src, len), round(sqrt(len)))
if type=="THMA"
lend = len/2
result := wma(wma(src, lend/3)*3-wma(src, lend/2)-wma(src,lend), lend)
if type=="SMA" // Simple
result := sma(src, len)
if type=="EMA" // Exponential
result := ema(src, len)
if type=="DEMA" // Double Exponential
e = ema(src, len)
result := 2 * e - ema(e, len)
if type=="TEMA" // Triple Exponential
e = ema(src, len)
result := 3 * (e - ema(e, len)) + ema(ema(e, len), len)
if type=="WMA" // Weighted
result := wma(src, len)
if type=="VWMA" // Volume Weighted
result := vwma(src, len)
if type=="SMMA" // Smoothed
w = wma(src, len)
result := (w[1] * (len - 1) + src) / len
if type == "RMA"
result := rma(src, len)
if type=="LSMA" // Least Squares
result := linreg(src, len, 0)
if type=="ALMA" // Arnaud Legoux
result := alma(src, len, 0.85, 6)
if type=="Kijun" //Kijun-sen
kijun = avg(lowest(len), highest(len))
result :=kijun
if type=="WWSA" // Welles Wilder Smoothed Moving Average
result := nz(result[1]) + (close -nz(result[1]))/len
result
// Baseline : Switch from Long to Short and vice versa
BL_Act = input(true, title="====== Activate Baseline - Switch L/S ======")
BL_type = input(title="Baseline Type", defval="McGinley", options=["McGinley","HMA","EHMA","THMA","SMA","EMA","DEMA","TEMA","WMA","VWMA","SMMA","RMA","LSMA","ALMA","Kijun","WWSA"])
BL_src = input(close, title="BL source")
BL_len = input(50, title="BL length", minval=1)
BL = Ind(BL_type,BL_src, BL_len)
// Confirmation indicator
C1_Act = input(false, title="===== Activate Confirmation indicator =====")
C1_type = input(title="C1 Entry indicator", defval="SMA", options=["McGinley","HMA","EHMA","THMA","SMA","EMA","DEMA","TEMA","WMA","VWMA","SMMA","RMA","LSMA","ALMA","Kijun","WWSA"])
C1_src = input(close, title="Source")
C1_len = input(5,title="Length", minval=1)
C1 = Ind(C1_type,C1_src,C1_len)
// Entry indicator : Hull Moving Average
Spacer5 = input(true, title="====== ENTRY indicator =======")
EI_type = input(title="EI Entry indicator", defval="HMA", options=["McGinley","HMA","EHMA","THMA","SMA","EMA","DEMA","TEMA","WMA","VWMA","SMMA","RMA","LSMA","ALMA","Kijun","WWSA"])
EI_src = input(close, title="Source")
EI_Len = input(46,title="Length", minval=1)
EI = Ind(EI_type,EI_src,EI_Len)
// Trail stop settings
TrailActivation = input(true, title="===== Activate Trailing Stop =====")
TS_type = input(title="TS Traling Stop Type", defval="EMA", options=["McGinley","HMA","EHMA","THMA","SMA","EMA","DEMA","TEMA","WMA","VWMA","SMMA","RMA","LSMA","ALMA","Kijun","WWSA"])
TrailSLScaling = 1 //input(100, title="SL Scaling", minval=0, step=5)/100
TrailingSourceLong = Ind(TS_type,low,input(5,"Smoothing Trail Long EMA", minval=1))
TrailingSourceShort = Ind(TS_type,high,input(2,"Smoothing Trail Short EMA", minval=1))
//VARIABLES MANAGEMENT
TriggerPrice = 0.0, TriggerPrice := TriggerPrice[1]
TriggerSL = 0.0, TriggerSL := TriggerSL[1]
SLPrice = 0.0, SLPrice := SLPrice[1], TPPrice = 0.0, TPPrice := TPPrice[1]
isLong = false, isLong := isLong[1], isShort = false, isShort := isShort[1]
//LOGIC
GoLong = crossover(EI,EI[1]) and (strategy.position_size == 0.0 and QuickSwitch) and (not BL_Act or BL/BL[1] > 1) and (not C1_Act or C1>C1[1]) and (Mode == "LongShort" or Mode == "OnlyLong")
GoShort = crossunder(EI,EI[1]) and (strategy.position_size == 0.0 and QuickSwitch) and (not BL_Act or BL/BL[1] < 1) and (not C1_Act or C1<C1[1]) and (Mode == "LongShort" or Mode == "OnlyShort")
ExitLong = isLong and crossunder(EI,EI[1]) and UseTC
ExitShort = isShort and crossover(EI,EI[1]) and UseTC
//FRAMEWORK
//Reset Long-Short memory
if isLong and strategy.position_size == 0.0
isLong := false
if isShort and strategy.position_size == 0.0
isShort := false
//Long
if GoLong
isLong := true, TriggerPrice := close, TriggerSL := SL
TPPrice := UseTP? TriggerPrice * (1 + (TriggerSL * RRR)) : na
SLPrice := TriggerPrice * (1-TriggerSL)
Entry_Contracts = strategy.equity * Risk / ((TriggerPrice-SLPrice)/TriggerPrice) / TriggerPrice
strategy.entry("Long", strategy.long, comment=tostring(round((TriggerSL/TriggerPrice)*1000)), qty=Entry_Contracts)
strategy.exit("TPSL","Long", limit=TPPrice, stop=SLPrice)
if isLong
NewValSL = TrailingSourceLong * (1 - (SL*TrailSLScaling))
if TrailActivation and NewValSL > SLPrice
SLPrice := NewValSL
strategy.exit("TPSL","Long", limit=TPPrice, stop=SLPrice)
if ExitLong
strategy.close_all(comment="TrendChange")
isLong := false
//Short
if GoShort
isShort := true, TriggerPrice := close, TriggerSL := SL
TPPrice := UseTP? TriggerPrice * (1 - (TriggerSL * RRR)) : na
SLPrice := TriggerPrice * (1 + TriggerSL)
Entry_Contracts = strategy.equity * Risk / ((SLPrice-TriggerPrice)/TriggerPrice) / TriggerPrice
strategy.entry("Short", strategy.short, comment=tostring(round((TriggerSL/TriggerPrice)*1000)), qty=Entry_Contracts)
strategy.exit("TPSL","Short", limit=TPPrice, stop=SLPrice)
if isShort
NewValSL = TrailingSourceShort * (1 + (SL*TrailSLScaling))
if TrailActivation and NewValSL < SLPrice
SLPrice := NewValSL
strategy.exit("TPSL","Short", limit=TPPrice, stop=SLPrice)
if ExitShort
strategy.close_all(comment="TrendChange")
isShort := false
//VISUALISATION
plot(BL_Act?BL:na, color=color.blue,title="Baseline")
plot(C1_Act?C1:na, color=color.yellow,title="confirmation Indicator")
EIColor = EI>EI[1] ? color.green : color.red
Fill_EI = plot(EI, color=EIColor, linewidth=1, transp=40, title="Entry Indicator EI")
Fill_EID = plot(EI[1], color=EIColor, linewidth=1, transp=40, title="Entry Indicator EID")
fill(Fill_EI,Fill_EID, title="EI_Fill", color=EIColor,transp=50)
plot(strategy.position_size != 0.0 and (isLong or isShort) ? TriggerPrice : na, title="TriggerPrice", color=color.yellow, style=plot.style_linebr)
plot(strategy.position_size != 0.0 and (isLong or isShort) ? TPPrice : na, title="TakeProfit", color=color.green, style=plot.style_linebr)
plot(strategy.position_size != 0.0 and (isLong or isShort) ? SLPrice : na, title="StopLoss", color=color.red, style=plot.style_linebr)
bgcolor(isLong[1] and cross(low,SLPrice) and low[1] > SLPrice and TriggerPrice>SLPrice ? color.yellow : na, transp=75, title="SL Long")
bgcolor(isShort[1] and cross(high,SLPrice) and high[1] < SLPrice and TriggerPrice<SLPrice ? color.yellow : na, transp=75, title="SL Short")