
یہ حکمت عملی MACD اشارے کی تیز اور سست لائنوں کے کراسنگ کا موازنہ کرکے خرید اور فروخت کے سگنل تیار کرتی ہے۔ جب خریدنے کا سگنل تیار ہوتا ہے تو ، اکاؤنٹ کے حقوق کے ایک خاص تناسب پر خریدنے کے لئے پوزیشن کھولی جاتی ہے۔ اس کے بعد ، پوزیشنوں کو مخصوص واپسی کے نقطہ پر شامل کیا جاتا ہے۔ جب پوزیشن کی کمائی ترتیب کی رکاوٹ تک پہنچ جاتی ہے تو ، تمام پوزیشنوں کو فروخت کیا جاتا ہے۔ سگنل بیچنے اور خریدنے کے سگنل کی منطق اسی طرح کی ہے۔
اس حکمت عملی کا بنیادی منطق یہ ہے کہ رجحانات کا تعین کرنے کے لئے MACD کی تیز اور سست لائنوں کے کراس کا موازنہ کریں۔ MACD ایک چلتی اوسط کی ایک مختلف قیمت ہے ، جو مارکیٹ کے رجحانات اور توانائی کا تعین کرنے کے لئے قلیل مدتی اور طویل مدتی اوسط کے مابین فرق کا حساب لگاتا ہے۔ تیز اور سست لائنوں کا کراسنگ ایک سنہری فورک اور ڈھیلا فورک ہے۔
جب فوری لائن پر سست لائن کو پار کرتے ہیں تو ، گولڈ فورک پیدا ہوتا ہے ، جس کا مطلب ہے کہ مارکیٹ میں تیزی کا رجحان ہے ، اس وقت حکمت عملی زیادہ پوزیشن کھولتی ہے۔ جب فوری لائن کے نیچے سست لائن کو پار کرتے ہیں تو ، ڈیڈ فورک پیدا ہوتا ہے ، جس کا مطلب ہے کہ نیچے کی طرف رجحان ہے ، اس وقت حکمت عملی خالی پوزیشن کھولتی ہے۔
پوزیشن کھولنے کے بعد ، حکمت عملی مخصوص واپسی کے مقام پر اضافی یا خالی پوزیشنیں لے گی۔ یہ مارٹینگل اصول کے ذریعہ منافع کی گنجائش میں اضافہ کرسکتا ہے۔ جب پوزیشن کی مجموعی منافع ترتیب کی رکاوٹ تک پہنچ جاتی ہے تو ، حکمت عملی تمام فروخت یا خرید لیٹ پوزیشنوں کے لئے۔
اس حکمت عملی کے درج ذیل فوائد ہیں:
MACD اشارے کا استعمال کرتے ہوئے مارکیٹ کے رجحانات کا تعین کرنے کے لئے، یہ ایک کلاسک اور قابل اعتماد تکنیکی تجزیہ اشارے ہے.
ایک ہی تجارت کے خطرے کو کنٹرول کرنے کے لئے ، بیچوں میں پوزیشن کھولنے کا طریقہ اختیار کریں۔
اضافی پوزیشن کھولنے سے مارٹینگل اصول کے ذریعے منافع کی گنجائش میں اضافہ ہوتا ہے۔
نقصانات کو محدود کرنے کے لئے روکنے کے نقطہ نظر کو ترتیب دیں.
اس حکمت عملی میں کچھ خطرات بھی ہیں:
MACD اشارے مارکیٹ کی پیش گوئی نہیں کر سکتے ہیں، غلط سگنل ہو سکتا ہے.
تمام پوزیشنوں میں اضافہ پوزیشنوں کو واپس لینے اور توسیع کا خطرہ ہے۔ ہر اضافی پوزیشن کی فیصد کو مناسب طریقے سے ایڈجسٹ کیا جاسکتا ہے۔
روکنے کا نقطہ سیٹ بہت چھوٹا ہے جس کی وجہ سے کمائی کی جگہ محدود ہوسکتی ہے۔ مختلف اقسام کے مطابق ایڈجسٹ کیا جاسکتا ہے۔
کھلے ہوئے فنڈز کا تناسب مناسب طریقے سے مختص کرنے کی ضرورت ہے تاکہ انفرادی قسم کی تجارت اکاؤنٹ کی حد سے تجاوز نہ کرے۔
یہ حکمت عملی مندرجہ ذیل پہلوؤں سے بہتر بنائی جا سکتی ہے۔
مختلف پیرامیٹرز کے ساتھ MACD اشارے کی جانچ کریں تاکہ انڈیکیٹر پیرامیٹرز کو تلاش کیا جاسکے جو مخصوص قسم کے تجارت کے لئے زیادہ موزوں ہوں۔
ہر پوزیشن میں شامل کرنے کے لئے فنڈز کی فیصد اور واپسی کی حد کے پیرامیٹرز کو بہتر بنائیں تاکہ بہترین پیرامیٹرز کا مجموعہ تلاش کیا جاسکے۔
لمبی لائن اور مختصر لائن آپریٹنگ روکنے کے پیرامیٹرز کو الگ الگ ٹیسٹ کریں ، بہترین روک تھام کی سطح کا تعین کریں۔
اکاؤنٹس کی بڑھتی ہوئی پوزیشن کی صلاحیت کا اندازہ کریں اور ایک مناسب قسم کی زیادہ سے زیادہ پوزیشن کی حد مقرر کریں.
اسٹاپ نقصان کی منطق میں اضافہ کریں۔ جب مارکیٹ میں شدید تبدیلی آتی ہے تو ، اسٹاپ نقصان کو مؤثر طریقے سے کنٹرول کیا جاسکتا ہے۔
یہ حکمت عملی مجموعی طور پر ایک عام رجحان کی پیروی کرنے والی حکمت عملی ہے۔ یہ مارکیٹ کے رجحان کی سمت کا تعین کرنے کے لئے MACD اشارے کا استعمال کرتی ہے ، اور منافع کی ایک خاص سطح پر پہنچنے کے بعد اسٹاپ اور آؤٹ پٹ لینے کے ل. اس حکمت عملی کو آسان ، عملی ، آسان عمل درآمد کے لئے موزوں ہے۔ پیرامیٹرز کی اصلاح اور ہوا کے کنٹرول کے منطق کی توسیع سے حکمت عملی کو زیادہ مستحکم بنایا جاسکتا ہے۔
/*backtest
start: 2023-11-26 00:00:00
end: 2023-12-26 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/
// © TradingSoft_tech
//@version=5
strategy("MAPM-V1", overlay=true, default_qty_value=10, max_bars_back=5000,default_qty_type = strategy.percent_of_equity, commission_value=0.1, initial_capital = 100, pyramiding=6, currency=currency.USD)
///////// Options
SignalFast = input.int(300, step=10)
SignalSlow = input.int(600, step=10)
StepAddPurchases = input.float(2.5, step=0.1)
VolumePurchases = input.int(6,step=1)
Buy = input(true)
Sell = input(true)
longProfitPerc = input.float(title="Long Take Profit (%)", minval=0.0, step=0.1, defval=1) * 0.01
shortProfitPerc = input.float(title="Short Take Profit (%)", minval=0.0, step=0.1, defval=1) * 0.01
Martingale = input.float(1.6, minval = 1, step = 0.1)
VolumeDepo = input.int(100, step=1)
PercentOfDepo = input.float(10, step=1)
Close = (close)
EnterVolume = VolumeDepo*PercentOfDepo*0.01/Close
///////// Calculation indicator
fastAverage = ta.ema(close, 8)
slowAverage = ta.ema(close, 49)
macd = fastAverage - slowAverage
macdSignalF = ta.ema(macd,SignalFast)
macdSignalS = ta.ema(macd,SignalSlow)
// Test Start
startYear = input(2005, "Test Start Year")
startMonth = input(1, "Test Start Month")
startDay = input(1, "Test Start Day")
startTest = timestamp(startYear,startMonth,startDay,0,0)
//Test End
endYear = input(2050, "Test End Year")
endMonth = input(12, "Test End Month")
endDay = input(30, "Test End Day")
endTest = timestamp(endYear,endMonth,endDay,23,59)
timeRange = time > startTest and time < endTest ? true : false
///////// Plot Data
//plot(macd, style = plot.style_histogram)
//plot(macdSignalF*10000, style = plot.style_line, color=color.red)
//plot(macdSignalS*10000, style = plot.style_line, color=color.blue)
//plot(fastAverage, style = plot.style_line, color=color.red)
//plot(slowAverage, style = plot.style_line, color=color.blue)
///////// Calculation of the updated value
var x = 0.0
if strategy.opentrades>strategy.opentrades[1]
x := x + 1
else if strategy.opentrades==0
x := 0
y = x+1
///////// Calculation of reference price data
entryPrice = strategy.opentrades==0? 0 : strategy.opentrades.entry_price(0)
limitLong = strategy.position_avg_price * (1 + longProfitPerc)
limitShort = strategy.position_avg_price * (1 - shortProfitPerc)
SteplimitLong = entryPrice[0]*(1-StepAddPurchases*y/100)
SteplimitShort = entryPrice[0]*(1+StepAddPurchases*y/100)
///////// Conditions for a long
bool EntryLong = ta.crossover(macdSignalF, macdSignalS) and Buy and strategy.opentrades==0 and strategy.position_size==0
bool PurchasesLong = Buy and strategy.opentrades==x and strategy.position_size>0 and x<=VolumePurchases
bool CancelPurchasesLong = strategy.position_size==0 and strategy.opentrades==0
bool TPLong = strategy.position_size>0 and strategy.opentrades!=0
///////// Entry Long + add.purchases + cancel purchases + Take profit Long
switch
EntryLong => strategy.entry("Entry Long", strategy.long, qty = EnterVolume)
PurchasesLong => strategy.entry("PurchasesLong", strategy.long, qty = EnterVolume*math.pow(Martingale,y), limit = SteplimitLong)
CancelPurchasesLong => strategy.cancel("PurchasesLong")
switch
TPLong => strategy.exit("TPLong", qty_percent = 100, limit = limitLong)
///////// Conditions for a Short
bool EntryShort = ta.crossunder(macdSignalF, macdSignalS) and Sell and strategy.opentrades==0 and strategy.position_size==0
bool PurchasesShort = Sell and strategy.opentrades==x and strategy.position_size<0 and x<=VolumePurchases
bool CancelPurchasesShort = strategy.position_size==0 and strategy.opentrades==0
bool TPShort = strategy.position_size<0 and strategy.opentrades!=0
///////// Entry Short + add.purchases + cancel purchases + Take profit Short
switch
EntryShort => strategy.entry("Entry Short", strategy.short, qty = EnterVolume)
PurchasesShort => strategy.entry("PurchasesShort", strategy.short, qty = EnterVolume*math.pow(Martingale,y), limit = SteplimitShort)
CancelPurchasesShort => strategy.cancel("PurchasesShort")
switch
TPShort => strategy.exit("TPShort", qty_percent = 100, limit = limitShort)
/////////Calculation of conditions and reference data for level drawing
InTradeLong = strategy.position_size<0
InTradeShort = strategy.position_size>0
PickInLong = strategy.opentrades.entry_price(0)*(1-StepAddPurchases*y/100)
PickInShort = strategy.opentrades.entry_price(0)*(1+StepAddPurchases*y/100)
/////////Displaying the level of Take Profit
plot(InTradeLong ? na : limitLong, color=color.new(#00d146, 0), style=plot.style_linebr, linewidth=1)
plot(InTradeShort ? na : limitShort, color=color.new(#00d146, 0), style=plot.style_linebr, linewidth=1)
/////////Displaying the level of add.purchases
plot(InTradeLong ? na : PickInLong, color=color.white, style=plot.style_linebr, linewidth=1)
plot(InTradeShort ? na : PickInShort, color=color.white, style=plot.style_linebr, linewidth=1)