ہیمر اینڈ شوٹنگ اسٹار پیٹرن ٹریڈنگ حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-09-28 11:11:35
ٹیگز:

جائزہ

یہ تجارتی حکمت عملی مستقبل کی قیمت کی نقل و حرکت کی پیش گوئی کے لئے موم بتی کے نمونوں کا استعمال کرتی ہے۔ ہتھوڑے اور فٹنگ اسٹار سادہ لیکن طاقتور نمونہ ہیں جو رجحان کی تبدیلیوں کو پکڑنے کے لئے وسیع پیمانے پر استعمال ہوتے ہیں۔ یہ حکمت عملی مارکیٹ میں موڑ کے مقامات پر فائدہ اٹھانے کے لئے ان دو نمونوں کی نشاندہی کرتی ہے۔

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

یہ حکمت عملی مندرجہ ذیل بنیادی اصولوں پر مبنی ہے:

  1. اے ٹی آر اشارے سے غیر رجحان سازی والے بازاروں کو فلٹر کیا جاتا ہے تاکہ موم بتی کا سائز اے ٹی آر اقدار کی ایک مقررہ حد کے اندر ہو۔

  2. 33.3٪ فبونیکی ریٹریکشن کی سطح اس نقطہ کی نشاندہی کرتی ہے جو ایک ہتھوڑا (اوپر بند ہوتا ہے) کو ایک فٹنگ اسٹار (نیچے بند ہوتا ہے) سے ممتاز کرتا ہے۔

  3. اضافی تصدیق کے لئے نمونہ کو مکمل کرنے کی ضرورت ہوتی ہے (کھولنے سے اوپر / نیچے بند ہونے کی قیمت) ایک غیر تصدیق شدہ بار پر.

  4. سٹاپ نقصان اور منافع لینے کی سطح ATR اور اندراج کے وقت خطرہ / منافع کا تناسب کی بنیاد پر مقرر کی جاتی ہے۔

اے ٹی آر، فبونیکی، اور پیٹرن کی شناخت کو یکجا کرکے، حکمت عملی رجحان ٹریڈنگ کے عام اصولوں پر عمل کرتی ہے.

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

اس حکمت عملی کے اہم فوائد یہ ہیں:

  1. سادہ منطق اسے سمجھنے اور لاگو کرنے میں آسان بناتی ہے۔

  2. مختصر مدت کے اندرونی دن کے پیٹرن پر ٹریڈنگ لچکدار برقرار رکھنے کی مدت کی اجازت دیتا ہے.

  3. اے ٹی آر فلٹرز اتار چڑھاؤ والی منڈیوں میں خطرے کو کنٹرول کرنے میں مدد کرتے ہیں۔ پیرامیٹرز کو ہر آلہ کے لئے الگ سے بہتر بنایا جاسکتا ہے۔

  4. ذہین سٹاپ نقصان اور منافع لینے کے پوائنٹس ایک خطرے / اجر تناسب کی بنیاد پر مؤثر طریقے سے خطرے کو کنٹرول.

  5. خودکار تجارتی سگنل اندراج اور پوزیشن مینجمنٹ کو آسان بناتے ہیں۔

  6. بہت سے کرنسی کے جوڑوں پر قابل اطلاق کراس مارکیٹ مضبوطی کا مظاہرہ کرتی ہے۔

خطرے کا تجزیہ

اس کے علاوہ کئی خطرات پر بھی غور کیا جانا چاہئے:

  1. پیٹرن ٹریڈنگ میں جھوٹے سگنل کا امکان ہے جس پر اندھا پن سے اعتماد نہیں کیا جانا چاہئے۔

  2. تجارت کے اخراجات جیسے کمیشن کے لیے حساب نہیں دیا جاتا، اصل منافع میں کھاتے ہیں.

  3. مختصر مدت کے اندرونی دن کی تجارت سے تجارتی تعدد میں اضافہ ہونے سے زیادہ سلائپ لاگت آسکتی ہے۔

  4. بہتر ATR پیرامیٹرز تاریخی اعداد و شمار پر انحصار کرتے ہیں اور ہمیشہ قابل اطلاق نہیں رہ سکتے ہیں۔

  5. آٹو ٹریڈنگ کے خطرات آرڈر پر عملدرآمد میں ناکام رہے ہیں اور دوبارہ کوشش کرنے کا طریقہ کار لاگو کرنا چاہئے۔

  6. ناقص سٹاپ نقصان اور منافع لینے کی ترتیبات سے زیادہ تجارت یا میز پر پیسہ چھوڑنے کا سبب بن سکتا ہے۔

اصلاح کے مواقع

حکمت عملی کو ممکنہ طور پر بہتر بنانے کے کچھ طریقے:

  1. اضافی فلٹرز جیسے حجم پیٹرن کی تاثیر کو بڑھانے کے لئے.

  2. سٹاپ اور ہدف کی ترتیب میں کمیشن شامل کریں.

  3. متحرک طور پر اے ٹی آر پیرامیٹرز کو بہتر بنائیں تاکہ وہ بدلتے ہوئے مارکیٹ کے حالات کے مطابق ہوں۔

  4. ہر کرنسی کے جوڑے کے لئے انفرادی طور پر پیرامیٹرز کی کارکردگی کا اندازہ کریں.

  5. ناکام آرڈر پر عملدرآمد کے خطرے کو کم کرنے کے لئے آٹو تلاش کے طریقہ کار کو شامل کریں.

  6. درست نمونوں کی بہتر شناخت کے لیے مشین لرننگ ماڈلز کا استعمال کریں۔

  7. مزید منافع میں مقفل کرنے کے لئے ایک ٹریلنگ سٹاپ میکانزم متعارف کروانا.

نتیجہ

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


/*backtest
start: 2023-08-28 00:00:00
end: 2023-09-27 00:00:00
period: 2h
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/
// © ZenAndTheArtOfTrading / PineScriptMastery
// Last Updated: 28th April, 2021
// @version=4
strategy("Hammers & Stars Strategy [v1.0]", shorttitle="HSS[v1.0]", overlay=true)

// Get user input
atrMinFilterSize = input(title=">= ATR Filter", type=input.float, defval=0.0, minval=0.0, tooltip="Minimum size of entry candle compared to ATR", group="Strategy Settings")
atrMaxFilterSize = input(title="<= ATR Filter", type=input.float, defval=3.0, minval=0.0, tooltip="Maximum size of entry candle compared to ATR", group="Strategy Settings")
stopMultiplier   = input(title="Stop Loss ATR", type=input.float, defval=1.0, tooltip="Stop loss multiplier (x ATR)", group="Strategy Settings")
rr               = input(title="R:R", type=input.float, defval=1.0, tooltip="Risk:Reward profile", group="Strategy Settings")
fibLevel         = input(title="Fib Level", type=input.float, defval=0.333, tooltip="Used to calculate upper/lower third of candle. (For example, setting it to 0.5 will mean hammers must close >= 50% mark of the total candle size)", group="Strategy Settings")
i_startTime      = input(title="Start Date Filter", defval=timestamp("01 Jan 2000 13:30 +0000"), type=input.time, tooltip="Date & time to begin trading from", group="Strategy Settings")
i_endTime        = input(title="End Date Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), type=input.time, tooltip="Date & time to stop trading", group="Strategy Settings")
oandaDemo        = input(title="Use Oanda Demo?", type=input.bool, defval=false, tooltip="If turned on then oandapractice broker prefix will be used for AutoView alerts (demo account). If turned off then live account will be used", group="AutoView Oanda Settings")
limitOrder       = input(title="Use Limit Order?", type=input.bool, defval=true, tooltip="If turned on then AutoView will use limit orders. If turned off then market orders will be used", group="AutoView Oanda Settings")
gtdOrder         = input(title="Days To Leave Limit Order", type=input.integer, minval=0, defval=2, tooltip="This is your GTD setting (good til day)", group="AutoView Oanda Settings")
accountBalance   = input(title="Account Balance", type=input.float, defval=1000.0, step=100, tooltip="Your account balance (used for calculating position size)", group="AutoView Oanda Settings")
accountCurrency  = input(title="Account Currency", type=input.string, defval="USD", options=["AUD", "CAD", "CHF", "EUR", "GBP", "JPY", "NZD", "USD"], tooltip="Your account balance currency (used for calculating position size)", group="AutoView Oanda Settings")
riskPerTrade     = input(title="Risk Per Trade %", type=input.float, defval=2.0, step=0.5, tooltip="Your risk per trade as a % of your account balance", group="AutoView Oanda Settings")

// Set up AutoView broker prefix
var broker = oandaDemo ? "oandapractice" : "oanda"

// See if this bar's time happened within date filter
dateFilter = true

// Get ATR
atr = atr(14)

// Check ATR filter
atrMinFilter = abs(high - low) >= (atrMinFilterSize * atr) or atrMinFilterSize == 0.0
atrMaxFilter = abs(high - low) <= (atrMaxFilterSize * atr) or atrMaxFilterSize == 0.0
atrFilter = atrMinFilter and atrMaxFilter

// Calculate 33.3% fibonacci level for current candle
bullFib = (low - high) * fibLevel + high
bearFib = (high - low) * fibLevel + low

// Determine which price source closes or opens highest/lowest
lowestBody = close < open ? close : open
highestBody = close > open ? close : open

// Determine if we have a valid setup
validHammer = lowestBody >= bullFib and atrFilter and close != open and not na(atr)
validStar = highestBody <= bearFib and atrFilter and close != open and not na(atr)

// Check if we have confirmation for our setup
validLong = validHammer and strategy.position_size == 0 and dateFilter and barstate.isconfirmed
validShort = validStar and strategy.position_size == 0 and dateFilter and barstate.isconfirmed

//------------- DETERMINE POSITION SIZE -------------//
// Get account inputs
var tradePositionSize = 0.0
var pair = syminfo.basecurrency + "/" + syminfo.currency

// Check if our account currency is the same as the base or quote currency (for risk $ conversion purposes)
accountSameAsCounterCurrency = accountCurrency == syminfo.currency
accountSameAsBaseCurrency = accountCurrency == syminfo.basecurrency

// Check if our account currency is neither the base or quote currency (for risk $ conversion purposes)
accountNeitherCurrency = not accountSameAsCounterCurrency and not accountSameAsBaseCurrency

// Get currency conversion rates if applicable
conversionCurrencyPair = accountSameAsCounterCurrency ? syminfo.tickerid : accountNeitherCurrency ? accountCurrency + syminfo.currency : accountCurrency + syminfo.currency
conversionCurrencyRate = security(symbol=syminfo.type == "forex" ? "BTC_USDT:swap" : "BTC_USDT:swap", resolution="D", expression=close)

// Calculate position size
getPositionSize(stopLossSizePoints) =>
    riskAmount = (accountBalance * (riskPerTrade / 100)) * (accountSameAsBaseCurrency or accountNeitherCurrency ? conversionCurrencyRate : 1.0)
    riskPerPoint = (stopLossSizePoints * syminfo.pointvalue)
    positionSize = (riskAmount / riskPerPoint) / syminfo.mintick
    round(positionSize)
    
// Custom function to convert pips into whole numbers
toWhole(number) =>
    return = atr(14) < 1.0 ? (number / syminfo.mintick) / (10 / syminfo.pointvalue) : number
    return := atr(14) >= 1.0 and atr(14) < 100.0 and syminfo.currency == "JPY" ? return * 100 : return
//------------- END POSITION SIZE CODE -------------//

// Calculate our stop distance & size for the current bar
stopSize = atr * stopMultiplier
longStopPrice = low < low[1] ? low - stopSize : low[1] - stopSize
longStopDistance = close - longStopPrice
longTargetPrice = close + (longStopDistance * rr)
shortStopPrice = high > high[1] ? high + stopSize : high[1] + stopSize
shortStopDistance = shortStopPrice - close
shortTargetPrice = close - (shortStopDistance * rr)

// Save trade stop & target & position size if a valid setup is detected
var tradeStopPrice = 0.0
var tradeTargetPrice = 0.0

// Set up our GTD (good-til-day) order info
gtdTime = time + (gtdOrder * 1440 * 60 * 1000) // 86,400,000ms per day
gtdYear = year(gtdTime)
gtdMonth = month(gtdTime)
gtdDay = dayofmonth(gtdTime)
gtdString = " dt=" + tostring(gtdYear) + "-" + tostring(gtdMonth) + "-" + tostring(gtdDay)

// Detect valid long setups & trigger alert
if validLong
    tradeStopPrice := longStopPrice
    tradeTargetPrice := longTargetPrice
    tradePositionSize := getPositionSize(toWhole(longStopDistance) * 10)
    // Trigger AutoView long alert
    alert(message="e=" + broker + " b=long q="
     + tostring(tradePositionSize) 
     + " s=" + pair
     + " t=" + (limitOrder ? "limit fp=" + tostring(close) : "market")
     + " fsl=" + tostring(tradeStopPrice)
     + " ftp=" + tostring(tradeTargetPrice)
     + (gtdOrder != 0 and limitOrder ? gtdString : ""), 
     freq=alert.freq_once_per_bar_close)
   
// Detect valid short setups & trigger alert
if validShort
    tradeStopPrice := shortStopPrice
    tradeTargetPrice := shortTargetPrice
    tradePositionSize := getPositionSize(toWhole(shortStopDistance) * 10)
    // Trigger AutoView short alert
    alert(message="e=" + broker + " b=short q="
     + tostring(tradePositionSize)
     + " s=" + pair
     + " t=" + (limitOrder ? "limit fp=" + tostring(close) : "market")
     + " fsl=" + tostring(tradeStopPrice)
     + " ftp=" + tostring(tradeTargetPrice)
     + (gtdOrder != 0 and limitOrder ? gtdString : ""),
     freq=alert.freq_once_per_bar_close)

// Enter trades whenever a valid setup is detected
strategy.entry(id="Long", long=strategy.long, when=validLong)
strategy.entry(id="Short", long=strategy.short, when=validShort)

// Exit trades whenever our stop or target is hit
strategy.exit(id="Long Exit", from_entry="Long", limit=tradeTargetPrice, stop=tradeStopPrice, when=strategy.position_size > 0)
strategy.exit(id="Short Exit", from_entry="Short", limit=tradeTargetPrice, stop=tradeStopPrice, when=strategy.position_size < 0)

// Draw trade data
plot(strategy.position_size != 0 or validLong or validShort ? tradeStopPrice : na, title="Trade Stop Price", color=color.red, style=plot.style_linebr, transp=0)
plot(strategy.position_size != 0 or validLong or validShort ? tradeTargetPrice : na, title="Trade Target Price", color=color.green, style=plot.style_linebr, transp=0)
plot(strategy.position_size != 0 or validLong or validShort ? tradePositionSize : na, color=color.purple, transp=100, title="AutoView Position Size")

// Draw price action setup arrows
plotshape(validLong ? 1 : na, style=shape.triangleup, location=location.belowbar, color=color.green, title="Bullish Setup")
plotshape(validShort ? 1 : na, style=shape.triangledown, location=location.abovebar, color=color.red, title="Bearish Setup")

مزید