トレンドハンターw/MFマルチタイムフレームトレンド戦略は,複数のタイムフレームにおける複数の技術指標の包括的な分析に基づいたトレンドフォロー戦略である.この戦略は,イチモククラウド,移動平均値,スーパートレンド,ウェーブトレンド,マネーフローなどの要因を考慮し,厳格な条件を使用してエントリーポイントを決定し,市場の主要なトレンドを把握する.
この戦略の基本原則は,複数の時間枠における複数の技術指標の包括的な分析です.特に:
イチモク・クラウド:価格とクラウドの相対的位置,および移動平均値とクラウドの相対的位置を分析することで,現在の市場傾向が決定されます.価格がクラウド上にあり,移動平均値もクラウド上にあり,それは上昇傾向とみなされます.そうでなければ,それは下落傾向とみなされます.
スーパートレンド:価格とスーパートレンドの相対的な位置を分析することで,現在の市場傾向が確認されます.価格がスーパートレンドを超える場合,上昇傾向とみなされます.そうでなければ,下落傾向とみなされます.
WaveTrend: WaveTrend インジケーターの方向と位置を分析することで,現在の市場傾向が決定される.WaveTrendが上昇し,過剰購入ゾーンに達していない場合,上昇傾向とみなされ,WaveTrendが低下し,過剰販売ゾーンに達していない場合,下落傾向とみなされる.
マネリーフロー: マネリーフロー指標の状態を分析することで,現在の市場傾向が確認される. マネリーフローが正であるときは上昇傾向とみなされ,そうでなければ下落傾向とみなされる.
ロングポジションでは,価格がクラウド上にあり,移動平均がクラウド上にあり,スーパートレンドが上昇し,ウォーブトレンドが上昇し,オーバーボートゾーンではなく,マネーフローがポジティブである必要があります.ショートポジションでは逆です.複数のタイムフレームにわたる複数の指標に基づいた厳格なフィルタリングは,範囲限定市場での頻繁な取引を効果的に回避し,戦略の安定性と信頼性を向上させます.
複数の指標に基づく包括的な判断,高い信頼性: この戦略は,異なる市場状況下で互いを補完する複数の技術指標を包括的に考慮し,市場の動向を包括的に反映し,単一の指標で発生するエラーを回避します.
厳格なエントリー条件,頻繁な取引を避ける: 戦略は厳格なエントリー条件を設定し,ポジションに入る前に複数の指標を同時に満たすことを要求し,範囲限定市場での頻繁な取引を効果的に回避し,戦略の消耗を軽減します.
複数のタイムフレーム分析,大きなトレンドを把握する: 戦略は複数のタイムフレームを分析し,短期的な騒音による干渉を避け,市場の主要なトレンドをより広い視点から把握するのに役立ちます.
明確なストップ損失戦略,制御可能なリスク:この戦略は,ストップ損失条件としてスーパートレンドを使用する.市場のトレンドが変化すると,戦略は適時に損失を停止し,損失を許容範囲内に保持することができます.
ダイナミックな調整の欠如,市場の変化に対応する能力が限られている:この戦略のパラメータ設定は固定されており,市場の状況に応じてダイナミックに調整する能力がない.市場の状況が大幅に変化すると,戦略は失敗する可能性があります.
過度に厳しいエントリー条件は良い機会を逃す可能性があります. 戦略のエントリー条件は非常に厳しいので,頻繁な取引を避けることができるが,戦略がいくつかの良いエントリー機会を逃すこともあります.
極端な市場状況への適応性は不明: 戦略は通常の市場状況下でうまく機能しているが,急速で実質的な逆転などの極端な市場状況への適応性はまだ試験されていない.
比較的シンプルなストップ・ロスト戦略,最適化の余地:現在,戦略はストップ・ロスト条件としてスーパートレンドのみを使用している.これは単純で直接的ではあるが,リスクをよりよく制御するためにストップ・ロスト戦略にさらに最適化する余地がある.
市場状況判断を導入し,パラメータを動的に調整する: 変動指標などのいくつかの市場状況判断指標を導入することを検討し,異なる市場環境に適応するために,市場の状況の変化に応じて戦略パラメータを動的に調整する.
入場条件を最適化し,敏感性を向上させる: 信頼性を確保し,より多くの取引機会を把握しながら戦略の敏感性を向上させるために,より多くの確認指標を導入するなど,入場条件を最適化することを検討する.
極端な市場状況に対する対応措置を追加する: 急速で実質的な逆転などの極端な市場状況では,極端な市場状況下で戦略のリスクを軽減するために,ストップロスの強度を増加させるか,取引を停止するなどの特殊な対応措置を導入することを検討する.
ストップ・ロスの戦略を最適化し,リスク管理能力を向上させる: ストップ・ロスの時間ストップ・ロース,レンジ・ストップ・ロースなど,より多くのストップ・ロスの条件を導入することを検討する. また,リスクをよりよく制御するために,トライリング・ストップ・ロスのような動的ストップ・ロスの戦略を導入することを検討する.
トレンドハンターw/MFマルチタイムフレームトレンド戦略は,マルチインジケーター,マルチタイムフレーム分析に基づいたトレンドフォロー戦略である.この戦略は,イチモククラウド,移動平均値,スーパートレンド,ウェーブトレンド,マネーフローなどの要因を包括的に考慮し,厳格なエントリー条件設定,マルチタイムフレーム分析により,市場の主なトレンドを比較的信頼性を持って把握することができ,範囲限定市場での頻繁な取引を避け,良好な安定性と信頼性を持っています.
同時に,この戦略には,ダイナミックな調整能力の欠如,潜在的に過度に厳しいエントリー条件,極端な市場状況への適応性が不明,比較的単純なストップ・ロスの戦略などのいくつかの制限とリスクもあります.これらは将来的にこの戦略を最適化し改善できる分野です.
トレンドハンターw/MFマルチタイムフレームトレンド戦略は,良い潜在力を持つトレンドフォロー戦略である.この戦略を使用する際に,トレーダーはその原則,利点,リスクを完全に理解し,独自のリスク好みや取引スタイルに応じて必要な調整と最適化を行うべきである.同時に,彼らはまた,市場の状況の変化を注意深く監視し,市場の変化に適応するために戦略を適時調整すべきである.深い理解と慎重な使用に基づいてのみ,この戦略は潜在的な利点に充分活用し,トレーダーに安定した収益をもたらすことができる.
/*backtest start: 2024-02-01 00:00:00 end: 2024-02-29 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © godzcopilot / blockybears // Thanks to anthonyf50 for his MTF Ichimoku https://www.tradingview.com/script/Pw9cBFma/ // Thanks to KivancOzbilgic for his SuperTrend https://www.tradingview.com/script/r6dAP7yi/ // Thanks to ZenAndTheArtOfTrading / PineScriptMastery for their Higher Timeframe EMA https://www.tradingview.com/script/Vh3XG9sD-Higher-Timeframe-EMA/ // Thanks to LazyBear for WaveTrend Oscillator https://www.tradingview.com/script/2KE8wTuF-Indicator-WaveTrend-Oscillator-WT/ // Thanks to andreholanda73 for MFI+RSI Area https://www.tradingview.com/script/UlGZzUAr/ //@version=5 strategy("TrendHunter w/MF [Blocky]", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=80, initial_capital=1000, pyramiding=0) // ================ // Strategy Inputs // ================ // Defines user inputs for configuring the strategy. // Inputs for EMA len = input.int(title="EMA Length", defval=200, group ='== EMA ==') col = input.bool(title="Colour EMA", defval=true, group ='== EMA ==') // SuperTrend Periods = input(title='ATR: Period', defval=10, group = '== Supertrend ==', inline = 'atr') Multiplier = input.float(title='Mult', step=0.1, defval=3.0, group = '== Supertrend ==', inline = 'atr') Src = input.source(title='Src', defval=hl2, group = '== Supertrend ==', inline = 'atr') // Ichimoku conversionPeriods = input.int(9, minval=1, title='Conversion', group = '== Ichimoku ==', inline = 'ich1') basePeriods = input.int(26, minval=1, title='Base', group = '== Ichimoku ==', inline = 'ich1') laggingSpan2Periods = input.int(52, minval=1, title='Lagging', group = '== Ichimoku ==', inline = 'ich2') displacement = input.int(26, minval=1, title='Displacement', group = '== Ichimoku ==', inline = 'ich2') // Ichimoku Display Options isActiveConversion = input(false, 'Conversion', group = '== Ichimoku ==', inline = 'lines1') isActiveBase = input(false, 'Base', group = '== Ichimoku ==', inline = 'lines1') isActiveLagging = input(false, 'Lagging', group = '== Ichimoku ==', inline = 'lines1') isActiveCloud = input(true, 'Cloud', group = '== Ichimoku ==', inline = 'lines1') // Input for WaveTrend n1 = input(9, 'Channel Length', group = '== WaveTrend ==', inline = 'wt1') n2 = input(12, 'Average Length', group = '== WaveTrend ==', inline = 'wt1') obLevel = input(60, 'Over Bought', group = '== WaveTrend ==', inline = 'wt2') osLevel = input(-60, 'Over Sold', group = '== WaveTrend ==', inline = 'wt2') // Input for Money Flow rsiMFIperiod = input(60, 'Money Flow Length', group = '== Money Flow ==', inline = 'mf') rsiMFIMultiplier = input(190, 'RSI+MFI Area multiplier', group = '== Money Flow ==', inline = 'mf') MFRSIMA = input.string(defval='SMA', title='Money Flow MA Type', options=['RMA', 'SMA', 'EMA', 'WMA', 'VWMA'], group = '== Money Flow ==', inline = 'mf') // ================ // Strategy Options // ================ bTable = input.bool(false, title='Trade Table', group='== Strategy Options ==', tooltip = "Show table that shows current selected options and trade trade entry parameters") bLong = input.bool(true, title='Enter Longs', group='== Strategy Options ==', inline = 'LongShort') bShort = input.bool(true, title='Enter Shorts', group='== Strategy Options ==', inline = 'LongShort', tooltip = "Filter long / short trade signals") bPriceCloud = input.bool(true, title='Price outside cloud', group='== Strategy Options ==', inline='PriceCloud') priceActionOption = input.string(title="", defval="Close", options=["Close", "Candle Body", "Full Candle"], group = "== Strategy Options ==", inline='PriceCloud') bPriceEMA = input.bool(false, title='Price above/below EMA', group='== Strategy Options ==', inline='PriceEMA') priceEMAOption = input.string(title="", defval="Close", options=["Close", "Candle Body", "Full Candle"], group = "== Strategy Options ==", inline='PriceEMA') bSuper = input.bool(true, title='Supertrend transistions', group='== Strategy Options ==', tooltip = "Trade in direction of the supertrend transitions") bEMACloud1 = input.bool(true, title='EMA Outside Cloud', group='== Strategy Options ==', tooltip = "EMA must be outside the ichimoku cloud") bEMACloud2 = input.bool(false, title='EMA above/below Cloud', group='== Strategy Options ==', tooltip = "Longs when EMA above the cloud.\nShort when EMA below the cloud") bMFI = input.bool(false, title='Money Flow', group='== Strategy Options ==', tooltip = "Money Flow Green for Long\nMoney Flow Red for Short") bWT = input.bool(false, title='Wavetrend', group='== Strategy Options ==', inline = 'WT') bWTOB = input.bool(false, title='Overbought/sold', group='== Strategy Options ==', tooltip = "Longs when WT Rising\nShort when WT Falling\n\nRestrict entries if in overbough or oversold levels",inline = 'WT') bExitHTFTrail = input.bool(true, title='Super Trend Exits', group='== Strategy Options ==', inline = 'Exits') // =========================== // EMA Functions and Plotting // =========================== // Calculate EMA ema = ta.ema(close, len) emaSmooth = request.security(syminfo.tickerid, "", ema[barstate.isrealtime ? 1 : 0], gaps=barmerge.gaps_on)[barstate.isrealtime ? 0 : 1] // Draw EMA plot(emaSmooth, color=col ? (close > emaSmooth ? color.rgb(76, 163, 175) : color.rgb(6, 23, 173)) : color.black, linewidth=2, title="HTF EMA") // ================================== // Supertrend Functions and Plotting // ================================== // Function to calculate SuperTrend calcSuperTrend(src, atrPeriods, multiplier) => atr = ta.atr(atrPeriods) up = src - multiplier * atr up1 = nz(up[1], up) up := close[1] > up1 ? math.max(up, up1) : up dn = src + multiplier * atr dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? math.min(dn, dn1) : dn trend = 1 trend := nz(trend[1], trend) trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend [up, dn, trend] // Fetching the higher time frame data [HTF_up, HTF_dn, HTF_trend] = request.security(syminfo.tickerid, "", calcSuperTrend(hl2, Periods, Multiplier), lookahead=barmerge.lookahead_on) // Plotting for the higher time frame plot(HTF_trend == 1 ? HTF_up : HTF_dn, title='HTF Up Trend', color= HTF_trend == 1 ? color.green : color.red, linewidth=4) // =============================== // Ichimoku Functions and Plotting // =============================== // Function to convert timeframe to hours f_convertTimeframeToHours(tf) => val = 0.0 if tf == "1S" or tf == "S" val := 1.0 / 3600.0 else if str.contains(tf, "S") val := str.tonumber(str.replace(tf, "S", "")) / 3600.0 else if tf == "1D" or tf == "D" val := 24.0 else if str.contains(tf, "D") val := str.tonumber(str.replace(tf, "D", "")) * 24.0 else if tf == "1W" or tf == "W" val := 24.0 * 7.0 else if str.contains(tf, "W") val := str.tonumber(str.replace(tf, "W", "")) * 24.0 * 7.0 else if tf == "1M" or tf == "M" val := 24.0 * 30.0 // Approximation for a month else if str.contains(tf, "M") val := str.tonumber(str.replace(tf, "M", "")) * 24.0 * 30.0 // Approximation for months else // Default to minutes val := str.tonumber(tf) / 60.0 val // Time timeOffset = time - time[1] // Returns the displacement based on the chart / HTF resolution f_getDisplacement(_res) => _res == '' ? displacement : math.round(f_convertTimeframeToHours(_res) / f_convertTimeframeToHours(timeframe.period) * displacement) //f_avgDilationOf(_res) * displacement // Returns average value between lowest and highest f_avgLH(_len) => math.avg(ta.lowest(_len), ta.highest(_len)) // Returns f_donchian data f_donchian(_tf, _src) => request.security(syminfo.tickerid, _tf, _src, barmerge.gaps_off, barmerge.lookahead_on) // Returns ichimoku data f_ichimokuData(_tf) => _isShow = _tf == '' or f_convertTimeframeToHours(_tf) >= f_convertTimeframeToHours(timeframe.period) _displacement = _isShow ? f_getDisplacement(_tf) : na _Conversion = _isShow ? f_donchian(_tf, f_avgLH(conversionPeriods)) : na _Base = _isShow ? f_donchian(_tf, f_avgLH(basePeriods)) : na _Lagging = _isShow ? f_donchian(_tf, close) : na _SSA = _isShow ? math.avg(_Conversion, _Base) : na _SSB = _isShow ? f_donchian(_tf, f_avgLH(laggingSpan2Periods)) : na _middleCloud = _isShow ? _SSA[0] > _SSB[0] ? _SSA[0] - math.abs(_SSA[0] - _SSB[0]) / 2 : _SSA[0] + math.abs(_SSA[0] - _SSB[0]) / 2 : na [_displacement, _Conversion, _Base, _Lagging, _SSA, _SSB, _middleCloud] // Plotting ichimoku data [Displacement, Conversion, Base, Lagging, SSA, SSB, fisrtMiddleCloud] = f_ichimokuData("") // ————— Conversion plot(isActiveConversion ? Conversion : na, color=color.new(color.blue, 0), title=' Conversion', linewidth=1) // ————— Base plot(isActiveBase ? Base : na, color=color.new(color.fuchsia, 0), title=' Base', linewidth=2) // ————— Lagging plot(isActiveLagging ? Lagging : na, offset=-Displacement, color=color.new(color.green, 0), title=' Lagging') // ————— SSA + SSB ssa = plot(isActiveCloud ? SSA : na, offset=Displacement, color=color.new(color.green, 0), title=' SSA', linewidth=1) ssb = plot(isActiveCloud ? SSB : na, offset=Displacement, color=color.new(color.red, 0), title=' SSB', linewidth=1) fill(ssa, ssb, color=color.new(SSA > SSB ? color.green : color.red , 80), title=' Cloud') // =============================== // Makret Cypher Additions // =============================== // WaveTrend calculations ap = hlc3 esa = ta.ema(ap, n1) d = ta.ema(math.abs(ap - esa), n1) ci = (ap - esa) / (0.015 * d) tci = ta.ema(ci, n2) wt1 = tci wt2 = ta.sma(wt1, 3) // WaveTrend plotting //plot(0, color=color.rgb(120, 123, 134), title='Zero Line') //plot(emaSmooth + wt1, color=color.rgb(191, 228, 255), style=plot.style_linebr, title='WaveTrend 1') //plot(emaSmooth + wt2, color=color.rgb(56, 56, 56, 40), style=plot.style_linebr, title='WaveTrend 2') // WaveTrend shapes plotshape(ta.crossover(wt1, wt2) and wt2[2] < osLevel ? close : na, title='Pos Crossover', location=location.belowbar, style=shape.cross, size=size.small, color=color.rgb(63, 255, 0, 60)) plotshape(ta.crossover(wt2, wt1) and wt1[2] > osLevel ? close : na, title='Neg Crossover', location=location.abovebar, style=shape.cross, size=size.small, color=color.rgb(255, 82, 82, 60)) plotshape(ta.crossover(wt1, wt2) and osLevel ? close : na, title='Positive Crossover', location=location.belowbar, style=shape.triangleup, size=size.tiny, color=color.rgb(63, 255, 0, 60)) plotshape(ta.crossover(wt2, wt1) and obLevel ? close : na, title='Negative Crossover', location=location.abovebar, style=shape.triangledown, size=size.tiny, color=color.rgb(255, 82, 82, 60)) // Function to determine WaveTrend direction and steepness isWaveTrendUp() => wt1Slope = wt1 - wt1[1] wt2Slope = wt2 - wt2[1] if wt1 > wt2 // wt1Slope > 0 and wt2Slope > 0 1 // Both are going up else if wt1 < wt2 // wt1Slope < 0 and wt2Slope < 0 2 // Both are going down else na // Trends are not in the same direction ma(matype, src, length) => if matype == 'RMA' ta.rma(src, length) else if matype == 'SMA' ta.sma(src, length) else if matype == 'EMA' ta.ema(src, length) else if matype == 'WMA' ta.wma(src, length) else if matype == 'VWMA' ta.vwma(src, length) else src // Money Flow calculations candleValue = (close - open) / (high - low) MVC = ma(MFRSIMA, candleValue, rsiMFIperiod) MVC := MVC * rsiMFIMultiplier mfi_transp = math.abs(MVC) > 35 ? 0 : math.abs(MVC) > 30 ? 20 : math.abs(MVC) > 25 ? 30 : math.abs(MVC) > 20 ? 40 : math.abs(MVC) > 15 ? 50 : math.abs(MVC) > 10 ? 60 : math.abs(MVC) > 5 ? 65 : math.abs(MVC) > 2 ? 70 : 80 color_area = MVC > 0 ? color.rgb(76, 255, 80, mfi_transp) : color.rgb(255, 82, 82, mfi_transp) // Money Flow plotting // RSIMFIplot = plot(MVC * rsiMFIMultiplier, title='Money Flow', color=color_area, style=plot.style_area) // fill(RSIMFIplot, plot(0), color_area) plotshape(MVC > 0 ? true : na, title='MFI', location=location.top, style=shape.labeldown, size= size.tiny, color=color_area) plotshape(MVC < 0 ? true : na, title='MFI', location=location.top, style= shape.labelup, size= size.tiny, color=color_area) // =============================== // Strategy Entries // =============================== // Checks whether price is inside the Ichimoku cloud f_PriceCloud(dir) => _enter = false if bPriceCloud if bLong and dir == 1 _enter := switch priceActionOption "Close" => close > math.max(SSA[Displacement], SSB[Displacement]) "Candle Body" => open > math.max(SSA[Displacement], SSB[Displacement]) and close > math.max(SSA[Displacement], SSB[Displacement]) "Full Candle" => low > math.max(SSA[Displacement], SSB[Displacement]) and high > math.max(SSA[Displacement], SSB[Displacement]) if bShort and dir == 2 _enter := switch priceActionOption "Close" => close < math.min(SSA[Displacement], SSB[Displacement]) "Candle Body" => open < math.min(SSA[Displacement], SSB[Displacement]) and close < math.min(SSA[Displacement], SSB[Displacement]) "Full Candle" => low < math.min(SSA[Displacement], SSB[Displacement]) and high < math.min(SSA[Displacement], SSB[Displacement]) else _enter := na _enter // Checks whether price is above / below the ema f_PriceEMA(dir) => _enter = false if bPriceEMA if bLong and dir == 1 _enter := switch priceEMAOption "Close" => close > math.max(SSA[Displacement], SSB[Displacement]) "Candle Body" => open > math.max(SSA[Displacement], SSB[Displacement]) and close > math.max(SSA[Displacement], SSB[Displacement]) "Full Candle" => low > math.max(SSA[Displacement], SSB[Displacement]) and high > math.max(SSA[Displacement], SSB[Displacement]) if bShort and dir == 2 _enter := switch priceEMAOption "Close" => close < math.min(SSA[Displacement], SSB[Displacement]) "Candle Body" => open < math.min(SSA[Displacement], SSB[Displacement]) and close < math.min(SSA[Displacement], SSB[Displacement]) "Full Candle" => low < math.min(SSA[Displacement], SSB[Displacement]) and high < math.min(SSA[Displacement], SSB[Displacement]) else _enter := na _enter // Checks HTF supertrend direction f_Super(dir) => _enter = false if bSuper if bLong and dir == 1 _enter := HTF_trend == 1 if bShort and dir == 2 _enter := HTF_trend == -1 else _enter := na _enter // Checks whether ema is inside the Ichimoku cloud f_EMACloud1(dir) => _enter = false if bEMACloud1 if bLong and dir == 1 _enter := (emaSmooth > math.max(SSA[Displacement], SSB[Displacement])) or (emaSmooth < math.min(SSA[Displacement], SSB[Displacement])) if bShort and dir == 2 _enter := (emaSmooth > math.max(SSA[Displacement], SSB[Displacement])) or (emaSmooth < math.min(SSA[Displacement], SSB[Displacement])) else _enter := na _enter // Checks whether ema is above/below Ichimoku cloud f_EMACloud2(dir) => _enter = false if bEMACloud2 if bLong and dir == 1 _enter := emaSmooth > math.max(SSA[Displacement], SSB[Displacement]) if bShort and dir == 2 _enter := emaSmooth < math.min(SSA[Displacement], SSB[Displacement]) else _enter := na _enter // Checks whether moneyflow is positive f_MFI(dir) => _enter = false if bMFI if bLong and dir == 1 _enter := MVC > 0 if bShort and dir == 2 _enter := MVC < 0 else _enter := na _enter // Checks whether wavetrend is rising or falling f_WT(dir) => _enter = false if bWT if bLong and dir == 1 _enter := isWaveTrendUp() == dir if bShort and dir == 2 _enter := isWaveTrendUp() == dir else _enter := na _enter f_WTOB(dir) => _enter = false if bWT and bWTOB if bLong and dir == 1 _enter := wt1 < obLevel if bShort and dir == 2 _enter := wt1 > osLevel else _enter := na _enter // Check if a value is 'na' or true. f_NATrue(val) => _enter = false if na(val) _enter := true if val _enter := true _enter // Consolidates entry conditions. f_checkCondition(dir) => _enter = false if na(f_PriceCloud(dir)) and na(f_PriceEMA(dir)) and na(f_Super(dir)) and na(f_EMACloud1(dir)) and na(f_EMACloud2(dir)) and na(f_MFI(dir)) and na(f_WT(dir)) and na(f_WTOB(dir)) _enter := false else if f_NATrue(f_PriceCloud(dir)) and f_NATrue(f_PriceEMA(dir)) and f_NATrue(f_Super(dir)) and f_NATrue(f_EMACloud1(dir)) and f_NATrue(f_EMACloud2(dir)) and f_NATrue(f_MFI(dir)) and f_NATrue(f_WT(dir)) and f_NATrue(f_WTOB(dir)) _enter := true _enter // Execute long trade entries longCondition = bLong and f_checkCondition(1) if (longCondition) strategy.entry("Long", strategy.long) // Execute short trade entries shortCondition = bShort and f_checkCondition(2) if (shortCondition) strategy.entry("Short", strategy.short) // Excute trade exits exitLong = (bExitHTFTrail and (close < HTF_up or HTF_trend == -1)) exitShort = (bExitHTFTrail and (close > HTF_dn or HTF_trend == 1)) if exitLong strategy.close("Long") if exitShort strategy.close("Short") // Creates a table shoing all the user options and their current status for entering a trade if bTable // Create a table tbl = table.new(position = position.bottom_right, columns = 4, rows = 11, bgcolor=color.new(color.black,100), border_width = 0, frame_width = 0) table.cell(tbl, 1, 0, "Selected", text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 2, 0, "Long", bgcolor=na(bLong) ? color.new(color.black,100) : bShort ? color.rgb(4, 112, 8) : color.rgb(100, 7, 7), text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 3, 0, "Short", bgcolor=na(bShort) ? color.new(color.black,100) : bShort ? color.rgb(4, 112, 8) : color.rgb(100, 7, 7), text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 0, 1, "Entry", text_halign = text.align_left, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 2, 1, longCondition ? "✓" : "✗", bgcolor=longCondition ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 3, 1, shortCondition ? "✓" : "✗", bgcolor=shortCondition ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 0, 3, "Price Cloud", text_halign = text.align_left, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 1, 3, bPriceCloud ? "✓" : "✗", bgcolor=na(bPriceCloud) ? color.new(color.black,100) : bPriceCloud ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 2, 3, f_PriceCloud(1) ? "✓" : "✗", bgcolor=na(f_PriceCloud(1)) ? color.new(color.black,100) : f_PriceCloud(1) ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 3, 3, f_PriceCloud(2) ? "✓" : "✗", bgcolor=na(f_PriceCloud(2)) ? color.new(color.black,100) : f_PriceCloud(2) ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 0, 4, "Price EMA", text_halign = text.align_left, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 1, 4, bPriceEMA ? "✓" : "✗", bgcolor=na(bPriceEMA) ? color.new(color.black,100) : bPriceEMA ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 2, 4, f_PriceEMA(1) ? "✓" : "✗", bgcolor=na(f_PriceEMA(1)) ? color.new(color.black,100) : f_PriceEMA(1) ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 3, 4, f_PriceEMA(2) ? "✓" : "✗", bgcolor=na(f_PriceEMA(2)) ? color.new(color.black,100) : f_PriceEMA(2) ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 0, 5, "SuperTrend", text_halign = text.align_left, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 1, 5, bSuper ? "✓" : "✗", bgcolor=na(bSuper) ? color.new(color.black,100) : bSuper ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 2, 5, f_Super(1) ? "✓" : "✗", bgcolor=na(f_Super(1)) ? color.new(color.black,100) : f_Super(1) ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 3, 5, f_Super(2) ? "✓" : "✗", bgcolor=na(f_Super(2)) ? color.new(color.black,100) : f_Super(2) ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 0, 6, "EMA Outside Cloud", text_halign = text.align_left, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 1, 6, bEMACloud1 ? "✓" : "✗", bgcolor=na(bEMACloud1) ? color.new(color.black,100) : bEMACloud1 ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 2, 6, f_EMACloud1(1) ? "✓" : "✗", bgcolor=na(f_EMACloud1(1)) ? color.new(color.black,100) : f_EMACloud1(1) ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 3, 6, f_EMACloud1(2) ? "✓" : "✗", bgcolor=na(f_EMACloud1(2)) ? color.new(color.black,100) : f_EMACloud1(2) ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 0, 7, "EMA Above/Below Cloud", text_halign = text.align_left, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 1, 7, bEMACloud2 ? "✓" : "✗", bgcolor=na(bEMACloud2) ? color.new(color.black,100) : bEMACloud2 ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 2, 7, f_EMACloud2(1) ? "✓" : "✗", bgcolor=na(f_EMACloud2(1)) ? color.new(color.black,100) : f_EMACloud2(1) ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 3, 7, f_EMACloud2(2) ? "✓" : "✗", bgcolor=na(f_EMACloud2(2)) ? color.new(color.black,100) : f_EMACloud2(2) ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 0, 8, "Moneyflow", text_halign = text.align_left, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 1, 8, bMFI ? "✓" : "✗", bgcolor=na(bMFI) ? color.new(color.black,100) : bMFI ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 2, 8, f_MFI(1) ? "✓" : "✗", bgcolor=na(f_MFI(1)) ? color.new(color.black,100) : f_MFI(1) ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 3, 8, f_MFI(2) ? "✓" : "✗", bgcolor=na(f_MFI(2)) ? color.new(color.black,100) : f_MFI(2) ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 0, 9, "WaveTrend", text_halign = text.align_left, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 1, 9, bWT ? "✓" : "✗", bgcolor=na(bWT) ? color.new(color.black,100) : bWT ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 2, 9, f_WT(1) ? "✓" : "✗", bgcolor=na(f_WT(1)) ? color.new(color.black,100) : f_WT(1) ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 3, 9, f_WT(2) ? "✓" : "✗", bgcolor=na(f_WT(2)) ? color.new(color.black,100) : f_WT(2) ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 0, 10, "Overbought/Sold " + str.tostring(wt1, '#.#'), text_halign = text.align_left, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 1, 10, bWTOB ? "✓" : "✗", bgcolor=na(bWTOB) ? color.new(color.black,100) : bWTOB ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 2, 10, f_WTOB(1) ? "✓" : "✗", bgcolor=na(f_WTOB(1)) ? color.new(color.black,100) : f_WTOB(1) ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207)) table.cell(tbl, 3, 10, f_WTOB(2) ? "✓" : "✗", bgcolor=na(f_WTOB(2)) ? color.new(color.black,100) : f_WTOB(2) ? color.green : color.red, text_halign = text.align_center, text_size = size.small, text_color = color.rgb(207, 207, 207))