यह रणनीति K-लाइन फॉर्मेशन की पहचान करके मूल्य फॉर्मेशन ट्रेडिंग को लागू करती है। यह हाल ही में दिखाई देने वाले हुक लाइन फॉर्मेशन की तलाश करती है, जो फॉर्मेशन सिग्नल के आधार पर अधिक या कम हो जाती है। व्यापारी स्टॉप-लॉस के गुणक सेट कर सकते हैं। ट्रेंड-ट्रैक स्टॉप-लॉस अधिक मुनाफे को लॉक कर सकते हैं।
पहचानें कि क्या वर्तमान K-लाइन एक लटकन रेखा की आकृति आवश्यकताओं को पूरा करती हैः इकाई निचले आधे हिस्से में है, और समापन मूल्य और उद्घाटन मूल्य निचले बिंदु के करीब है। इसके विपरीत, बहु-संकेत करें, इकाई ऊपरी आधे हिस्से में है, और समापन उच्च बिंदु के करीब है। अंतिम ट्रेडिंग सिग्नल के लिए K-लाइन की तलाश करें, और उस K-लाइन इकाई की ऊंचाई की गणना करें। स्टॉप को उस ऊंचाई के एन गुना सेट करें, और स्टॉप को उस ऊंचाई के M गुना करें (M N से कम है) ।
प्रवेश के बाद प्रवृत्ति का पालन करना शुरू करें, स्टॉप लाइन को धीरे-धीरे लाभ की दिशा में स्थानांतरित करें, और स्टॉप लाइन को तब तक अपरिवर्तित रखें जब तक कि स्टॉप या स्टॉप लॉस ट्रिगर न हो जाए।
जोखिम को कम करने के लिए, पैरामीटर और सहायक संकेतकों को अनुकूलित करें।
इस रणनीति का उपयोग करने के लिए व्यापार के अवसरों को पहचानने के रूप में पहचान, और अच्छी तरह से प्रदर्शन की समीक्षा. उचित रोक और हानि की स्थापना, एक एकल व्यापार के जोखिम को नियंत्रित. पैरामीटर अनुकूलन आदि के माध्यम से आगे सुधार, एक सरल और व्यावहारिक व्यापार प्रणाली हो सकता है.
/*backtest
start: 2023-09-10 00:00:00
end: 2023-09-17 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
//
// Pinbar strategy script by samgozman (https://github.com/samgozman)
//
// Detailed instruction how to use this script: https://github.com/samgozman/pinbar-strategy-tradingview
//
// If you liked the script and want to support me: https://paypal.me/sgozman
//
// ++++++++++ Warning: The script is provided for educational purposes only. ++++++++++ //
strategy('Pinbar strategy', default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=10000)
profitMultiplier = input.float(2.0, "Profit multiplier", minval=0.1, step=0.1, group="Profit options", tooltip="X times signal candle size from high")
lossMultiplier = input.float(1.0, "Loss multiplier", minval=0.1, step=0.1, group="Profit options", tooltip="X times signal candle size from low")
isTrailingStop = input.bool(true, "Use trailing stops?", group="Trading options", tooltip="Highly recommended!")
isCloseOnOppositSignal = input.bool(false, "Close trade if opposit signal occures?", group="Trading options", tooltip="Close long on short signal")
isLongEligible = input.bool(true, "Enter long trades?", group="Trading options")
isShortEligible = input.bool(true, "Enter short trades?", group="Trading options")
useDateFilter = input.bool(true, title="Begin Backtest at Start Date", group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2021"), title="Start Date", group="Backtest Time Period")
// Predefined time trading zone for back testing
inTradeWindow = true
// HELPER FUNCTIONS //
// calculate candle size for N bars back. Use 0 for current
calcCandle(int periods) =>
math.abs(high[periods] - low[periods])
// if body is below 50% and close/open below 30%
isBearishPinbar(float candle) =>
lower30 = low + candle * 0.30
bottomHalf1 = close < hl2
bottomHalf2 = open < hl2
lowerRegion1 = close < lower30
lowerRegion2 = open < lower30
con1 = bottomHalf1 and bottomHalf2
con2 = lowerRegion1 and lowerRegion2
con3 = high > high[1]
con1 and con2 and con3
// if body is above 50% and close/open above 30%
isBullishPinbar(float candle) =>
upper30 = high - candle * 0.30
topHalf1 = close > hl2
topHalf2 = open > hl2
upperRegion1 = close > upper30
upperRegion2 = open > upper30
con1 = topHalf1 and topHalf2
con2 = upperRegion1 and upperRegion2
con3 = low < low[1]
con1 and con2 and con3
barsSinceLastEntry() =>
strategy.opentrades > 0 ? bar_index - strategy.opentrades.entry_bar_index(strategy.opentrades - 1) : na
// Calculate trading signals
currentCandle = calcCandle(0)
longSignal = isBullishPinbar(currentCandle) and inTradeWindow
shortSignal = isBearishPinbar(currentCandle) and inTradeWindow
// ENTER THE TRADE //
if longSignal and isLongEligible
strategy.entry("buy", strategy.long, when = strategy.position_size == 0)
if shortSignal and isShortEligible
strategy.entry("sell", strategy.short, when = strategy.position_size == 0)
// CALCULATE STOPS //
barsSinceEntry = barsSinceLastEntry()
candleFromEntry = calcCandle(barsSinceEntry)
// long
long_take_limit = strategy.position_avg_price + (candleFromEntry*profitMultiplier)
long_target_percent_profit = long_take_limit / strategy.position_avg_price - 1
long_target_percent_loss = (long_target_percent_profit / profitMultiplier) * lossMultiplier
long_stop_limit = low[barsSinceEntry] * (1 - long_target_percent_loss)
//short
short_take_limit = strategy.position_avg_price - (candleFromEntry*profitMultiplier)
short_target_percent_profit = strategy.position_avg_price / short_take_limit - 1
short_target_percent_loss = (short_target_percent_profit / profitMultiplier) * lossMultiplier
short_stop_limit = high[barsSinceEntry] * (1 + short_target_percent_loss)
// EXIT THE TRADE //
if strategy.position_size > 0 or strategy.position_size < 0
if isTrailingStop
strategy.exit(id="exit", from_entry="buy", trail_price = long_take_limit, stop=long_stop_limit)
strategy.exit(id="exit", from_entry="sell", trail_price = short_take_limit, stop=short_stop_limit)
else
strategy.exit(id="exit", from_entry="buy", limit = long_take_limit, stop=long_stop_limit)
strategy.exit(id="exit", from_entry="sell", limit = short_take_limit, stop=short_stop_limit)
if isCloseOnOppositSignal
strategy.close("buy", when = shortSignal)
strategy.close("sell", when = longSignal)
// PLOT SIGNALS //
plotshape(longSignal, style=shape.arrowup, color=color.new(color.green, 0), size=size.large, location=location.belowbar)
plotshape(shortSignal, style=shape.arrowdown, color=color.new(color.red, 0), size=size.large, location=location.abovebar)