یہ حکمت عملی Ichimoku Clouds اشارے پر مبنی ہے ، جو تجارتی سگنل کی نشاندہی اور تجارت کو خودکار کرنے کے لئے ٹینکن لائن ، کیجون لائن ، لیڈنگ لائن اور کلاؤڈ چارٹس کو جوڑتا ہے۔ یہ معیاری Ichimoku ماڈل اور ٹریڈنگ ویو حکمت عملی ٹیسٹر کی حسب ضرورت فعالیت دونوں کو مربوط کرتا ہے ، جو ابتدائی اور تجربہ کار تاجروں دونوں کے لئے موزوں ہے۔
یہ حکمت عملی معیاری Ichimoku ماڈل کا استعمال کرتی ہے ، جس میں Tenkan لائن ، Kijun لائن ، لیڈنگ لائن ، Senkou A اور Senkou B شامل ہیں۔ یہ ان لائنوں کے مابین کراس کا موازنہ کرکے تجارتی سگنلز کی نشاندہی کرتی ہے۔
خاص طور پر ، جب ٹینکن لائن کیجون لائن سے اوپر عبور کرتی ہے تو ایک تیزی کا اشارہ پیدا ہوتا ہے ، اور جب ٹینکن نیچے عبور کرتا ہے تو ایک bearish اشارہ پیدا ہوتا ہے۔ اس کے علاوہ ، بادل چارٹ میں عبور کرنے والی ٹینکن لائن کی نسبتا position پوزیشن کی جانچ پڑتال کی جاتی ہے تاکہ سگنلز کو مضبوط ، غیر جانبدار یا کمزور قرار دیا جاسکے۔ مثال کے طور پر ، اگر ٹینکن کراس کے دوران دونوں سینکو لائنوں سے اوپر ہے تو ، یہ ایک مضبوط تیزی کا اشارہ ہے۔
یہ حکمت عملی صارفین کے لئے وسیع پیمانے پر حسب ضرورت پیرامیٹرز فراہم کرتی ہے تاکہ وہ آزادانہ طور پر انٹری اور آؤٹ پٹ سگنل کو اپنے تجارتی نظام کی تعمیر کے لئے جوڑ سکیں۔
تکنیکی تجزیہ کے اوزار کی ایک نئی نسل کے طور پر ، Ichimoku ، ٹریڈنگ ویو
/*backtest start: 2023-01-25 00:00:00 end: 2024-01-31 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 // ----------------------------------------------------------------------------- // Copyright © 2024 Skyrex, LLC. All rights reserved. // ----------------------------------------------------------------------------- // Version: v2.1 // Release: Jan 22, 2024 strategy(title = "Advanced Ichimoku Clouds Strategy Long and Short", shorttitle = "Ichimoku Strategy Long and Short", overlay = true, format = format.inherit, pyramiding = 1, calc_on_order_fills = false, calc_on_every_tick = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 10000, currency = currency.NONE, commission_type = strategy.commission.percent, commission_value = 0.1, slippage = 5) // Trading bot settings sourceUuid = input.string(title = "sourceUuid:", defval = "yourBotSourceUuid", group = "Trading Bot Settings") secretToken = input.string(title = "secretToken:", defval = "yourBotSecretToken", group = "Trading Bot Settings") // Trading Period Settings lookBackPeriodStart = input(title = "Trade Start Date/Time", defval = timestamp('2023-01-01T00:00:00'), group = "Trading Period Settings") lookBackPeriodStop = input(title = "Trade Stop Date/Time", defval = timestamp('2025-01-01T00:00:00'), group = "Trading Period Settings") // Trading Mode settings tradingMode = input.string("Long", "Trading Mode", options = ["Long", "Short"], group = "Trading Mode Settings") // Long Mode Signal Options entrySignalOptionsLong = input.string("Bullish All", "Select Entry Signal (Long)", options = ["None", "Bullish Strong", "Bullish Neutral", "Bullish Weak", "Bullish Strong and Neutral", "Bullish Neutral and Weak", "Bullish Strong and Weak", "Bullish All"], group = "Long Mode Signals - set up if Trading Mode: Long") exitSignalOptionsLong = input.string("Bearish Weak", "Select Exit Signal (Long)", options = ["None", "Bearish Strong", "Bearish Neutral", "Bearish Weak", "Bearish Strong and Neutral", "Bearish Neutral and Weak", "Bearish Strong and Weak", "Bearish All"], group = "Long Mode Signals - set up if Trading Mode: Long") // Short Mode Signal Options entrySignalOptionsShort = input.string("None", "Select Entry Signal (Short)", options = ["None", "Bearish Strong", "Bearish Neutral", "Bearish Weak", "Bearish Strong and Neutral", "Bearish Neutral and Weak", "Bearish Strong and Weak", "Bearish All"], group = "Short Mode Signals - set up if Trading Mode: Short") exitSignalOptionsShort = input.string("None", "Select Exit Signal (Short)", options = ["None", "Bullish Strong", "Bullish Neutral", "Bullish Weak", "Bullish Strong and Neutral", "Bullish Neutral and Weak", "Bullish Strong and Weak", "Bullish All"], group = "Short Mode Signals - set up if Trading Mode: Short") // Risk Management Settings takeProfitPct = input.float(0, "Take Profit, % (0 - disabled)", minval = 0, step = 0.1, group = "Risk Management") stopLossPct = input.float(0, "Stop Loss, % (0 - disabled)", minval = 0, step = 0.1, group = "Risk Management") // Indicator Settings tenkanPeriods = input.int(9, "Tenkan", minval=1, group="Indicator Settings") kijunPeriods = input.int(26, "Kijun", minval=1, group="Indicator Settings") chikouPeriods = input.int(52, "Chikou", minval=1, group="Indicator Settings") displacement = input.int(26, "Offset", minval=1, group="Indicator Settings") // Display Settings showTenkan = input(false, "Show Tenkan Line", group = "Display Settings") showKijun = input(false, "Show Kijun Line", group = "Display Settings") showSenkouA = input(true, "Show Senkou A Line", group = "Display Settings") showSenkouB = input(true, "Show Senkou B Line", group = "Display Settings") showChikou = input(false, "Show Chikou Line", group = "Display Settings") // Function to convert percentage to price points based on entry price pctToPoints(pct) => strategy.position_avg_price * pct / 100 // Colors and Transparency Level transparencyLevel = 90 colorGreen = color.new(#36a336, 23) colorRed = color.new(#d82727, 47) colorTenkanViolet = color.new(#9400D3, 0) colorKijun = color.new(#fdd8a0, 0) colorLime = color.new(#006400, 0) colorMaroon = color.new(#8b0000, 0) colorGreenTransparent = color.new(colorGreen, transparencyLevel) colorRedTransparent = color.new(colorRed, transparencyLevel) // Ichimoku Calculations donchian(len) => math.avg(ta.lowest(len), ta.highest(len)) tenkan = donchian(tenkanPeriods) kijun = donchian(kijunPeriods) senkouA = math.avg(tenkan, kijun) senkouB = donchian(chikouPeriods) displacedSenkouA = senkouA[displacement - 1] displacedSenkouB = senkouB[displacement - 1] // Plot Ichimoku Lines plot(showTenkan ? tenkan : na, color=colorTenkanViolet, title = "Tenkan", linewidth=2) plot(showKijun ? kijun : na, color=colorKijun, title = "Kijun", linewidth=2) plot(showChikou ? close : na, offset=-displacement, color = colorLime, title = "Chikou", linewidth=1) p1 = plot(showSenkouA ? senkouA : na, offset=displacement - 1, color=colorGreen, title = "Senkou A", linewidth=2) p2 = plot(showSenkouB ? senkouB : na, offset=displacement - 1, color=colorRed, title = "Senkou B", linewidth=2) fill(p1, p2, color=senkouA > senkouB ? colorGreenTransparent : colorRedTransparent) // Signal Calculations bullishSignal = ta.crossover(tenkan, kijun) bearishSignal = ta.crossunder(tenkan, kijun) bullishSignalValues = bullishSignal ? tenkan : na bearishSignalValues = bearishSignal ? tenkan : na strongBullishSignal = bullishSignalValues > displacedSenkouA and bullishSignalValues > displacedSenkouB neutralBullishSignal = ((bullishSignalValues > displacedSenkouA and bullishSignalValues < displacedSenkouB) or (bullishSignalValues < displacedSenkouA and bullishSignalValues > displacedSenkouB)) weakBullishSignal = bullishSignalValues < displacedSenkouA and bullishSignalValues < displacedSenkouB strongBearishSignal = bearishSignalValues < displacedSenkouA and bearishSignalValues < displacedSenkouB neutralBearishSignal = ((bearishSignalValues > displacedSenkouA and bearishSignalValues < displacedSenkouB) or (bearishSignalValues < displacedSenkouA and bearishSignalValues > displacedSenkouB)) weakBearishSignal = bearishSignalValues > displacedSenkouA and bearishSignalValues > displacedSenkouB // Functions to determine entry and exit conditions for Long and Short isEntrySignalLong() => entryCondition = false if entrySignalOptionsLong == "None" entryCondition := false else if entrySignalOptionsLong == "Bullish Strong" entryCondition := strongBullishSignal else if entrySignalOptionsLong == "Bullish Neutral" entryCondition := neutralBullishSignal else if entrySignalOptionsLong == "Bullish Weak" entryCondition := weakBullishSignal else if entrySignalOptionsLong == "Bullish Strong and Neutral" entryCondition := strongBullishSignal or neutralBullishSignal else if entrySignalOptionsLong == "Bullish Neutral and Weak" entryCondition := neutralBullishSignal or weakBullishSignal else if entrySignalOptionsLong == "Bullish Strong and Weak" entryCondition := strongBullishSignal or weakBullishSignal else if entrySignalOptionsLong == "Bullish All" entryCondition := strongBullishSignal or neutralBullishSignal or weakBullishSignal entryCondition isExitSignalLong() => exitCondition = false if exitSignalOptionsLong == "None" exitCondition := false else if exitSignalOptionsLong == "Bearish Strong" exitCondition := strongBearishSignal else if exitSignalOptionsLong == "Bearish Neutral" exitCondition := neutralBearishSignal else if exitSignalOptionsLong == "Bearish Weak" exitCondition := weakBearishSignal else if exitSignalOptionsLong == "Bearish Strong and Neutral" exitCondition := strongBearishSignal or neutralBearishSignal else if exitSignalOptionsLong == "Bearish Neutral and Weak" exitCondition := neutralBearishSignal or weakBearishSignal else if exitSignalOptionsLong == "Bearish Strong and Weak" exitCondition := strongBearishSignal or weakBearishSignal else if exitSignalOptionsLong == "Bearish All" exitCondition := strongBearishSignal or neutralBearishSignal or weakBearishSignal exitCondition isEntrySignalShort() => entryCondition = false if entrySignalOptionsShort == "None" entryCondition := false else if entrySignalOptionsShort == "Bearish Strong" entryCondition := strongBearishSignal else if entrySignalOptionsShort == "Bearish Neutral" entryCondition := neutralBearishSignal else if entrySignalOptionsShort == "Bearish Weak" entryCondition := weakBearishSignal else if entrySignalOptionsShort == "Bearish Strong and Neutral" entryCondition := strongBearishSignal or neutralBearishSignal else if entrySignalOptionsShort == "Bearish Neutral and Weak" entryCondition := neutralBearishSignal or weakBearishSignal else if entrySignalOptionsShort == "Bearish Strong and Weak" entryCondition := strongBearishSignal or weakBearishSignal else if entrySignalOptionsShort == "Bearish All" entryCondition := strongBearishSignal or neutralBearishSignal or weakBearishSignal entryCondition isExitSignalShort() => exitCondition = false if exitSignalOptionsShort == "None" exitCondition := false else if exitSignalOptionsShort == "Bullish Strong" exitCondition := strongBullishSignal else if exitSignalOptionsShort == "Bullish Neutral" exitCondition := neutralBullishSignal else if exitSignalOptionsShort == "Bullish Weak" exitCondition := weakBullishSignal else if exitSignalOptionsShort == "Bullish Strong and Neutral" exitCondition := strongBullishSignal or neutralBullishSignal else if exitSignalOptionsShort == "Bullish Neutral and Weak" exitCondition := neutralBullishSignal or weakBullishSignal else if exitSignalOptionsShort == "Bullish Strong and Weak" exitCondition := strongBullishSignal or weakBullishSignal else if exitSignalOptionsShort == "Bullish All" exitCondition := strongBullishSignal or neutralBullishSignal or weakBullishSignal exitCondition // Strategy logic for entries and exits if true if tradingMode == "Long" takeProfitLevelLong = strategy.position_avg_price * (1 + takeProfitPct / 100) stopLossLevelLong = strategy.position_avg_price * (1 - stopLossPct / 100) if isEntrySignalLong() strategy.entry(id = "entry1", direction = strategy.long, alert_message = '{\n"base": "' + syminfo.basecurrency + '",\n"quote": "' + syminfo.currency + '",\n"position": "entry1",\n"price": "' + str.tostring(close) + '",\n"sourceUuid": "' + sourceUuid + '",\n"secretToken": "' + secretToken + '"\n}') if (takeProfitPct > 0 and close >= takeProfitLevelLong) or (stopLossPct > 0 and close <= stopLossLevelLong) or (exitSignalOptionsLong != "None" and isExitSignalLong()) strategy.close(id = "entry1", alert_message = '{\n"base": "' + syminfo.basecurrency + '",\n"quote": "' + syminfo.currency + '",\n"position": "close",\n"price": "' + str.tostring(close) + '",\n"sourceUuid": "' + sourceUuid + '",\n"secretToken": "' + secretToken + '"\n}') else if tradingMode == "Short" takeProfitLevelShort = strategy.position_avg_price * (1 - takeProfitPct / 100) stopLossLevelShort = strategy.position_avg_price * (1 + stopLossPct / 100) if isEntrySignalShort() strategy.entry(id = "entry1", direction = strategy.short, alert_message = '{\n"base": "' + syminfo.basecurrency + '",\n"quote": "' + syminfo.currency + '",\n"position": "entry1",\n"price": "' + str.tostring(close) + '",\n"sourceUuid": "' + sourceUuid + '",\n"secretToken": "' + secretToken + '"\n}') if (takeProfitPct > 0 and close <= takeProfitLevelShort) or (stopLossPct > 0 and close >= stopLossLevelShort) or (exitSignalOptionsShort != "None" and isExitSignalShort()) strategy.close(id = "entry1", alert_message = '{\n"base": "' + syminfo.basecurrency + '",\n"quote": "' + syminfo.currency + '",\n"position": "close",\n"price": "' + str.tostring(close) + '",\n"sourceUuid": "' + sourceUuid + '",\n"secretToken": "' + secretToken + '"\n}')