position_toolLibrary "position_tool"
Trying to turn TradingView's position tool into a library from which you can draw position tools for your strategies on the chart. Not sure if this is going to work
calcBaseUnit()
Calculates the chart symbol's base unit of change in asset prices.
Returns: (float) A ticks or pips value of base units of change.
calcOrderPipsOrTicks(orderSize, unit)
Converts the `orderSize` to ticks.
Parameters:
orderSize (float) : (series float) The order size to convert to ticks.
unit (simple float) : (simple float) The basic units of change in asset prices.
Returns: (int) A tick value based on a given order size.
calcProfitLossSize(price, entryPrice, isLongPosition)
Calculates a difference between a `price` and the `entryPrice` in absolute terms.
Parameters:
price (float) : (series float) The price to calculate the difference from.
entryPrice (float) : (series float) The price of entry for the position.
isLongPosition (bool)
Returns: (float) The absolute price displacement of a price from an entry price.
calcRiskRewardRatio(profitSize, lossSize)
Calculates a risk to reward ratio given the size of profit and loss.
Parameters:
profitSize (float) : (series float) The size of the profit in absolute terms.
lossSize (float) : (series float) The size of the loss in absolute terms.
Returns: (float) The ratio between the `profitSize` to the `lossSize`
createPosition(entryPrice, entryTime, tpPrice, slPrice, entryColor, tpColor, slColor, textColor, showExtendRight)
Main function to create a position visualization with entry, TP, and SL
Parameters:
entryPrice (float) : (float) The entry price of the position
entryTime (int) : (int) The entry time of the position in bar_time format
tpPrice (float) : (float) The take profit price
slPrice (float) : (float) The stop loss price
entryColor (color) : (color) Color for entry line
tpColor (color) : (color) Color for take profit zone
slColor (color) : (color) Color for stop loss zone
textColor (color) : (color) Color for text labels
showExtendRight (bool) : (bool) Whether to extend lines to the right
Returns: (bool) Returns true when position is closed
Search in scripts for "order"
Fib BB on VWMA*ATRThis TradingView Pine Script is designed to plot Fibonacci Bollinger Bands on a Volume Weighted Moving Average (VWMA) using the Average True Range (ATR). The script takes a higher timeframe (HTF) approach, allowing traders to analyze price action and volatility from a broader market perspective.
🔹 How It Works
Higher Timeframe Data Integration
Users can select a specific timeframe to calculate the VWMA and ATR.
This allows for a more macro perspective, avoiding the noise of lower timeframes.
Volume Weighted Moving Average (VWMA)
Unlike the Simple Moving Average (SMA), VWMA gives higher weight to price movements with larger volume.
Calculation Formula:
𝑉𝑊𝑀𝐴=∑(𝐶𝑙𝑜𝑠𝑒×𝑉𝑜𝑙𝑢𝑚𝑒) / ∑𝑉𝑜𝑙𝑢𝑚𝑒
Since VWMA accounts for volume, it is more reactive to price zones with high buying or selling activity, making it useful for identifying liquidity zones.
ATR-Based Fibonacci Bollinger Bands
The Average True Range (ATR) is used to measure market volatility.
Instead of standard deviation-based Bollinger Bands, Fibonacci multipliers (2.618, 3.0, 3.414) are applied to ATR.
These bands adjust dynamically with market volatility.
🔹 Key Findings from Exploration
Through testing and analysis, this indicator seems to effectively detect supply and demand zones, particularly at the Fibonacci levels of 2.618 to 3.414.
Price frequently reacts at these bands, indicating that they capture key liquidity zones.
Potential Order Block Detection:
The ends of the Fibonacci Bollinger Bands (especially at 2.618, 3.0, and 3.414) tend to align with order blocks—areas where institutional traders previously accumulated or distributed positions.
This is particularly useful for order flow traders who focus on unfilled institutional orders.
🔹 How to Use This Indicator?
Identifying Order Blocks
When price reaches the upper or lower bands, check if there was a strong reaction (rejection or consolidation).
If price rapidly moves away from a band, that level might be an order block.
Spotting Liquidity Pools
VWMA’s nature enhances liquidity detection since it emphasizes high-volume price action.
If a price level repeatedly touches the band without breaking through, it suggests institutional orders may be absorbing liquidity there.
Trend Confirmation
If VWMA is trending upwards and price keeps rejecting the lower bands, it confirms a strong bullish trend.
Conversely, constant rejection from the upper bands suggests a bearish market.
This script is designed for open-source publication and offers traders a refined approach to detecting order blocks and liquidity zones using Fibonacci-based volatility bands.
📌 한글 설명 (상세 설명)
이 트레이딩뷰 파인스크립트는 거래량 가중 이동평균(VWMA)과 평균 실제 범위(ATR)를 활용하여 피보나치 볼린저 밴드를 표시하는 지표입니다.
또한, 고차 타임프레임(HTF) 데이터를 활용하여 시장의 큰 흐름을 분석할 수 있도록 설계되었습니다.
🔹 지표 작동 방식
고차 타임프레임(HTF) 데이터 적용
사용자가 원하는 타임프레임을 선택하여 VWMA와 ATR을 계산할 수 있습니다.
이를 통해 더 큰 시장 흐름을 분석할 수 있으며, 저타임프레임의 노이즈를 줄일 수 있습니다.
거래량 가중 이동평균(VWMA) 적용
VWMA는 단순 이동평균(SMA)보다 거래량이 많은 가격 움직임에 더 큰 가중치를 부여합니다.
계산 공식:
𝑉𝑊𝑀𝐴=∑(𝐶𝑙𝑜𝑠𝑒×𝑉𝑜𝑙𝑢𝑚𝑒) / ∑𝑉𝑜𝑙𝑢𝑚𝑒
거래량이 많이 발생한 가격 구간을 강조하는 특성이 있어, 시장의 유동성 구간을 더 정확히 포착할 수 있습니다.
ATR 기반 피보나치 볼린저 밴드 생성
ATR(Average True Range)를 활용하여 변동성을 측정합니다.
기존의 표준편차 기반 볼린저 밴드 대신, 피보나치 계수(2.618, 3.0, 3.414)를 ATR에 곱하여 밴드를 생성합니다.
이 밴드는 시장 변동성에 따라 유동적으로 조정됩니다.
🔹 탐구 결과: 매물대 및 오더블록 감지
테스트를 통해 Fibonacci 2.618 ~ 3.414 구간에서 매물대 및 오더블록을 포착하는 경향이 있음을 확인했습니다.
가격이 피보나치 밴드(특히 2.618, 3.0, 3.414)에 닿을 때 반응하는 경우가 많음
VWMA의 특성을 통해 오더블록을 감지할 가능성이 높음
🔹 오더블록(Order Block) 감지 원리
Fibonacci 밴드 끄트머리(2.618 ~ 3.414)에서 가격이 강하게 반응
이 영역에서 가격이 강하게 튀어 오르거나(매수 압력) 급락하는(매도 압력) 경우,
→ 기관들이 포지션을 청산하거나 추가 매집하는 구간일 가능성이 큼.
과거에 대량 주문이 체결된 가격 구간(= 오더블록)일 수 있음.
VWMA를 통한 유동성 감지
VWMA는 거래량이 집중된 가격을 기준으로 이동하기 때문에, 기관 주문이 많이 들어온 가격대를 강조하는 특징이 있음.
따라서 VWMA와 피보나치 밴드가 만나는 지점은 유동성이 높은 핵심 구간이 될 가능성이 큼.
매물대 및 청산 구간 분석
가격이 밴드에 도달했을 때 강한 반등이 나오는지를 확인 → 오더블록 가능성
가격이 밴드를 여러 번 테스트하면서 돌파하지 못한다면, 해당 지점은 강한 매물대일 가능성
🔹 활용 방법
✅ 오더블록 감지:
가격이 밴드(2.618~3.414)에 닿고 강하게 튕긴다면, 오더블록 가능성
해당 지점에서 거래량 증가 및 강한 반등 발생 시 매수 고려
✅ 유동성 풀 확인:
VWMA와 피보나치 밴드가 만나는 구간에서 반복적으로 거래량이 터진다면, 해당 지점은 기관 유동성 구간일 가능성
✅ 추세 확인:
VWMA가 상승하고 가격이 밴드 하단(지지선)에서 튕긴다면 강한 상승 추세
VWMA가 하락하고 가격이 밴드 상단(저항선)에서 거부당하면 하락 추세 지속
Grease Trap V1.0The Grease Trap V1.0 indicator is a dynamic, Fibonacci-based strategy that calculates unique moving averages to generate trading signals. Below is an overview of its main components and functionality:
How It Works
Fibonacci Grouped Averages:
Dynamic Fibonacci Sequence:
The indicator uses a custom function that dynamically builds a Fibonacci sequence. The user can set the number of Fibonacci elements for two separate calculations:
One for the Indicator Average (default: 9 elements).
One for the Base Average (default: 14 elements).
Grouped Averaging:
Using these Fibonacci numbers, the script groups historical closing prices into segments. For each group (with a length determined by a Fibonacci number), it computes an average. These individual group averages are then averaged together to produce a single dynamic average.
Plotting and Visual Cues:
Two Lines:
The indicator plots two lines on the chart:
Primary Dynamic Fibonacci Grouped Average
Base Dynamic Fibonacci Grouped Average
Color Coding:
The colors of these lines change based on their relationship to the current high price and to each other. For example, if the primary average is above the high or crosses above the base average, it might be shown in green or yellow, whereas certain conditions trigger red, signaling caution.
Crossover Dots:
When the primary average crosses above the base (a bullish signal), a green dot is plotted. Conversely, when it crosses below (a bearish signal), a red dot is displayed. These dots help visually pinpoint the moments of potential trade entry or exit.
Trading Signals and Orders:
Buy Signal:
Triggered when the primary average crosses above the base average. On a buy signal:
If in a short position, it closes that position.
Then, it enters a long position.
Sell Signal:
Triggered when the primary average crosses below the base average. On a sell signal:
If in a long position, it closes that position.
Then, it enters a short position.
Profit Target Management:
The indicator includes automated profit management:
For long positions, it sets an exit order when the price rises by a user-defined percentage (default: 2%).
For short positions, it sets an exit order when the price falls by a similar percentage.
Alerts:
The script is equipped with alert conditions. Traders receive notifications whenever a buy or sell signal is generated, helping them stay on top of potential trading opportunities.
Customization
User Inputs:
Traders can adjust:
The number of Fibonacci elements for each average calculation.
Profit target percentages for both long and short positions.
Data Length Requirement:
The script ensures it uses at least 200 data points (or the total number of available bars, whichever is greater) for a robust calculation of the averages.
In Summary
The Grease Trap V1.0 indicator combines the mathematical elegance of Fibonacci sequences with dynamic grouped averaging. It offers:
Innovative Moving Averages: Based on Fibonacci groupings of historical price data.
Clear Visual Cues: Through color-coded lines and crossover dots.
Automated Trading Actions: With built-in order management and profit targets.
Alert Notifications: So traders are instantly aware of key market signals.
This makes the Grease Trap V1.0 a comprehensive tool for both signal generation and automated strategy execution, suitable for traders looking to integrate Fibonacci principles into their trading systems.
Liquidity Market Seeking SwiftEdgeThis indicator is designed to identify potential liquidity levels on the chart by detecting swing highs and lows, which are often areas where stop-loss orders or significant orders accumulate. It visualizes these levels with horizontal lines and labels on the right side of the chart, color-coded based on volume to help traders understand where the market might seek liquidity.
How It Works
Swing Highs and Lows: The indicator uses the ta.pivothigh and ta.pivotlow functions to identify significant swing points over a user-defined lookback period (Swing Length). These points are considered potential liquidity levels where stop-loss orders might be placed.
Volume Analysis: The indicator compares the volume at each swing point to the average volume over a specified period (Volume Average Length). Levels with above-average volume are colored red, indicating higher liquidity, while levels with below-average volume are colored green.
Liquidity Visualization: Horizontal dashed lines are drawn at each identified level, extending across the chart. Labels on the right side display the estimated liquidity amount (simulated based on volume and a multiplier, Volume Multiplier for Liquidity).
Sell Signal: A "SELL NOW" label appears when the price approaches a liquidity level after an uptrend (detected using a simple moving average crossover). This suggests a potential reversal as the market may target liquidity at that level.
Strategy Concept: Market Seeking Liquidity
The indicator is based on the concept that markets often move toward areas of high liquidity, such as clusters of stop-loss orders or significant order accumulations. These liquidity pools are typically found around swing highs and lows, where traders place their stop-losses or large orders. By identifying these levels and highlighting those with higher volume (red lines), the indicator aims to show where the market might move to "grab" this liquidity. For example, after an uptrend, the market may reverse at a swing high to take out stop-losses above that level, providing liquidity for larger players to enter or exit positions.
Settings
Swing Length: The number of bars to look back for detecting swing highs and lows. Default is 20.
Liquidity Threshold: The price threshold for merging nearby levels to avoid duplicates. Default is 0.001.
Volume Average Length: The period for calculating the average volume to compare against. Default is 20.
Volume Multiplier for Liquidity: A multiplier to scale the volume into a simulated liquidity amount (displayed as "K"). Default is 1000.
Usage Notes
Use this indicator on any timeframe, though it may be more effective on higher timeframes (e.g., 1H, 4H) where swing points are more significant.
Red lines indicate levels with higher volume, suggesting stronger liquidity pools that the market might target.
Green lines indicate levels with lower volume, which may be less significant.
The "SELL NOW" signal is a basic example of how to use liquidity levels for trading decisions. It appears when the price approaches a liquidity level after an uptrend, but it should be used in conjunction with other analysis.
Adjust the Volume Multiplier for Liquidity to scale the displayed liquidity amounts based on your instrument (e.g., forex pairs may need a higher multiplier than indices).
JMA Quantum Edge: Adaptive Precision Trading System JMA Quantum Edge: Adaptive Precision Trading System - Enhanced Visuals & Risk Management
Get ready to experience a groundbreaking trading strategy that adapts in real-time to market conditions! This powerful, open-source script combines advanced technical analysis with state-of-the-art risk management tools, designed to give you the edge you need in today's dynamic markets.
What It Does:
Adaptive JMA Indicator:
Utilizes a custom Jurik Moving Average (JMA) that adjusts its sensitivity based on market volatility, ensuring you get precise signals even in the most fluctuating environments.
Dynamic Risk Management:
Features built-in support for partial exits (scaling out) to secure profits, along with an optional Kelly Criterion-based position sizing that tailors your exposure based on historical performance metrics.
Robust Error Handling:
Incorporates market condition filters—like minimum volume and maximum allowed gap percentage—to ensure trades are only executed under favorable conditions.
Vivid Visual Enhancements:
Enjoy an animated background that reflects market momentum, dynamic pivot markers, and clearly drawn trend channels. Plus, interactive tables provide real-time performance analytics and detailed error metrics.
Fully Customizable:
With a comprehensive set of inputs, you can easily tailor the strategy to your personal trading style and market preferences. Adjust everything from JMA parameters to refresh intervals for tables and labels!
How to Use It:
Add the Script:
Copy and paste the script into the Pine Script Editor on TradingView and click “Add to Chart.”
Configure Your Settings:
Customize your risk management (capital, commission, position sizing, partial exits, etc.) and tweak the JMA settings to match your preferred trading style. Use the extensive input panel to adjust visuals, alerts, and more.
Backtest & Optimize:
Run the strategy in the Strategy Tester to analyze its historical performance. Monitor real-time analytics and error metrics via the interactive tables, and fine-tune your parameters for optimal performance.
Go Live with Confidence:
Once you're satisfied with the backtest results, use the generated signals for live trading, and let the system help you stay ahead in fast-paced markets!
How to use the imputs:
This cutting-edge strategy is designed to adapt to changing market conditions and offers you complete control over your trading parameters. Here’s a breakdown of what each group of inputs does and how you should use them:
Risk Management & Trade Settings
Recalculate on Every Tick:
What it does: When enabled, the strategy recalculates on every price update.
Recommendation: Leave it true for fast charts.
Initial Capital:
What it does: Sets your starting capital for backtesting, which influences position sizing and performance metrics.
Recommendation: Start with $10,000 (or adjust according to your trading capital).
Commission (%):
What it does: Simulates the cost per trade.
Recommendation: Use a realistic rate (e.g., 0.04%).
Position Size & Quantity Type:
What they do: Define how large each trade will be. Choose between a fixed unit amount or a percentage of equity.
Recommendation: For beginners, the default fixed value is a good start. Experiment later with percentage-based sizing if needed.
Order Comment:
What it does: Adds a label to your orders for easier tracking.
Allow Reverse Orders:
What it does: If disabled, the strategy will close opposing positions before entering a new trade, reducing conflicts.
Enable Dynamic Position Sizing:
What it does: Adjusts trade size based on current volatility.
Recommendation: Beginners may start with this disabled until they understand basic sizing.
Partial Exit Inputs:
What they do:
Enable Partial Exits: When turned on, you can scale out of your position to lock in profits.
Partial Exit Profit (%): The profit percentage that triggers a partial exit.
Partial Exit Percentage: The percentage of your current position to exit. Recommendation: Use defaults (e.g., 5% profit, 50% exit) to secure profits gradually.
Kelly Criterion Option:
What it does: When enabled, adjusts your position sizing using historical performance (win rate and profit factor).
Recommendation: Beginners might leave this disabled until comfortable with backtest performance metrics.
Market Condition Filters:
What they do:
Minimum Volume: Ensures trades occur only when there’s sufficient market activity.
Maximum Gap (%): Prevents trading if there’s an unusually large gap between the previous close and current open. Recommendation: Defaults work well for most markets. If trades seem erratic, consider tightening these limits.
JMA Settings
Price Source:
What it does: The input series for the JMA calculation, typically set to the closing price.
JMA Length:
What it does: Controls the smoothing period of the JMA. Lower values are more sensitive; higher values smooth out the noise. Recommendation: Start with 21.
JMA Phase & Power:
What they do: Adjust how responsive the JMA is. Phase controls timing; power adjusts the intensity. Recommendation: Default settings (63 phase and 3 power) are a balanced starting point.
Visual Settings & Style
Show JMA Line, Pivot Lines, and Pivot Labels:
What they do: Toggle visual elements on your chart for easier signal identification.
Pivot History Count:
What it does: Limits how many historical pivot markers are displayed.
Color Settings (Up/Down Neon Colors):
What they do: Set the visual cues for buy and sell signals.
Pivot Marker & Line Style:
What they do: Choose the style and thickness of your pivot markers and lines.
Show Stats Panel:
What it does: Displays real-time performance and error metrics.
Dynamic Background & Visual Enhancements
Animate Background:
What it does: Changes the background color based on market momentum.
Show Trend Channels & Volume Zones:
What they do: Draw trend channels and highlight areas of high volatility/volume.
Show Data-Rich Labels:
What it does: Displays key metrics like volume, error percentage, and momentum on the chart.
High Volatility Threshold:
What it does: Determines the multiplier for when the chart background should change due to high volatility.
Multi-Timeframe Settings
Higher Timeframe:
What it does: Uses a higher timeframe’s JMA for trend confirmation. Recommendation: Use Daily ('D') or Weekly ('W') for broader trend analysis.
Show HTF Trend Zone & Opacity:
What they do: Display a visual zone from the higher timeframe to help confirm trends.
6. Trailing Stop Settings
Trailing Stop ATR Factor & Offset Multiplier:
What they do: Calculate trailing stops based on the Average True Range (ATR), adjusting stop distances dynamically. Recommendation: Default settings are a good balance but can be fine-tuned based on asset volatility.
Alerts & Notifications
Alerts on Pivot Formation & JMA Crossover:
What they do: Notify you when key events occur.
Dynamic Power Threshold:
What it does: Sets the sensitivity for dynamic alerts.
8. Static Stop Loss / Take Profit
Static Stop Loss (%) & Take Profit (%):
What they do: Allow you to set fixed stop loss or take profit levels. Recommendation: Leave them at 0 to disable if you prefer dynamic risk management, or set them if you have strict risk/reward preferences.
Advanced Settings
ATR Length:
What it does: Determines the period for ATR calculation, impacting trailing stop sensitivity. Recommendation: Start with 14.
Optimization Feedback & Enhanced Error Analysis
Error Metric Length & Error Threshold (%):
What they do: Calculate error metrics (like average error, skewness, and kurtosis) to help you fine-tune the JMA. Recommendation: Use the defaults and adjust if the error metrics seem off during backtesting.
UI - User-Driven Tweaking & Table Customization
Parameter Tweaker Panel, Debug/Performance Table Settings:
What they do: Provide interactive tables that display real-time performance, error metrics, and allow you to monitor strategy parameters.
Refresh Frequency Options (Table & Label Refresh Intervals):
What they do: Set how often the tables and labels update.
Recommendation: Start with an interval of 1 bar; increase it if your chart is too busy.
Important for Beginners:
Default Settings:
All default values have been chosen for balanced performance across different markets. If you ever experience unexpected behavior, start by resetting the inputs to their defaults.
Step-by-Step Adjustments:
Experiment by changing one setting at a time while observing how the strategy’s signals and performance metrics change. This will help you understand the impact of each parameter.
Resetting to Defaults:
If things seem off or you’re not getting the expected results, you can always reset the indicator. Either reload the script or use the “Reset Inputs” option (if available) to revert to the default settings.
Jump in, experiment, and enjoy the power of adaptive precision trading. This strategy is built to grow with your skills—have fun exploring and refining your trading edge!
Happy trading!
Volume Delta with Bollinger Bands [EMA]TL;DR
This indicator displays a “Volume Delta” candle chart based on a lower timeframe approximation of up vs. down volume. Bollinger Bands (using an EMA and a configurable standard deviation multiplier) highlight when Volume Delta exceeds typical volatility thresholds. Green bars will darken when Volume Delta is above the upper Bollinger band, and red bars will darken when Volume Delta is below the lower Bollinger band. You can optionally include wicks in the Bollinger calculations. Note : TradingView uses tick-based volume data, so these values may not precisely match true market orders.
What Is Volume Delta ?
• Volume Delta is a metric that identifies buying vs. selling activity in a market by distinguishing between orders transacting at the ask (buy volume) and orders transacting at the bid (sell volume).
• A positive Volume Delta indicates more buy volume during a bar, while a negative Volume Delta indicates more sell volume.
How TradingView Calculates Volume Delta
• TradingView relies on tick data to approximate up/down volume. This may not perfectly capture true order-flow distribution, particularly on higher timeframes or illiquid symbols.
• While it can provide useful insights into volume flow, keep in mind the underlying data’s limitations.
Key Features of This Indicator
1. Automatic or Custom Lower Timeframe Data
• The script can automatically select a lower timeframe for Volume Delta, or you can manually specify one in the settings.
2. Bollinger Bands on Volume Delta
• Uses an EMA of the Volume Delta (or a wick-based average) and calculates a standard deviation.
• The upper and lower bands highlight when activity deviates from typical volatility.
3. Configurable Wick Inclusion
• Decide whether to use only the “close” (lastVolume) of the Volume Delta bar or the average of its wicks ((maxVolume + minVolume) / 2) for Bollinger calculations.
4. Dynamic Bar Colors
• Positive Volume Delta bars turn dark green if they exceed the upper Bollinger band, otherwise lighter green .
• Negative Volume Delta bars turn dark red if they fall below the lower Bollinger band, otherwise lighter red .
How To Use
1. Add the Indicator to Your Chart
• Apply it to any symbol and timeframe in TradingView.
• Configure the lower timeframe for Volume Delta if desired.
2. Adjust Bollinger Settings
• Bollinger Length defines the EMA and standard deviation period.
• Bollinger Multiplier sets how far the bands lie from the EMA.
3. Choose Whether To Use Wicks
• Toggle to use the average of high/low for a potentially more volatile reading.
• Turn it off to rely solely on the Volume Delta “close.”
4. Interpret the Signals
• Dark Green Above the Upper Band : Suggests strong buying pressure above normal.
• Lighter Green : Positive but within typical volatility bounds.
• Dark Red Below the Lower Band : Suggests strong selling pressure below normal.
• Lighter Red : Negative but within typical volatility.
Important Caveats
• TradingView Volume Data : Tick-based and aggregated data may not reflect actual order-flow precisely.
• Context Matters : Combine Volume Delta with other forms of analysis (price action, support/resistance, etc.) to form a more comprehensive strategy.
Rounded Grid Levels🟩 Rounded Grid Levels is a visual tool that helps traders quickly identify key psychological price levels on any chart. By dynamically adapting to the user's visible screen area, it provides consistent, easy-to-read round number grids that align with price action. The indicator offers a traditional visualization of horizontal round level grids, along with enhanced options such as tilted grids that align with market sentiment, and fan-shaped grids for alternative price interaction views. It serves purely as a visual aid, providing an adaptable way to observe rounded price levels without making predictions or generating trading signals.
⚡ OVERVIEW ⚡
The Rounded Grid Levels indicator is a visual tool designed to help traders identify and track price levels that may hold psychological significance, such as round numbers or significant milestones. These levels often serve as potential areas for price reactions, including support, resistance, or points of market interest. The indicator's gridlines are determined by user-defined settings and adjust dynamically based on the visible chart area, meaning they are influenced by the user's current zoom level and perspective. This behavior is similar to TradingView's built-in grid lines found in the chart settings canvas, which also adjust in real-time based on the visible screen, ensuring the most relevant price levels are displayed. By default, the indicator provides consistent gridlines to represent traditional round number levels, offering a straightforward view of key psychological areas. Additionally, users have access to experimental and novel configurations, such as fan-shaped layouts, which expand from a central point and adapt directionally based on user settings. This configuration can provide an alternate perspective for traders, especially useful in analyzing broader market moves and visualizing expansion relative to the current price.
Users can display the gridlines in a variety of configurations, including horizontal, neutral, auto, or fan-shaped layouts, depending on their preferred method of analysis. This flexibility allows traders to focus on different types of price action without overcrowding the visual representation of price movements.
This indicator is intended purely as a visual aid for understanding how price interacts with rounded levels over time. It does not generate predictive trading signals or recommendations but rather provides traders with a customizable framework to enhance their market analysis.
⭕ ROUND NUMBERS IN MARKET PSYCHOLOGY ⭕
Round numbers hold a significant place in financial markets, largely due to the psychological tendencies of traders and investors. These levels often represent areas of interest where human behavior, market biases, and trading strategies converge. Whether it's prices ending in 000, 500, or other recognizable values, these levels naturally attract more attention and influence decision-making.
Round numbers can act as key support or resistance levels and often become focal points in market activity. They are frequently highlighted by financial media, embedded in products like options, and serve as foundations for various trading theories. Their impact extends across different market participants and strategies, making them important focal points in both short-term and long-term market analysis.
Round numbers play an important role in guiding trader behavior and market activity. To better understand why these levels are so impactful, there are several key factors that highlight their significance in trading and price dynamics:
Psychological Impact : Humans naturally gravitate toward round numbers, such as prices ending in 000, 500, or 00. These levels tend to draw attention as traders perceive them as psychologically significant. This behavior is rooted in the cognitive bias known as "left-digit bias," where people assign greater importance to rounded, more recognizable numbers. In trading, this means that prices at these levels are more memorable and thus more likely to attract attention, creating an area where traders focus their buying or selling decisions.
Order Clustering : Traders often place buy and sell orders around these rounded levels, either manually or automatically through stop and limit orders. This clustering leads to the formation of visible support or resistance zones, as the concentrated orders tend to influence price behavior around these key levels. Market participants tend to converge their orders around these price points because of their perceived psychological importance, creating a liquidity pocket. As a result, these areas often act as barriers that the price either struggles to cross or uses as springboards for further movement.
External Influences : Financial media frequently highlights round-number milestones, amplifying market sentiment and drawing traders' attention to these levels. Additionally, algorithmic trading systems often react to round-number thresholds, which can further reinforce price movements, creating self-reinforcing reactions at these levels. As media and analysts emphasize these milestones, more traders pay attention to them, leading to increased volume and often heightened volatility at those points. This self-reinforcing cycle makes round numbers an area where price movement can either accelerate due to a breakout or stall because of clustering interest.
Option Strike Prices : Options contracts typically have strike prices set at round numbers, and as expiration approaches, these levels can influence the price of the underlying asset due to concentrated trading activity. The behavior around these levels, often called "pinning," happens because traders adjust their positions to avoid unfavorable scenarios at these key strikes. This activity tends to concentrate price movement toward these levels as traders hedge their positions, leading to increased liquidity and the potential for abrupt price reactions near option expiration dates.
Whole Number Theory : This theory suggests that whole numbers act as natural psychological barriers, where traders tend to make decisions, place orders, or expect price reactions, making these levels crucial for analysis. Whole numbers are simple to remember and are often used as informal targets for profit-taking or stop placement. This behavior leads to a natural ebb and flow around these levels, where the market finds equilibrium temporarily before deciding on a future direction. Whole numbers tend to work like magnets, drawing price to them and often creating reactions that are visible across different timeframes.
Quarters Theory : Commonly used in Forex markets, this theory focuses on quarter-point increments (e.g., 1.0000, 1.2500, 1.5000) as key levels where price often pauses or reverses. These quarter levels are treated as important psychological barriers, with price frequently interacting at these intervals. Traders use these points to gauge market strength or weakness because quarter levels divide larger round-number ranges into more manageable and meaningful segments. For example, in highly traded forex pairs like EUR/USD, traders might treat 1.2500 as a significant barrier because it represents a halfway point between 1.0000 and 1.5000, offering a balanced reference point for decision-making.
Big Round Numbers : Major round numbers, such as 100, 500, or 1000, often attract significant attention and serve as psychological thresholds. Traders anticipate strong reactions when prices approach or cross these levels. This is often because large round numbers symbolize major milestones, and price behavior around them tends to signal important market sentiment shifts. When price crosses a major level, such as a stock moving above $100 or Bitcoin crossing $50,000, it often creates a surge in trading activity as it is viewed as a validation or invalidation of market trends, drawing in momentum traders and triggering both retail and institutional responses.
By visualizing these round levels on the chart, the Rounded Grid Levels indicator helps traders identify areas where price may pause, reverse, or gain momentum. While round numbers provide useful insights, they should be used in conjunction with other technical analysis tools for a comprehensive trading strategy.
🛠️ CONFIGURATION AND SETTINGS 🛠️
The Rounded Grid Levels indicator offers a variety of configurable settings to tailor the visualization according to individual trader preferences. Below are the key settings available for customization:
Custom Settings
Rounding Step : The Rounding Step parameter sets the minimum interval between gridlines. This value determines how closely spaced the rounded levels are on the chart. For example, if the Rounding Step is set to 100, gridlines will be displayed at every 100 points (e.g., $100, $200, $300) relative to the current price level. The Rounding Step is scaled to the chart's visible area, meaning users should adjust it appropriately for different assets to ensure effective visualization. Lower values provide a more granular view, while larger values give a broader, higher-level perspective.
Major Grids : Defines the interval at which major gridlines will appear compared to minor ones. For example, if the Rounding Step is 100 and Major Grids is set to 10, major gridlines will be displayed every $1,000, while minor gridlines will be at every $100. This distinction allows traders to better visualize key psychological levels by emphasizing significant price intervals.
Direction : Users can select the gridline direction, choosing between options such as 'Up', 'Down', 'Auto', or 'Neutral'. This setting controls how the gridlines extend relative to the current price level, which can help in analyzing directional trends.
Neutral Direction : This option provides balanced gridlines both above and below the current price, allowing traders to visualize support and resistance levels symmetrically. This is useful for analyzing sideways or ranging markets without directional bias.
Up Direction : The gridlines are tilted upwards, starting from visible lows and extending toward the rounded level at the current price. By choosing Up , traders emphasize an upward sentiment, visualizing price action that aligns with rising trends. This option helps illustrate potential areas where pullbacks may occur, as well as how price might expand upwards in the current market context.
Down Direction : The gridlines are tilted downwards, starting from visible highs and extending toward the rounded level at the current price. Selecting Down allows traders to emphasize a downward sentiment, visualizing how price may expand downwards, which is particularly useful when analyzing downtrends or potential correction levels. The gridlines provide an illustrative view of how price interacts with lower levels during market declines.
Auto Direction : The gridlines automatically adjust their direction based on recent market trends. This adaptive option allows traders to visualize gridlines that dynamically change according to price action, making it suitable for evolving market conditions where the direction is uncertain. It’s useful for traders looking for an indicator that moves in sync with market shifts and doesn’t require manual adjustment.
Grid Type : Allows users to choose between 'Linear' or 'Fan' grid types. The Linear type creates evenly spaced gridlines that can be either horizontal or tilted, depending on the chosen direction setting, providing a straightforward view of price levels. The Fan type radiates lines from a central point, offering a more dynamic perspective for analyzing price expansions relative to the current price. These grid types introduce experimental visualizations influenced by chart properties, including visible highs, lows, and the current price. Regardless of the configuration, the gridlines will always end at the current bar, which represents a rounded price level, ensuring consistency in how key price areas are displayed.
Extend : This setting allows gridlines to be projected into the future, helping traders see potential levels beyond the current bar. When enabled, the behavior of the extended lines varies based on the selected grid type and direction. For Neutral and Horizontal Linear settings, the extended gridlines maintain their round-number alignment indefinitely. However, for Up , Down , or Auto directions, the angle of the extended gridlines can change dynamically based on the chart’s visible high and low or the latest price action. As a result, extended lines may not continue to align with round-number levels beyond the current bar, reflecting instead the current trend and sentiment of the market. Regardless of direction, extended gridlines remain consistently spaced and either parallel or evenly distributed, ensuring a structured visual representation.
Color Settings : Users can customize the colors for resistance, support, and minor gridlines at the current price. This helps in visually distinguishing between different grid types and their significance on the chart.
Color Options
These configuration options make the Rounded Grid Levels indicator a versatile tool for traders looking to customize their charts based on their personal trading strategies and analytical preferences.
🖼️ CHART EXAMPLES 🖼️
The following chart examples illustrate different configurations available in the Rounded Grid Levels indicator. These examples show how variations in grid type, direction, and rounding step settings impact the visualization of price levels. Traders may find that smaller rounding steps are more effective on lower time frames, where precision is key, whereas larger rounding steps help to reduce clutter and highlight key levels on higher time frames. Each image includes a caption to explain the specific configuration used, helping users better understand how to apply these settings in different market conditions.
Smaller Rounding Step (100) : With a smaller rounding step, the gridlines are spaced closely together. This setting is particularly useful for lower time frames where price action is more granular and finer details are needed. It allows traders to track price interactions at narrower levels, but on higher time frames, it may lead to clutter and exceed Pine Script's 500-line limit.
Larger Rounding Step (1000) : With a larger rounding step, the gridlines are spaced farther apart. This visualization is better suited for higher time frames or broader market overviews, allowing users to focus on major psychological levels without overloading the chart. On lower time frames, this may result in fewer actionable levels, but it helps in maintaining clarity and staying within Pine Script's line limit.
Linear Grid Type, Neutral Direction (Traditional Rounded Price Levels) : The Linear gridlines are displayed in a neutral fashion, representing traditional round-number levels with consistent spacing above and below the current price. This layout helps visualize key psychological price levels over time in a straightforward manner.
Linear Grid Type, Down Direction : The Linear gridlines are tilted downwards, remaining parallel and ending at the rounded level at the current price. This setup emphasizes downward market sentiment, allowing traders to visualize price expansion towards lower levels, which is useful when analyzing downtrends or potential correction levels.
Linear Grid Type, Down Direction : The Linear gridlines are tilted downwards, extending from the current price to lower levels. Useful for observing downtrending price movements and visualizing pullback areas during uptrends.
Linear Grid Type, Auto Direction : The Linear gridlines adjust dynamically, tilting either upwards or downwards to align with recent price trends, remaining parallel and ending at the rounded level at the current price. This configuration reflects the current market sentiment and offers traders a flexible way to observe price dynamics as they develop in real time.
Fan Grid Type, Neutral Direction : The fan-shaped gridlines radiate symmetrically from a central point, ending at the rounded level at the current price. This configuration provides an unbiased view of price action, giving traders a balanced visualization of rounded levels without directional influence.
Fan Grid Type, Up Direction : The fan-shaped gridlines originate from lower visible price points and radiate upwards, ending at the rounded level at the current price. This layout helps visualize potential price expansion to higher levels, offering insights into upward momentum while maintaining a dynamic and evolving perspective on market conditions.
Fan Grid Type, Down Direction : The fan-shaped gridlines originate from higher visible price points and radiate downwards, ending at the rounded level at the current price. This setup is particularly useful for observing potential price expansion towards lower levels, illustrating areas where the price might extend during a downtrend.
Fan Grid Type, Auto Direction : The fan-shaped gridlines dynamically adjust, originating from visible chart points based on the current market trend, and radiate outward, ending at the rounded level at the current price. This adaptive visualization offers a continuously evolving representation that aligns with changing market sentiment, helping traders assess price expansion dynamically.
📊 SUMMARY 📊
The Rounded Grid Levels indicator helps traders highlight important round-number price levels on their charts, providing a dynamic way to visualize these psychological areas. With customizable gridline options—including traditional, tilted, and fan-shaped styles—users can adapt the indicator to suit their analysis needs. The gridlines adjust with chart zoom or scale, offering a flexible tool for observing price action, without providing specific trading signals or predictions.
⚙️ COMPATIBILITY AND LIMITATIONS ⚙️
Asset Compatibility :
The Rounded Grid Levels indicator is compatible with all asset classes, including cryptocurrencies, forex, stocks, and commodities. Users should adjust both the Rounding Step and the Major Grid settings to ensure the correct scale is used for the specific asset. This adjustment ensures that the most relevant round price levels are displayed effectively regardless of the instrument being analyzed. For instance, when analyzing BTCUSD, a higher Rounding Step may be needed compared to forex pairs like EURUSD, and the Major Grid value should also be adjusted to appropriately emphasize significant levels.
Line Limitations in Pine Script :
The Rounded Grid Levels indicator is subject to Pine Script's 500-line limit. This means that it cannot draw more than 500 gridlines on the chart at any given time. The number of gridlines depends directly on the chosen Rounding Step . If the steps are too small, the gridlines will be spaced too closely, causing the indicator to quickly reach the line limit. For example, if Ethereum is trading around $2,500, a Rounding Step of 100 might be appropriate, but a step of 1.00 would create too many gridlines, exceeding Pine Script's limit. Users should consider appropriate settings to avoid running into this constraint.
Runtime Error Considerations
When using the Rounded Grid Levels indicator, users might encounter a runtime error in specific scenarios. This typically happens if the Rounding Step is set too small, causing the indicator to exceed Pine Script's line limit or take too long to process. This can often occur when switching between charts that have significantly different price ranges. Since the Rounding Step requires flexibility to work with a wide variety of assets—ranging from decimals to thousands—it is not practically limited within the script itself. If a runtime error occurs, the recommended solution is to increase the Rounding Step to a larger value that better matches the current asset's price range.
Runtime Error: If the Rounding Step is too small for the current asset or chart, the indicator may generate a runtime error. Users should increase the Rounding Step to ensure proper visualization.
⚠️ DISCLAIMER ⚠️
The Rounded Grid Levels indicator is not designed as a predictive tool. While it extends gridlines into the future, this extension is purely for visual continuity and does not imply any forecast of future price movements. The primary function of this indicator is to help users visualize significant round number price levels.
The gridlines adjust dynamically based on the visible chart range, ensuring that the most relevant round price levels are displayed. This behavior allows the indicator to adapt to your current view of the market, but it should not be used to predict price movements. The indicator is intended as a visual aid and should be used alongside other tools in a comprehensive market analysis approach.
While gridlines may align with significant price levels in hindsight, they should not be interpreted as indicators of future price movements. Traders are encouraged to adjust settings based on their strategy and market conditions.
🧠 BEYOND THE CODE 🧠
The Rounded Grid Levels indicator, like other xxattaxx indicators , is designed with education and community collaboration in mind. Its open-source nature encourages exploration, experimentation, and the development of new grid calculation indicators, drawings, and strategies. We hope this indicator serves as a framework and a starting point for future innovations in grid trading.
Your comments, suggestions, and discussions are invaluable in shaping the future of this project. We actively encourage your feedback and contributions, which will directly help us refine and improve the Rounded Grid Levels indicator. We look forward to seeing the creative ways in which you use and enhance this tool.
forex_factory_utilityLibrary "forex_factory_utility"
Supporting Utility Library for the Live Economic Calendar by toodegrees Indicator; responsible for data handling, and plotting news event data.
isLeapYear()
Finds if it's currently a leap year or not.
Returns: Returns True if the current year is a leap year.
daysMonth(M)
Provides the days in a given month of the year, adjusted during leap years.
Parameters:
M (int) : Month in numerical integer format (i.e. Jan=1).
Returns: Days in the provided month.
size(S, N)
Converts a size string into the corresponding Pine Script v5 format, or N times smaller/bigger.
Parameters:
S (string) : Size string: "Tiny", "Small", "Normal", "Large", or "Huge".
N (int) : Size variation, can be positive (larger than S), or negative (smaller than S).
Returns: Size string in Pine Script v5 format.
lineStyle(S)
Converts a line style string into the corresponding Pine Script v5 format.
Parameters:
S (string) : Line style string: "Dashed", "Dotted" or "Solid".
Returns: Line style string in Pine Script v5 format.
lineTrnsp(S)
Converts a transparency style string into the corresponding integer value.
Parameters:
S (string) : Line style string: "Light", "Medium" or "Heavy".
Returns: Transparency integer.
boxLoc(X, Y)
Converts position strings of X and Y into a table position in Pine Script v5 format.
Parameters:
X (string) : X-axis string: "Left", "Center", or "Right".
Y (string) : Y-axis string: "Top", "Middle", or "Bottom".
Returns: Table location string in Pine Script v5 format.
method bubbleSort_NewsTOD(N)
Performs bubble sort on a Forex Factory News array of all news from the same date, ordering them in ascending order based on the time of the day.
Namespace types: News
Parameters:
N (News ) : Forex Factory News array.
Returns: void
bubbleSort_News(N)
Performs bubble sort on a Forex Factory News array, ordering them in ascending order based on the time of the day, and date.
Parameters:
N (News ) : Forex Factory News array.
Returns: Sorted Forex Factory News array.
weekNews(N, C, I)
Creates a Forex Factory News array containing the current week's Forex Factory News.
Parameters:
N (News ) : Forex Factory News array containing this week's unfiltered Forex Factory News.
C (string ) : Currency filter array (string array).
I (color ) : Impact filter array (color array).
Returns: Forex Factory News array containing the current week's Forex Factory News.
todayNews(W, D, M)
Creates a Forex Factory News array containing the current day's Forex Factory News.
Parameters:
W (News ) : Forex Factory News array containing this week's Forex Factory News.
D (News ) : Forex Factory News array for the current day's Forex Factory News.
M (bool) : Boolean that marks whether the current chart has a Day candle-switch at Midnight New York Time.
Returns: Forex Factory News array containing the current day's Forex Factory News.
impFilter(X, L, M, H)
Creates a filter array from the User's desired Forex Facory News to be shown based on Impact.
Parameters:
X (bool) : Boolean - if True Holidays listed on Forex Factory will be shown.
L (bool) : Boolean - if True Low Impact listed on Forex Factory News will be shown.
M (bool) : Boolean - if True Medium Impact listed on Forex Factory News will be shown.
H (bool) : Boolean - if True High Impact listed on Forex Factory News will be shown.
Returns: Color array with the colors corresponding to the Forex Factory News to be shown.
curFilter(A, C1, C2, C3, C4, C5, C6, C7, C8, C9)
Creates a filter array from the User's desired Forex Facory News to be shown based on Currency.
Parameters:
A (bool) : Boolean - if True News related to the current Chart's symbol listed on Forex Factory will be shown.
C1 (bool) : Boolean - if True News related to the Australian Dollar listed on Forex Factory will be shown.
C2 (bool) : Boolean - if True News related to the Canadian Dollar listed on Forex Factory will be shown.
C3 (bool) : Boolean - if True News related to the Swiss Franc listed on Forex Factory will be shown.
C4 (bool) : Boolean - if True News related to the Chinese Yuan listed on Forex Factory will be shown.
C5 (bool) : Boolean - if True News related to the Euro listed on Forex Factory will be shown.
C6 (bool) : Boolean - if True News related to the British Pound listed on Forex Factory will be shown.
C7 (bool) : Boolean - if True News related to the Japanese Yen listed on Forex Factory will be shown.
C8 (bool) : Boolean - if True News related to the New Zealand Dollar listed on Forex Factory will be shown.
C9 (bool) : Boolean - if True News related to the US Dollar listed on Forex Factory will be shown.
Returns: String array with the currencies corresponding to the Forex Factory News to be shown.
FF_OnChartLine(N, T, S)
Plots vertical lines where a Forex Factory News event will occur, or has already occurred.
Parameters:
N (News ) : News-type array containing all the Forex Factory News.
T (int) : Transparency integer value (0-100) for the lines.
S (string) : Line style in Pine Script v5 format.
Returns: void
method updateStringMatrix(M, P, V)
Namespace types: matrix
Parameters:
M (matrix)
P (int)
V (string)
FF_OnChartLabel(N, Y, S)
Plots labels where a Forex Factory News has already occurred based on its/their impact.
Parameters:
N (News ) : News-type array containing all the Forex Factory News.
Y (string) : String that gives direction on where to plot the label (options= "Above", "Below", "Auto").
S (string) : Label size in Pine Script v5 format.
Returns: void
historical(T, D, W, X)
Deletes Forex Factory News drawings which are ourside a specific Time window.
Parameters:
T (int) : Number of days input used for Forex Factory News drawings' history.
D (bool) : Boolean that when true will only display Forex Factory News drawings of the current day.
W (bool) : Boolean that when true will only display Forex Factory News drawings of the current week.
X (string) : String that gives direction on what lines to plot based on Time (options= "Past", "Future", "Both").
Returns: void
newTable(P)
Creates a new Table object with parameters tailored to the Forex Factory News Table.
Parameters:
P (string) : Position string for the Table, in Pine Script v5 format.
Returns: Empty Forex Factory News Table.
resetTable(P, S, headTextC, headBgC)
Resets a Table object with parameters and headers tailored to the Forex Factory News Table.
Parameters:
P (string) : Position string for the Table, in Pine Script v5 format.
S (string) : Size string for the Table's text, in Pine Script v5 format.
headTextC (color)
headBgC (color)
Returns: Empty Forex Factory News Table.
logNews(N, TBL, R, S, rowTextC, rowBgC)
Adds an event to the Forex Factory News Table.
Parameters:
N (News) : News-type object.
TBL (table) : Forex Factory News Table object to add the News to.
R (int) : Row to add the event to in the Forex Factory News Table.
S (string) : Size string for the event's text, in Pine Script v5 format.
rowTextC (color)
rowBgC (color)
Returns: void
FF_Table(N, P, S, headTextC, headBgC, rowTextC, rowBgC)
Creates the Forex Factory News Table.
Parameters:
N (News ) : News-type array containing all the Forex Factory News.
P (string) : Position string for the Table, in Pine Script v5 format.
S (string) : Size string for the Table's text, in Pine Script v5 format.
headTextC (color)
headBgC (color)
rowTextC (color)
rowBgC (color)
Returns: Forex Factory News Table.
timeline(N, T, F, D)
Shades Forex Factory News events in the Forex Factory News Table after they occur.
Parameters:
N (News ) : News-type array containing all the Forex Factory News.
T (table) : Forex Facory News table object.
F (color) : Color used as shading once the Forex Factory News has occurred.
D (bool) : Daily Forex Factory News flag.
Returns: Forex Factory News Table.
News
Custom News type which contains informatino about a Forex Factory News Event.
Fields:
dow (series string) : Day of the week, in DDD format (i.e. 'Mon').
dat (series string) : Date, in MMM D format (i.e. 'Jan 1').
_t (series int)
tod (series string) : Time of the day, in hh:mm 24-Hour format (i.e 17:10).
cur (series string) : Currency, in CCC format (i.e. "USD").
imp (series color) : Impact, the respective impact color for Forex Factory News Events.
ttl (series string) : Title, encoded in a custom number mapping (see the toodegrees/toodegrees_forex_factory library to learn more).
tmst (series int)
ln (series line)
TradingView.To Strategy Template (with Dyanmic Alerts)Hello traders,
If you're tired of manual trading and looking for a solid strategy template to pair with your indicators, look no further.
This Pine Script v5 strategy template is engineered for maximum customization and risk management.
Best part?
This Pine Script v5 template facilitates the dynamic construction of TradingView.TO alerts, sparing users the time and effort of mastering the TradingView.TO syntax and manually create alert commands.
This powerful tool gives much power to those who don't know how to code in Pinescript and want to automate their indicators' signals via TradingView.TO bot.
IMPORTANT NOTES
TradingView.TO is a trading bot software that forwards TradingView alerts to your brokers (examples: Binance, Oanda, Coinbase, Bybit, Metatrader 4/5, ...) for automating trading.
Many traders don't know how to create TradingView.TO dynamically-compatible alerts using the data from their TradingView scripts.
Traders using trading bots want their alerts to reflect the stop-loss/take-profit/trailing-stop/stop-loss to break options from your script and then create the orders accordingly.
This script showcases how to create TradingView.TO alerts dynamically.
TRADINGVIEW ALERTS
1) You'll have to create one alert per asset X timeframe = 1 chart.
Example: 1 alert for BTC/USDT on the 5 minutes chart, 1 alert for BTC/USDT on the 15-minute chart (assuming you want your bot to trade the BTC/USDT on the 5 and 15-minute timeframes)
2) Select the Order fills and alert() function calls condition
3) For each alert, the alert message is pre-configured with the text below
{{strategy.order.alert_message}}
Please leave it as it is.
It's a TradingView native variable that will fetch the alert text messages built by the script.
4) TradingView.TO uses webhook technology - setting a webhook URL from the alerts notifications tab is required.
KEY FEATURES
I) Modular Indicator Connection
* plug your existing indicator into the template.
* Only two lines of code are needed for full compatibility.
Step 1: Create your connector
Adapt your indicator with only 2 lines of code and then connect it to this strategy template.
To do so:
1) Find in your indicator where the conditions print the long/buy and short/sell signals.
2) Create an additional plot as below
I'm giving an example with a Two moving averages cross.
Please replicate the same methodology for your indicator, whether a MACD , ZigZag, Pivots , higher-highs, lower-lows or whatever indicator with clear buy and sell conditions.
//@version=5
indicator("Supertrend", overlay = true, timeframe = "", timeframe_gaps = true)
atrPeriod = input.int(10, "ATR Length", minval = 1)
factor = input.float(3.0, "Factor", minval = 0.01, step = 0.01)
= ta.supertrend(factor, atrPeriod)
supertrend := barstate.isfirst ? na : supertrend
bodyMiddle = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none)
upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style = plot.style_linebr)
downTrend = plot(direction < 0 ? na : supertrend, "Down Trend", color = color.red, style = plot.style_linebr)
fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps = false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps = false)
buy = ta.crossunder(direction, 0)
sell = ta.crossunder(direction, 0)
//////// CONNECTOR SECTION ////////
Signal = buy ? 1 : sell ? -1 : 0
plot(Signal, title = "Signal", display = display.data_window)
//////// CONNECTOR SECTION ////////
Important Notes
🔥 The Strategy Template expects the value to be exactly 1 for the bullish signal and -1 for the bearish signal
Now, you can connect your indicator to the Strategy Template using the method below or that one.
Step 2: Connect the connector
1) Add your updated indicator to a TradingView chart
2) Add the Strategy Template as well to the SAME chart
3) Open the Strategy Template settings, and in the Data Source field, select your 🔌Connector🔌 (which comes from your indicator)
Note it doesn’t have to be named 🔌Connector🔌 - you can name it as you want - however, I recommend an explicit name you can easily remember.
From then, you should start seeing the signals and plenty of other stuff on your chart.
🔥 Note that whenever you update your indicator values, the strategy statistics and visuals on your chart will update in real-time
II) BOT Risk Management:
- Max Drawdown:
Mode: Select whether the max drawdown is calculated in percentage (%) or USD.
Value: If the max drawdown reaches this specified value, set a value to halt the bot.
- Max Consecutive Days:
Use Max Consecutive Days BOT Halt: Enable/Disable halting the bot if the max consecutive losing days value is reached.
- Max Consecutive Days: Set the maximum number of consecutive losing days allowed before halting the bot.
- Max Losing Streak:
Use Max Losing Streak: Enable/Disable a feature to prevent the bot from taking too many losses in a row.
- Max Losing Streak Length: Set the maximum length of a losing streak allowed.
Margin Call:
- Use Margin Call: Enable/Disable a feature to exit when a specified percentage away from a margin call to prevent it.
Margin Call (%): Set the percentage value to trigger this feature.
- Close BOT Total Loss:
Use Close BOT Total Loss: Enable/Disable a feature to close all trades and halt the bot if the total loss is reached.
- Total Loss ($): Set the total loss value in USD to trigger this feature.
Intraday BOT Risk Management:
- Intraday Losses:
Use Intraday Losses BOT Halt: Enable/Disable halting the bot on reaching specified intraday losses.
Mode: Select whether the intraday loss is calculated in percentage (%) or USD.
- Max Intraday Losses (%): Set the value for maximum intraday losses.
Limit Intraday Trades:
- Use Limit Intraday Trades: Enable/Disable a feature to limit the number of intraday trades.
- Max Intraday Trades: Set the maximum number of intraday trades allowed.
Restart Intraday EA:
III) Order Types and Position Sizing
- Choose between market or limit orders.
- Set your position size directly in the template.
Please use the position size from the “Inputs” and not the “Properties” tab.
I know it's redundant. - the template needs this value from the "Inputs" tab to build the alerts, and the Backtester needs it from the "Properties" tab.
IV) Advanced Take-Profit and Stop-Loss Options
- Choose to set your SL/TP in either USD or percentages.
- Option for multiple take-profit levels and trailing stop losses.
- Move your stop loss to break even +/- offset in USD for “risk-free” trades.
V) Miscellaneous:
Retry order openings if they fail.
Order Types:
Select and specify order type and price settings.
Position Size:
Define the type and size of positions.
Leverage:
Leverage settings, including margin type and hedge mode.
Session:
Limit trades to specific sessions.
Dates:
Limit trades to a specific date range.
Trades Direction:
Direction: Specify the market direction for opening positions.
VI) Logger
The TradingView.TO commands are logged in the TradingView logger.
You'll find more information about it in this TradingView blog post .
WHY YOU MIGHT NEED THIS TEMPLATE
1) Transform your indicator into a TradingView.TO trading bot more easily than before
Connect your indicator to the template
Create your alerts
Set your EA settings
2) Save Time
Auto-generated alert messages for TradingView.TO.
I tested them all and checked with the support team what could/couldn’t be done.
3) Be in Control
Manage your trading risks with advanced features.
4) Customizable
Fits various trading styles and asset classes.
REQUIREMENTS
* Make sure you have your TradingView.TO account
* If there is any issue with the template, ask me in the comments section - I’ll answer quickly.
BACKTEST RESULTS FROM THIS POST
1) I connected this strategy template to a dummy Supertrend script.
I could have selected any other indicator or concept for this script post.
I wanted to share an example of how you can quickly upgrade your strategy, making it compatible with TradingView.TO.
2) The backtest results aren't relevant for this educational script publication.
I used realistic backtesting data but didn't look too much into optimizing the results, as this isn't the point of why I'm publishing this script.
This strategy is a template to be connected to any indicator - the sky is the limit. :)
3) This template is made to take 1 trade per direction at any given time.
Pyramiding is set to 1 on TradingView.
The strategy default settings are:
* Initial Capital: 100000 USD
* Position Size: 1%
* Commission Percent: 0.075%
* Slippage: 1 tick
* No margin/leverage used
ProfitView Strategy TemplateHello traders,
This script took me a full week of coding/testing, sweat, and tears - and I’m too nice as I’m giving it for free to the community.
If you're tired of manual trading and looking for a solid strategy template to pair with your indicators, look no further.
This Pine Script v5 strategy template is engineered for maximum customization and risk management.
Best part?
This Pine Script v5 template facilitates the dynamic construction of ProfitView alerts, sparing users the time and effort of mastering the ProfitView syntax and manually creating alert commands.
This powerful tool gives much power to those who don't know how to code in Pinescript and want to automate their indicators' signals via the ProfitView Chrome extension.
IMPORTANT NOTES
ProfitView is a trading bot software that forwards TradingView alerts to your brokers (examples: Binance, Oanda, Coinbase, Bybit, etc.) for automating trading.
Many traders don't know how to dynamically create ProfitView-compatible alerts using the data from their TradingView scripts.
Traders using trading bots want their alerts to reflect the stop-loss/take-profit/trailing-stop/stop-loss to break options from your script and then create the orders accordingly.
This script showcases how to create ProfitView alerts dynamically.
TRADINGVIEW ALERTS
1) You'll have to create one alert per asset X timeframe = 1 chart.
Example: 1 alert for EUR/USD on the 5 minutes chart, 1 alert for EUR/USD on the 15-minute chart (assuming you want your bot to trade the EUR/USD on the 5 and 15-minute timeframes)
2) Select the Order fills and alert() function calls condition
3) For each alert, the alert message is pre-configured with the text below
{{strategy.order.alert_message}}
Please leave it as it is.
It's a TradingView native variable that will fetch the alert text messages built by the script.
4) ProfitView doesn't use webhook technology, so setting a webhook URL from the alerts notifications tab is unnecessary.
KEY FEATURES
I) Modular Indicator Connection
* plug your existing indicator into the template.
* Only two lines of code are needed for full compatibility.
Step 1: Create your connector
Adapt your indicator with only 2 lines of code and then connect it to this strategy template.
To do so:
1) Find in your indicator where the conditions print the long/buy and short/sell signals.
2) Create an additional plot as below
I'm giving an example with a Two moving averages cross.
Please replicate the same methodology for your indicator, whether a MACD , ZigZag, Pivots , higher-highs, lower-lows or whatever indicator with clear buy and sell conditions.
//@version=5
indicator("Supertrend", overlay = true, timeframe = "", timeframe_gaps = true)
atrPeriod = input.int(10, "ATR Length", minval = 1)
factor = input.float(3.0, "Factor", minval = 0.01, step = 0.01)
= ta.supertrend(factor, atrPeriod)
supertrend := barstate.isfirst ? na : supertrend
bodyMiddle = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none)
upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style = plot.style_linebr)
downTrend = plot(direction < 0 ? na : supertrend, "Down Trend", color = color.red, style = plot.style_linebr)
fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps = false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps = false)
buy = ta.crossunder(direction, 0)
sell = ta.crossunder(direction, 0)
//////// CONNECTOR SECTION ////////
Signal = buy ? 1 : sell ? -1 : 0
plot(Signal, title = "Signal", display = display.data_window)
//////// CONNECTOR SECTION ////////
Important Notes
🔥 The Strategy Template expects the value to be exactly 1 for the bullish signal and -1 for the bearish signal
Now, you can connect your indicator to the Strategy Template using the method below or that one.
Step 2: Connect the connector
1) Add your updated indicator to a TradingView chart
2) Add the Strategy Template as well to the SAME chart
3) Open the Strategy Template settings, and in the Data Source field, select your 🔌Connector🔌 (which comes from your indicator)
Note it doesn’t have to be named 🔌Connector🔌 - you can name it as you want - however, I recommend an explicit name you can easily remember.
From then, you should start seeing the signals and plenty of other stuff on your chart.
🔥 Note that whenever you update your indicator values, the strategy statistics and visuals on your chart will update in real-time
II) BOT Risk Management:
- Max Drawdown:
Mode: Select whether the max drawdown is calculated in percentage (%) or USD.
Value: If the max drawdown reaches this specified value, set a value to halt the bot.
- Max Consecutive Days:
Use Max Consecutive Days BOT Halt: Enable/Disable halting the bot if the max consecutive losing days value is reached.
- Max Consecutive Days: Set the maximum number of consecutive losing days allowed before halting the bot.
- Max Losing Streak:
Use Max Losing Streak: Enable/Disable a feature to prevent the bot from taking too many losses in a row.
- Max Losing Streak Length: Set the maximum length of a losing streak allowed.
Margin Call:
- Use Margin Call: Enable/Disable a feature to exit when a specified percentage away from a margin call to prevent it.
Margin Call (%): Set the percentage value to trigger this feature.
- Close BOT Total Loss:
Use Close BOT Total Loss: Enable/Disable a feature to close all trades and halt the bot if the total loss is reached.
- Total Loss ($): Set the total loss value in USD to trigger this feature.
Intraday BOT Risk Management:
- Intraday Losses:
Use Intraday Losses BOT Halt: Enable/Disable halting the bot on reaching specified intraday losses.
Mode: Select whether the intraday loss is calculated in percentage (%) or USD.
- Max Intraday Losses (%): Set the value for maximum intraday losses.
Limit Intraday Trades:
- Use Limit Intraday Trades: Enable/Disable a feature to limit the number of intraday trades.
- Max Intraday Trades: Set the maximum number of intraday trades allowed.
Restart Intraday EA:
- Use Restart Intraday EA: Enable/Disable a feature to restart the bot at the first bar of the next day if it has been stopped with an intraday risk management safeguard.
III) Order Types and Position Sizing
- Choose between market, limit, or stop orders.
- Set your position size directly in the template.
Please use the position size from the “Inputs” and not the “Properties” tab.
I know it's redundant. - the template needs this value from the "Inputs" tab to build the alerts, and the Backtester needs it from the "Properties" tab.
IV) Advanced Take-Profit and Stop-Loss Options
- Choose to set your SL/TP in either pips or percentages.
- Option for multiple take-profit levels and trailing stop losses.
- Move your stop loss to break even +/- offset in pips for “risk-free” trades.
V) Miscellaneous
Retry order openings if they fail.
Order Types:
Select and specify order type and price settings.
Position Size:
Define the type and size of positions.
Leverage:
Leverage settings, including margin type and hedge mode.
Session:
Limit trades to specific sessions.
Dates:
Limit trades to a specific date range.
Trades Direction:
Direction: Specify the market direction for opening positions.
VI) Notifications (Telegram/Discord/Email/IFTTT/Twilio/SMS)
Customize notifications sent to Telegram, Discord, Email, IFTTT, Twilio, and ProfitView Logger.
VII) Logger
The ProfitView commands are logged in the TradingView logger.
You'll find more information about it in this TradingView blog post .
WHY YOU MIGHT NEED THIS TEMPLATE
1) Transform your indicator into a ProfitView trading bot more easily than before
Connect your indicator to the template
Create your alerts
Set your EA settings
2) Save Time
Auto-generated alert messages for ProfitView.
I tested them all and checked with the support team what could/couldn’t be done.
3) Be in Control
Manage your trading risks with advanced features.
4) Customizable
Fits various trading styles and asset classes.
REQUIREMENTS
* Make sure you have your ProfitView account and do the settings correctly in your Chrome extension. If you don't know how to do it, read the documentation + ask for help in the ProfitView Discord support channel.
* If there is any issue with the template, ask me in the comments section - I’ll answer quickly.
BACKTEST RESULTS FROM THIS POST
1) I connected this strategy template to a dummy Supertrend script.
I could have selected any other indicator or concept for this script post.
I wanted to share an example of how you can quickly upgrade your strategy, making it compatible with ProfitView.
2) The backtest results aren't relevant for this educational script publication.
I used realistic backtesting data but didn't look too much into optimizing the results, as this isn't the point of why I'm publishing this script.
This strategy is a template to be connected to any indicator - the sky is the limit. :)
3) This template is made to take 1 trade per direction at any given time.
Pyramiding is set to 1 on TradingView.
The strategy default settings are:
* Initial Capital: 100000 USD
* Position Size: 1%
* Commission Percent: 0.075%
* Slippage: 1 tick
* No margin/leverage used
Best regards,
Dave
RSI Box Strategy (pseudo- Grid Bot)This is a strategy intended primarily for algorithmic traders. It's a pseudo-grid bot that uses a dynamic, volume-weighted grid that only updates when the RSI meets certain conditions. It's also a breakout strategy, whereas normal grid bots are not (typical grid bots sell when a higher grid is reached, whereas this strategy sells when a lower grid is breached under specific conditions). This strategy also sells 100% of pyramiding orders on close.
In a nutshell, the strategy updates its grid to the volume-weighted highest/lowest values of your given source ("src" in the settings) each time that there is a RSI crossunder/crossover. From this range it produces an evenly-spaced grid of five lines, and uses the current source to determine which grid line is closest to the source. Then, if the source crosses over the line directly above the current line, it enters a buy order. If the source crosses under the line directly below the current line, it enters a sell order.
You can configure shorts, source, RSI length, and overbought/oversold levels in the settings.
For the strategy results below: fees are at 0.1% per trade, with order size 1% of equity and a max pyramiding value of 33. For a greater R/R profile, you can increase the order size, which will increase drawdown but potentially yield better results.
lib_arrayLibrary "lib_array"
several array functions for chained calls, batch conversion, incrementing and comparing arrays.
method sort(id, descending)
Namespace types: int
Parameters:
id (int ) : The array to sort (and return again)
descending (bool) : The sort order: order.ascending (default:false, meaning omit this param and just call myArray.sort()) or order.descending => set descending=true
@return The array that was passed as parameter id
method sort(id, descending)
Namespace types: float
Parameters:
id (float ) : The array to sort (and return again)
descending (bool) : The sort order: order.ascending (default:false, meaning omit this param and just call myArray.sort()) or order.descending => set descending=true
@return The array that was passed as parameter id
method sort(id, descending)
Namespace types: string
Parameters:
id (string ) : The array to sort (and return again)
descending (bool) : The sort order: order.ascending (default:false, meaning omit this param and just call myArray.sort()) or order.descending => set descending=true
@return The array that was passed as parameter id
method increment(id, by_value)
Namespace types: int
Parameters:
id (int ) : The array to increment (and return again)
by_value (int) : The value by which to increment (default: 1)
@return The array that was passed as parameter id
method increment(id, by_value)
Namespace types: float
Parameters:
id (float ) : The array to increment (and return again)
by_value (float) : The value by which to increment (default: 1.0)
@return The array that was passed as parameter id
method decrement(id, by_value)
Namespace types: int
Parameters:
id (int ) : The array to increment (and return again)
by_value (int) : The value by which to increment (default: 1)
@return The array that was passed as parameter id
method decrement(id, by_value)
Namespace types: float
Parameters:
id (float ) : The array to increment (and return again)
by_value (float) : The value by which to increment (default: 1.0)
@return The array that was passed as parameter id
method toint(id)
Namespace types: string
Parameters:
id (string ) : The array to convert
method toint(id)
Namespace types: float
Parameters:
id (float ) : The array to convert
method tofloat(id)
Namespace types: string
Parameters:
id (string ) : The array to convert
method tofloat(id)
Namespace types: int
Parameters:
id (int ) : The array to convert
method tostring(id)
Namespace types: int
Parameters:
id (int ) : The array to convert
method tostring(id)
Namespace types: float
Parameters:
id (float ) : The array to convert
method tobool(id)
Namespace types: float
Parameters:
id (float ) : The array to convert
method tobool(id)
Namespace types: int
Parameters:
id (int ) : The array to convert
method tobool(id)
Namespace types: string
Parameters:
id (string ) : The array to convert
method sum(id)
Namespace types: bool
Parameters:
id (bool ) : The array to convert
method enqueue(id, item, max, condition, lifo)
Namespace types: int
Parameters:
id (int ) : The array that is used as queue
item (int) : The item to enqueue (at pos 0, unless lifo = true)
max (int) : The max size of the queue
condition (bool) : An optional flag that allows disabling the adding, which in turn will prevent for in loops from ever running and save performance where not needed
lifo (bool) : An optional flag that allows to change the behavior from First In Last Out (default and consistent with pine scripts history operator with most recent elements at index 0) to a more common and resource efficient approach in programming languages: Last In First Out
Returns: The queue passed as param id
method enqueue(id, item, max, condition, lifo)
Namespace types: float
Parameters:
id (float ) : The array that is used as queue
item (float) : The item to enqueue (at pos 0, unless lifo = true)
max (int) : The max size of the queue
condition (bool) : An optional flag that allows disabling the adding, which in turn will prevent for in loops from ever running and save performance where not needed
lifo (bool) : An optional flag that allows to change the behavior from First In Last Out (default and consistent with pine scripts history operator with most recent elements at index 0) to a more common and resource efficient approach in programming languages: Last In First Out
Returns: The queue passed as param id
method enqueue(id, item, max, condition, lifo)
Namespace types: string
Parameters:
id (string ) : The array that is used as queue
item (string) : The item to enqueue (at pos 0, unless lifo = true)
max (int) : The max size of the queue
condition (bool) : An optional flag that allows disabling the adding, which in turn will prevent for in loops from ever running and save performance where not needed
lifo (bool) : An optional flag that allows to change the behavior from First In Last Out (default and consistent with pine scripts history operator with most recent elements at index 0) to a more common and resource efficient approach in programming languages: Last In First Out
Returns: The queue passed as param id
method enqueue(id, item, max, condition, lifo)
Namespace types: line
Parameters:
id (line ) : The array that is used as queue
item (line) : The item to enqueue (at pos 0, unless lifo = true)
max (int) : The max size of the queue
condition (bool) : An optional flag that allows disabling the adding, which in turn will prevent for in loops from ever running and save performance where not needed
lifo (bool) : An optional flag that allows to change the behavior from First In Last Out (default and consistent with pine scripts history operator with most recent elements at index 0) to a more common and resource efficient approach in programming languages: Last In First Out
Returns: The queue passed as param id
method enqueue(id, item, max, condition, lifo)
Namespace types: box
Parameters:
id (box ) : The array that is used as queue
item (box) : The item to enqueue (at pos 0, unless lifo = true)
max (int) : The max size of the queue
condition (bool) : An optional flag that allows disabling the adding, which in turn will prevent for in loops from ever running and save performance where not needed
lifo (bool) : An optional flag that allows to change the behavior from First In Last Out (default and consistent with pine scripts history operator with most recent elements at index 0) to a more common and resource efficient approach in programming languages: Last In First Out
Returns: The queue passed as param id
ArrayExtensionLibrary "ArrayExtension"
Functions to extend Arrays.
index_2d_to_1d(dimension_x, dimension_y, index_x, index_y) returns the flatened one dimension index of a two dimension array.
Parameters:
dimension_x : int, dimension of X.
dimension_y : int, dimension of Y.
index_x : int, index of X.
index_y : int, index of Y.
Returns: int, index in 1 dimension
index_3d_to_1d(dimension_x, dimension_y, dimension_z, index_x, index_y, index_z) returns the flatened one dimension index of a three dimension array.
Parameters:
dimension_x : int, dimension of X.
dimension_y : int, dimension of Y.
dimension_z : int, dimension of Z.
index_x : int, index of X.
index_y : int, index of Y.
index_z : int, index of Z.
Returns: int, index in 1 dimension
down_sample(sample, new_size) Down samples a array to a specified size.
Parameters:
sample : float array, array with source data.
new_size : new size of down sampled array.
Returns: float array with down sampled data.
sort_indices_float(sample, order) Sorts array and returns a extra array with sorting indices.
Parameters:
sample : float array with values to be sorted.
order : string, default='forward', options='forward', 'backward'.
Returns: _indices int array with indices.
_ordered float array with ordered values.
sort_indices_int(sample, order) Sorts array and returns a extra array with sorting indices.
Parameters:
sample : int array with values to be sorted.
order : string, default='forward', options='forward', 'backward'.
Returns: _indices int array with indices.
_ordered float array with ordered values.
sort_bool_from_indices(indices, sample) Sorts sample array using a array with indices.
Parameters:
indices : int array with positional indices.
sample : bool array with data sample to be sorted.
Returns: bool array
sort_box_from_indices(indices, sample) Sorts sample array using a array with indices.
Parameters:
indices : int array with positional indices.
sample : box array with data sample to be sorted.
Returns: box array
sort_color_from_indices(indices, sample) Sorts sample array using a array with indices.
Parameters:
indices : int array with positional indices.
sample : color array with data sample to be sorted.
Returns: color array
sort_float_from_indices(indices, sample) Sorts sample array using a array with indices.
Parameters:
indices : int array with positional indices.
sample : float array with data sample to be sorted.
Returns: float array
sort_int_from_indices(indices, sample) Sorts sample array using a array with indices.
Parameters:
indices : int array with positional indices.
sample : int array with data sample to be sorted.
Returns: int array
sort_label_from_indices(indices, sample) Sorts sample array using a array with indices.
Parameters:
indices : int array with positional indices.
sample : label array with data sample to be sorted.
Returns: label array
sort_line_from_indices(indices, sample) Sorts sample array using a array with indices.
Parameters:
indices : int array with positional indices.
sample : line array with data sample to be sorted.
Returns: line array
sort_string_from_indices(indices, sample) Sorts sample array using a array with indices.
Parameters:
indices : int array with positional indices.
sample : string array with data sample to be sorted.
Returns: string array
sort_table_from_indices(indices, sample) Sorts sample array using a array with indices.
Parameters:
indices : int array with positional indices.
sample : table array with data sample to be sorted.
Returns: table array
sort_bool_inplace_from_indices(indices, sample) Sorts sample array inplace using a array with indices.
Parameters:
indices : int array with positional indices.
sample : bool array with data sample to be sorted.
Returns: void updates sample array.
sort_box_inplace_from_indices(indices, sample) Sorts sample array inplace using a array with indices.
Parameters:
indices : int array with positional indices.
sample : box array with data sample to be sorted.
Returns: void updates sample
sort_color_inplace_from_indices(indices, sample) Sorts sample array inplace using a array with indices.
Parameters:
indices : int array with positional indices.
sample : color array with data sample to be sorted.
Returns: void updates sample
sort_float_inplace_from_indices(indices, sample) Sorts sample array inplace using a array with indices.
Parameters:
indices : int array with positional indices.
sample : float array with data sample to be sorted.
Returns: void updates sample
sort_int_inplace_from_indices(indices, sample) Sorts sample array inplace using a array with indices.
Parameters:
indices : int array with positional indices.
sample : int array with data sample to be sorted.
Returns: void updates sample
sort_label_inplace_from_indices(indices, sample) Sorts sample array inplace using a array with indices.
Parameters:
indices : int array with positional indices.
sample : label array with data sample to be sorted.
Returns: void updates sample
sort_line_inplace_from_indices(indices, sample) Sorts sample array inplace using a array with indices.
Parameters:
indices : int array with positional indices.
sample : line array with data sample to be sorted.
Returns: void updates sample
sort_string_inplace_from_indices(indices, sample) Sorts sample inplace array using a array with indices.
Parameters:
indices : int array with positional indices.
sample : string array with data sample to be sorted.
Returns: void updates sample
sort_table_inplace_from_indices(indices, sample) Sorts sample array inplace using a array with indices.
Parameters:
indices : int array with positional indices.
sample : table array with data sample to be sorted.
Returns: void updates sample
to_float(sample) Transform a integer array into a float array
Parameters:
sample : int array, sample data to transform.
Returns: float array
to_int(sample, method) Transform a float array into a int array
Parameters:
sample : float array, sample data to transform.
method : string, default="round", options= , aproximation method.
Returns: int array
st_longThis indicator allows you to schedule a long trade for several trades (from 3 to 5). Variable parameters of the indicator: leverage, Martingale coefficient, risk per trade, number of trades, entry price, estimated take profit price and table position (by default, from the bottom right, possibly from the top right). The table shows the grid of orders: order prices, position volumes, the amount of funds per order and the potential profit if this order is executed and eventually the price closes with a take profit.
st_shortThis indicator allows you to schedule a short trade for several trades (from 3 to 5). Variable parameters of the indicator: leverage, Martingale coefficient, risk per trade, number of trades, entry price, estimated take profit price and table position (by default, from the bottom right, possibly from the top right). The table shows the grid of orders: order prices, position volumes, the amount of funds per order and the potential profit if this order is executed and eventually the price closes with a take profit.
RSI-VWAP Indicator %█ OVERALL
Simple and effective script that, as you already know, uses vwap as source of the rsi, and with good results as long as the market has no long-term downtrend.
RsiVwap = rsi (vwap (close), Length)
The default settings are for BTC in a 30 minute time frame. For other pairs and time frames you just have to play with the settings.
█ FEATURES
• The option to start trading from a certain date has been added.
• To make the profit more progressive, a percentage of your equity is used for entries and a percentage of your position is used for closings.
• The option to trade in Spot mode has been added, since, for the TradingView backtest, the money is infinite and if you do not limit it somehow,
it would offer you much better profits than the live trading.
QuantityOnLong = Spot ? (EquityPercent / 100) * ((strategy.equity / close) - strategy.position_size) : (EquityPercent / 100) * (strategy.equity / close)
• The option to stop the system when the drawdown exceeds the fixed limit has been added.
Drawdown, as you already know, is a very important measure of risk in trading systems.
The maximum drawdown will tell us what the maximum loss of a trading system has been during a period. This maximum loss is determined by:
strategy.risk.max_drawdown(Risk, strategy.percent_of_equity)
• Leverage plotted on labels added.
█ ALERTS
To enjoy the benefits of automatic trading, TradingView alerts can be used as direct buy-sell orders on spot, or long-close orders with leverage.
Currently there are Chrome extensions that act as a bridge between TradingView and your Exchange or Broker.
This is an example of syntax for this type of extensions. Copy and paste a message like this into the alert window:
{{strategy.order.action}} @ {{strategy.order.price}} | e = {{exchange}} a = account s = {{ticker}} b = {{strategy.order.action}} {{strategy.order.alert_message}}
█ NOTE
Certain Risks of Live Algorithmic Trading You Should Know:
• Backtesting cannot assure actual results.
• The relevant market might fail or behave unexpectedly.
• Your broker may experience failures in its infrastructure, fail to execute your orders in a correct or timely fashion or reject your orders.
• The system you use for generating trading orders, communicating those orders to your broker, and receiving queries and trading results from your broker may fail.
• Time lag at various point in live trading might cause unexpected behavior.
• The systems of third parties in addition to those of the provider from which we obtain various services, your broker, and the applicable securities market may fail or malfunction.
█ THANKS
Thanks to TradingView, its Pine code, its community and especially those Pine wizards who post their ideas that helps us to learn.
If the world is heading toward a equitable new world economic order, let's get rich first ...
Happy trading!
Two Bar Break Line Alerts R1.0 by JustUncleLThis indicator with default settings is designed for BINARY OPTIONS trading. The indicator can also be used for Forex trading with some setting changes. The script shows Two Bar Pullback Break lines and alerts when those Break lines are Touched (broken) creating a short term momentum entry condition.
For a Bullish Break (Green Up Arrow) to occur: first must have two (or three) consecutive bear (red) candles which is followed by a bull (green) candle creating a pivot point. The breakout occurs then the High of the current Bull (green) exceeds the highest point of the previous two (or three) pivotal bear candles. The green channel Line shows where the current Bullish BreakOut occurs.
For a Bearish Break (Red Down Arrow) to occur: first must have two (or three) consecutive bull (green) candles which is followed by a bear (red) candle creating a pivot point. The breakout occurs when the Low of the current Bear (red) drops below the lowest point of the previous two (or three) pivotal Bull candles. The red channel Line shows where the current Bearish BreakOut occurs.
The break Line Arrows can optionally be filtered by the Coloured MA (enabled by default), a longer term directional MA (disabled by default) and/or a MACD condition (enabled by default) as a momentum filter.
You can optionally select three Bar break lines instead of two. The three bar break lines are actually equivalent to Guppy's Three Bar Count Back Line method for trade entries (see Guppy's video reference below).
Included in this indicator is an ability to display some basic Binary Option statistics, when enabled (enabled by default) it shows Successful Bars in Yellow and failed Bars in Black and the last Nine numbers on the script title line represent the Binary option Statistics in order:
%ITM rate
Total orders
Successful Orders
Failed Orders
Total candles tested
Candles per Day
Trades per Day
Max Consecutive Wins
Max Consecutive Losses
You can start the Binary Option statistics from a specific Date, which is handy for checking more recent history.
HINTS:
BINARY OPTIONS trading: use 5min, 15m, 1hr or even Daily charts. Trade after the price touches one of the Breakout lines and the Arrow first appears. Wait for the price to come back from Break Line by 1 or 2 pips, the alert arrow must stay on and candle change to black, then take Binary trade expiry End of Candle. If price pull back and arrow turns off, don't trade this candle, move on you probably don't have momentum, there will be plenty of other trigger events. The backtesting results are good with ITM rates 65% to 72% on many currency pairs, commodities and indices. Realtime trading has confirmed the backtesting results and they could even be bettered, provided you are selective on which signals to trade (strong MACD support etc), that you are patient and disciplined to this trading method.
FOREX trading: the default settings should work with scalping. For longer term trades try with settings change to a more standard MACD filter or slower to catch the longer term momentum swings and the idea would be to trade the first Break Line alert that occurs after a decent Pullback in the direction of the trend. Setting the SL to just above/below the Pivot High/Low and set target to two or three times SL.
References:
"Fundamentals of Price Action Trading for Forex, Stocks, Options and Futures" video:
www.youtube.com
Other videos by "basecamptrading" on Naked Trading.
"Taking Profits in Today's Market by Daryl Guppy" video:
www.youtube.com
Fibonacci Counter-Trend TradingOverview:
The Fibonacci Counter-Trend Trading strategy is designed to capitalize on price reversals by utilizing Fibonacci levels calculated from the standard deviation of price movements. This strategy opens a sell order when the closing price crosses above a specified upper Fibonacci level and a buy order when the closing price crosses below a specified lower Fibonacci level. By leveraging the principles of Fibonacci retracement and volatility, this strategy aims to identify potential reversal points in the market.
How It Works:
Fibonacci Levels Calculation:
The strategy calculates upper and lower Fibonacci levels based on the standard deviation of the price over a specified moving average length. These levels are derived from the Fibonacci sequence, which is widely used in technical analysis to identify potential support and resistance levels.
The upper levels are calculated by adding specific Fibonacci ratios (0.236, 0.382, 0.5, 0.618, 0.764, and 1.0) multiplied by the standard deviation to the basis (the volume-weighted moving average).
The lower levels are calculated by subtracting the same Fibonacci ratios multiplied by the standard deviation from the basis.
Trade Entry Rules:
Sell Order: A sell order is triggered when the closing price crosses above the selected upper Fibonacci level. This indicates a potential reversal point where the price may start to decline.
Buy Order: A buy order is initiated when the closing price crosses below the selected lower Fibonacci level. This suggests a potential reversal point where the price may begin to rise.
Trade Management:
The strategy includes stop-losses based on the Fibonacci levels to protect against adverse price movements.
How to Use:
Users can customize the moving average length and the multiplier for the standard deviation to suit their trading preferences and market conditions.
The strategy can be applied to various financial instruments, including stocks, forex, and cryptocurrencies, making it versatile for different trading environments.
Pros:
The Fibonacci Counter-Trend Trading strategy combines the mathematical principles of the Fibonacci sequence with the statistical measure of standard deviation, providing a unique approach to identifying potential market reversals.
This strategy is particularly useful in volatile markets where price swings can lead to significant trading opportunities.
The use of Fibonacci levels can help traders identify key support and resistance areas, enhancing decision-making.
Cons:
The strategy may generate false signals in choppy or sideways markets, leading to potential losses if the price does not reverse as anticipated.
Relying solely on Fibonacci levels without considering other technical indicators or market conditions may result in missed opportunities or increased risk.
The effectiveness of the strategy can vary depending on the chosen parameters (e.g., moving average length and standard deviation multiplier), requiring users to spend time optimizing these settings for different market conditions.
As with any counter-trend strategy, there is a risk of significant drawdowns during strong trending markets, where the price continues to move in one direction without reversing.
By understanding the mechanics of the Fibonacci Counter-Trend Trading strategy, along with its pros and cons, traders can effectively implement it in their trading routines and potentially enhance their trading performance.
Scalping trading system based on 4 ema linesScalping Trading System Based on 4 EMA Lines
Overview:
This is a scalping trading strategy built on signals from 4 EMA moving averages: EMA(8), EMA(12), EMA(24) and EMA(72).
Conditions:
- Time frame: H1 (1 hour).
- Trading assets: Applicable to major currency pairs with high volatility
- Risk management: Use a maximum of 1-2% of capital for each transaction. The order holding time can be from a few hours to a few days, depending on the price fluctuation amplitude.
Trading rules:
Determine the main trend:
Uptrend: EMA(8), EMA(12) and EMA(24) are above EMA(72).
Downtrend: EMA(8), EMA(12) and EMA(24) are below EMA(72).
Trade in the direction of the main trend** (buy in an uptrend and sell in a downtrend).
Entry conditions:
- Only trade in a clearly trending market.
Uptrend:
- Wait for the price to correct to the EMA(24).
- Enter a buy order when the price closes above the EMA(24).
- Place a stop loss below the bottom of the EMA(24) candle that has just been swept.
Downtrend:
- Wait for the price to correct to the EMA(24).
- Enter a sell order when the price closes below the EMA(24).
- Place a stop loss above the top of the EMA(24) candle that has just been swept.
Take profit and order management:
- Take profit when the price moves 20 to 40 pips in the direction of the trade.
Use Trailing Stop to optimize profits instead of setting a fixed Take Profit.
Note:
- Do not trade within 30 minutes before and after the announcement of important economic news, as the price may fluctuate abnormally.
Additional filters:
To increase the success rate and reduce noise, this strategy uses additional conditions:
1. The price is calculated only when the candle closes (no repaint).
2. When sweeping through EMA(24), the price needs to close above EMA(24).
3. The closing price must be higher than 50% of the candle's length.
4. **The bottom of the candle sweeping through EMA(24) must be lower than the bottom of the previous candle (liquidity sweep).
---
Alert function:
When the EMA(24) sweep conditions are met, the system will trigger an alert if you have set it up.
- Entry point: The closing price of the candle sweeping through EMA(24).
- Stop Loss:
- Buy Order: Place at the bottom of the sweep candle.
- Sell Order: Place at the top of the sweep candle.
---
Note:
This strategy is designed to help traders identify profitable trading opportunities based on trends. However, no strategy is 100% guaranteed to be successful. Please test it thoroughly on a demo account before using it.
Moving Average Crossover Strategy with Take Profit and Stop LossThe Moving Average Crossover Strategy is a popular trading technique that utilizes two moving averages (MAs) of different periods to identify potential buy and sell signals. By incorporating take profit and stop loss levels, traders can effectively manage their risk while maximizing potential returns. Here’s a detailed explanation of how this strategy works:
Overview of the Moving Average Crossover Strategy
Moving Averages:
A short-term moving average (e.g., 50-day MA) reacts more quickly to price changes, while a long-term moving average (e.g., 200-day MA) smooths out price fluctuations over a longer period.
The strategy generates trading signals based on the crossover of these two averages:
Buy Signal: When the short-term MA crosses above the long-term MA (often referred to as a "Golden Cross").
Sell Signal: When the short-term MA crosses below the long-term MA (known as a "Death Cross").
Implementing Take Profit and Stop Loss
1. Setting Take Profit Levels
Definition: A take profit order automatically closes a trade when it reaches a specified profit level.
Strategy:
Determine a realistic profit target based on historical price action, support and resistance levels, or a fixed risk-reward ratio (e.g., 2:1).
For instance, if you enter a buy position at $100, you might set a take profit at $110 if you anticipate that level will act as resistance.
2. Setting Stop Loss Levels
Definition: A stop loss order limits potential losses by closing a trade when the price reaches a specified level.
Strategy:
Place the stop loss just below the most recent swing low for buy orders or above the recent swing high for sell orders.
Alternatively, you can use a percentage-based method (e.g., 2-3% below the entry point) to define your stop loss.
For example, if you enter a buy position at $100 with a stop loss set at $95, your maximum loss would be limited to $5 per share.
Example of Using Moving Average Crossover with Take Profit and Stop Loss
Entry Signal:
You observe that the 50-day MA crosses above the 200-day MA at $100. You enter a buy position.
Setting Take Profit and Stop Loss:
You analyze historical price levels and set your take profit at $110.
You place your stop loss at $95 based on recent swing lows.
Trade Management:
If the price rises to $110, your take profit order is executed, securing your profit.
If the price falls to $95, your stop loss is triggered, limiting your losses.
ICT Panther (By Obicrypto) V1 ICT Panther Indicator: Full and Detailed Description
The ICT Panther Indicator, created by Obicrypto, is an advanced technical analysis tool designed specifically for traders looking to identify key price action events based on institutional trading techniques, particularly in the context of the Inner Circle Trader (ICT) methodology. This indicator helps traders spot market structure breaks, order blocks, and potential trade opportunities driven by institutional behaviors in the market. Here's a detailed breakdown of its features and how it works:
What Does the ICT Panther Indicator Do?
1. Market Structure Breaks (MSB) Identification:
The ICT Panther identifies critical points where the market changes direction, commonly referred to as a break of structure (BoS). When the price breaks above or below certain key levels (based on highs and lows or opens and closes), it signals a potential shift in market sentiment. These break-of-structure points are essential for traders to determine whether the market is likely to continue its trend or reverse.
2. Order Blocks Visualization:
The indicator plots demand (bullish) and supply (bearish) boxes, which represent areas where institutional traders might place significant buy or sell orders. These zones, known as order blocks, are areas where the price tends to pause or reverse, giving traders key insights into potential entry and exit points. The indicator shows these areas graphically as colored boxes on the chart, which can be used to plan trades based on market structure and price action.
3. Pivot Point Detection:
The ICT Panther identifies important pivot points by tracking higher highs and lower lows. These pivot points are critical in determining the strength of a trend and can help traders confirm the direction of the market. The indicator uses a unique algorithm to detect two levels of pivot points:
- First-Order Pivots: Major pivot points where the price makes notable highs and lows.
- Second-Order Pivots: Smaller pivot points, useful for detecting microtrends within the larger market structure.
4. Bullish and Bearish Break of Structure Lines:
When a significant market structure break (BoS) occurs, the indicator will automatically draw red lines (for bearish break of structure) and green lines (for bullish break of structure) at key price levels. These lines help traders quickly see where institutional moves have occurred in the past and where potential future price moves could originate from.
5. Tested and Filled Boxes:
The ICT Panther also has a built-in mechanism to dim previously tested order blocks. When the price tests an order block (returns to a previous demand or supply zone), the box's color dims to indicate that the area has already been tested, reducing its significance. If the price fully fills an order block, the box stops plotting, providing a clear and clutter-free chart.
Key Features
1. Market Structure Break (MSB) Trigger:
- The indicator allows users to select between highs/lows or opens/closes as the trigger for market structure breaks. This flexibility lets traders adjust the indicator to suit their personal trading style or the behavior of specific assets.
2. Order Block Detection and Visualization:
- The tool automatically plots bullish and bearish demand and supply boxes, representing institutional order blocks on the chart. These boxes provide visual cues for areas of potential price action, where institutional traders might be active.
3. Second-Order Pivot Highlighting:
- The ICT Panther offers an option to plot second-order pivots, highlighting smaller pivot points within the larger market structure. These pivots can be helpful for short-term traders who need to react to smaller price movements while still keeping the larger trend in mind.
4. Box Test and Fill Delays:
- Users can configure delays for box tests and box fills, meaning the indicator will only mark a box as tested or filled after a certain number of bars. This prevents false signals and helps confirm that a zone is truly significant in the market.
5. Customization and Visual Clarity:
- The indicator is highly customizable, allowing users to turn on or off various features like:
- Displaying second-order pivots.
- Highlighting candles that broke structure.
- Plotting market structure broke lines.
- Showing or hiding tested and filled demand boxes.
- Setting custom delays for box testing and filling to suit different market conditions.
6. Tested and Filled Order Block Visualization:
- The indicator visually adjusts the tested and filled order blocks, dimming tested zones and removing filled zones to avoid clutter on the chart. This ensures that traders can focus on active trading opportunities without distractions from historical data.
How Does It Work?
1. Detecting Market Structure Breaks (BoS):
- The indicator continuously tracks the market for key price action signals. When the price breaks through previous highs or lows (or opens and closes, depending on your selection), the indicator marks this as a break of structure. This is a critical signal used by institutional traders and retail traders alike to determine potential future price movements.
2. Order Block Identification:
- Whenever a bullish break of structure occurs, the indicator plots a green demand box to show the area where institutional buyers might have placed significant orders. Similarly, for a bearish break of structure, it plots a red supply box representing areas where institutional sellers are active.
3. Pivot Analysis and Tracking:
- As the market moves, the indicator continuously updates first-order and second-order pivot points based on highs and lows. These points help traders identify whether the market is trending or consolidating. Traders can use these pivot points in combination with the order blocks to make informed trading decisions.
4. Box Testing and Filling:
- When the price retests an existing order block, the box dims to show it has been tested. If the price fully fills the box, it is no longer shown, which helps traders focus on the most relevant, untested order blocks.
Benefits for Traders
- Improved Decision-Making: With clear visuals and advanced logic based on institutional trading strategies, this indicator provides a deeper understanding of market structure and price action.
- Reduced Clutter: The indicator intelligently manages the display of order blocks and pivot points, ensuring that traders focus only on the most relevant information.
- Adaptability: Whether you are a swing trader or a day trader, the ICT Panther can be adjusted to fit your trading style, offering robust and flexible tools for tracking market structure and order blocks.
- Institutional Edge: By identifying institutional-level order blocks and market structure breaks, traders using this indicator can trade in line with the strategies of large market participants.
Who Should Use the ICT Panther Indicator?
This indicator is ideal for:
- Crypto, Forex, and Stock Traders who want to incorporate institutional trading concepts into their strategies.
- Technical Analysts looking for precise tools to measure the market structure and price action.
- ICT Traders who follow the Inner Circle Trader methodology and want an advanced tool to automate and enhance their analysis.
- Price Action Traders seeking a reliable indicator to track pivot points, order blocks, and market structure breaks.
The ICT Panther Indicator is a powerful, versatile tool that brings institutional trading techniques to the fingertips of retail traders. Whether you are looking to identify key market structure breaks, order blocks, or crucial pivot points, this indicator offers detailed visualizations and customizable options to help you make more informed trading decisions. With its ability to track the activities of institutional traders, the ICT Panther Indicator equips traders with the insights needed to stay ahead of the market and trade with confidence.
With the ICT Panther Indicator, traders can follow the movements of institutional money, making it easier to predict market direction and capitalize on high-probability trading opportunities.
Enjoy it and share it with your friends!
Multiple Naked LevelsPURPOSE OF THE INDICATOR
This indicator autogenerates and displays naked levels and gaps of multiple types collected into one simple and easy to use indicator.
VALUE PROPOSITION OF THE INDICATOR AND HOW IT IS ORIGINAL AND USEFUL
1) CONVENIENCE : The purpose of this indicator is to offer traders with one coherent and robust indicator providing useful, valuable, and often used levels - in one place.
2) CLUSTERS OF CONFLUENCES : With this indicator it is easy to identify levels and zones on the chart with multiple confluences increasing the likelihood of a potential reversal zone.
THE TYPES OF LEVELS AND GAPS INCLUDED IN THE INDICATOR
The types of levels include the following:
1) PIVOT levels (Daily/Weekly/Monthly) depicted in the chart as: dnPIV, wnPIV, mnPIV.
2) POC (Point of Control) levels (Daily/Weekly/Monthly) depicted in the chart as: dnPoC, wnPoC, mnPoC.
3) VAH/VAL STD 1 levels (Value Area High/Low with 1 std) (Daily/Weekly/Monthly) depicted in the chart as: dnVAH1/dnVAL1, wnVAH1/wnVAL1, mnVAH1/mnVAL1
4) VAH/VAL STD 2 levels (Value Area High/Low with 2 std) (Daily/Weekly/Monthly) depicted in the chart as: dnVAH2/dnVAL2, wnVAH2/wnVAL2, mnVAH1/mnVAL2
5) FAIR VALUE GAPS (Daily/Weekly/Monthly) depicted in the chart as: dnFVG, wnFVG, mnFVG.
6) CME GAPS (Daily) depicted in the chart as: dnCME.
7) EQUILIBRIUM levels (Daily/Weekly/Monthly) depicted in the chart as dnEQ, wnEQ, mnEQ.
HOW-TO ACTIVATE LEVEL TYPES AND TIMEFRAMES AND HOW-TO USE THE INDICATOR
You can simply choose which of the levels to be activated and displayed by clicking on the desired radio button in the settings menu.
You can locate the settings menu by clicking into the Object Tree window, left-click on the Multiple Naked Levels and select Settings.
You will then get a menu of different level types and timeframes. Click the checkboxes for the level types and timeframes that you want to display on the chart.
You can then go into the chart and check out which naked levels that have appeared. You can then use those levels as part of your technical analysis.
The levels displayed on the chart can serve as additional confluences or as part of your overall technical analysis and indicators.
In order to back-test the impact of the different naked levels you can also enable tapped levels to be depicted on the chart. Do this by toggling the 'Show tapped levels' checkbox.
Keep in mind however that Trading View can not shom more than 500 lines and text boxes so the indocator will not be able to give you the complete history back to the start for long duration assets.
In order to clean up the charts a little bit there are two additional settings that can be used in the Settings menu:
- Selecting the price range (%) from the current price to be included in the chart. The default is 25%. That means that all levels below or above 20% will not be displayed. You can set this level yourself from 0 up to 100%.
- Selecting the minimum gap size to include on the chart. The default is 1%. That means that all gaps/ranges below 1% in price difference will not be displayed on the chart. You can set the minimum gap size yourself.
BASIC DESCRIPTION OF THE INNER WORKINGS OF THE INDICTATOR
The way the indicator works is that it calculates and identifies all levels from the list of levels type and timeframes above. The indicator then adds this level to a list of untapped levels.
Then for each bar after, it checks if the level has been tapped. If the level has been tapped or a gap/range completely filled, this level is removed from the list so that the levels displayed in the end are only naked/untapped levels.
Below is a descrition of each of the level types and how it is caluclated (algorithm):
PIVOT
Daily, Weekly and Monthly levels in trading refer to significant price points that traders monitor within the context of a single trading day. These levels can provide insights into market behavior and help traders make informed decisions regarding entry and exit points.
Traders often use D/W/M levels to set entry and exit points for trades. For example, entering long positions near support (daily close) or selling near resistance (daily close).
Daily levels are used to set stop-loss orders. Placing stops just below the daily close for long positions or above the daily close for short positions can help manage risk.
The relationship between price movement and daily levels provides insights into market sentiment. For instance, if the price fails to break above the daily high, it may signify bearish sentiment, while a strong breakout can indicate bullish sentiment.
The way these levels are calculated in this indicator is based on finding pivots in the chart on D/W/M timeframe. The level is then set to previous D/W/M close = current D/W/M open.
In addition, when price is going up previous D/W/M open must be smaller than previous D/W/M close and current D/W/M close must be smaller than the current D/W/M open. When price is going down the opposite.
POINT OF CONTROL
The Point of Control (POC) is a key concept in volume profile analysis, which is commonly used in trading.
It represents the price level at which the highest volume of trading occurred during a specific period.
The POC is derived from the volume traded at various price levels over a defined time frame. In this indicator the timeframes are Daily, Weekly, and Montly.
It identifies the price level where the most trades took place, indicating strong interest and activity from traders at that price.
The POC often acts as a significant support or resistance level. If the price approaches the POC from above, it may act as a support level, while if approached from below, it can serve as a resistance level. Traders monitor the POC to gauge potential reversals or breakouts.
The way the POC is calculated in this indicator is by an approximation by analysing intrabars for the respective timeperiod (D/W/M), assigning the volume for each intrabar into the price-bins that the intrabar covers and finally identifying the bin with the highest aggregated volume.
The POC is the price in the middle of this bin.
The indicator uses a sample space for intrabars on the Daily timeframe of 15 minutes, 35 minutes for the Weekly timeframe, and 140 minutes for the Monthly timeframe.
The indicator has predefined the size of the bins to 0.2% of the price at the range low. That implies that the precision of the calulated POC og VAH/VAL is within 0.2%.
This reduction of precision is a tradeoff for performance and speed of the indicator.
This also implies that the bigger the difference from range high prices to range low prices the more bins the algorithm will iterate over. This is typically the case when calculating the monthly volume profile levels and especially high volatility assets such as alt coins.
Sometimes the number of iterations becomes too big for Trading View to handle. In these cases the bin size will be increased even more to reduce the number of iterations.
In such cases the bin size might increase by a factor of 2-3 decreasing the accuracy of the Volume Profile levels.
Anyway, since these Volume Profile levels are approximations and since precision is traded for performance the user should consider the Volume profile levels(POC, VAH, VAL) as zones rather than pin point accurate levels.
VALUE AREA HIGH/LOW STD1/STD2
The Value Area High (VAH) and Value Area Low (VAL) are important concepts in volume profile analysis, helping traders understand price levels where the majority of trading activity occurs for a given period.
The Value Area High/Low is the upper/lower boundary of the value area, representing the highest price level at which a certain percentage of the total trading volume occurred within a specified period.
The VAH/VAL indicates the price point above/below which the majority of trading activity is considered less valuable. It can serve as a potential resistance/support level, as prices above/below this level may experience selling/buying pressure from traders who view the price as overvalued/undervalued
In this indicator the timeframes are Daily, Weekly, and Monthly. This indicator provides two boundaries that can be selected in the menu.
The first boundary is 70% of the total volume (=1 standard deviation from mean). The second boundary is 95% of the total volume (=2 standard deviation from mean).
The way VAH/VAL is calculated is based on the same algorithm as for the POC.
However instead of identifying the bin with the highest volume, we start from range low and sum up the volume for each bin until the aggregated volume = 30%/70% for VAL1/VAH1 and aggregated volume = 5%/95% for VAL2/VAH2.
Then we simply set the VAL/VAH equal to the low of the respective bin.
FAIR VALUE GAPS
Fair Value Gaps (FVG) is a concept primarily used in technical analysis and price action trading, particularly within the context of futures and forex markets. They refer to areas on a price chart where there is a noticeable lack of trading activity, often highlighted by a significant price movement away from a previous level without trading occurring in between.
FVGs represent price levels where the market has moved significantly without any meaningful trading occurring. This can be seen as a "gap" on the price chart, where the price jumps from one level to another, often due to a rapid market reaction to news, events, or other factors.
These gaps typically appear when prices rise or fall quickly, creating a space on the chart where no transactions have taken place. For example, if a stock opens sharply higher and there are no trades at the prices in between the two levels, it creates a gap. The areas within these gaps can be areas of liquidity that the market may return to “fill” later on.
FVGs highlight inefficiencies in pricing and can indicate areas where the market may correct itself. When the market moves rapidly, it may leave behind price levels that traders eventually revisit to establish fair value.
Traders often watch for these gaps as potential reversal or continuation points. Many traders believe that price will eventually “fill” the gap, meaning it will return to those price levels, providing potential entry or exit points.
This indicator calculate FVGs on three different timeframes, Daily, Weekly and Montly.
In this indicator the FVGs are identified by looking for a three-candle pattern on a chart, signalling a discrete imbalance in order volume that prompts a quick price adjustment. These gaps reflect moments where the market sentiment strongly leans towards buying or selling yet lacks the opposite orders to maintain price stability.
The indicator sets the gap to the difference from the high of the first bar to the low of the third bar when price is moving up or from the low of the first bar to the high of the third bar when price is moving down.
CME GAPS (BTC only)
CME gaps refer to price discrepancies that can occur in charts for futures contracts traded on the Chicago Mercantile Exchange (CME). These gaps typically arise from the fact that many futures markets, including those on the CME, operate nearly 24 hours a day but may have significant price movements during periods when the market is closed.
CME gaps occur when there is a difference between the closing price of a futures contract on one trading day and the opening price on the following trading day. This difference can create a "gap" on the price chart.
Opening Gaps: These usually happen when the market opens significantly higher or lower than the previous day's close, often influenced by news, economic data releases, or other market events occurring during non-trading hours.
Gaps can result from reactions to major announcements or developments, such as earnings reports, geopolitical events, or changes in economic indicators, leading to rapid price movements.
The importance of CME Gaps in Trading is the potential for Filling Gaps: Many traders believe that prices often "fill" gaps, meaning that prices may return to the gap area to establish fair value.
This can create potential trading opportunities based on the expectation of gap filling. Gaps can act as significant support or resistance levels. Traders monitor these levels to identify potential reversal points in price action.
The way the gap is identified in this indicator is by checking if current open is higher than previous bar close when price is moving up or if current open is lower than previous day close when price is moving down.
EQUILIBRIUM
Equilibrium in finance and trading refers to a state where supply and demand in a market balance each other, resulting in stable prices. It is a key concept in various economic and trading contexts. Here’s a concise description:
Market Equilibrium occurs when the quantity of a good or service supplied equals the quantity demanded at a specific price level. At this point, there is no inherent pressure for the price to change, as buyers and sellers are in agreement.
Equilibrium Price is the price at which the market is in equilibrium. It reflects the point where the supply curve intersects the demand curve on a graph. At the equilibrium price, the market clears, meaning there are no surplus goods or shortages.
In this indicator the equilibrium level is calculated simply by finding the midpoint of the Daily, Weekly, and Montly candles respectively.
NOTES
1) Performance. The algorithms are quite resource intensive and the time it takes the indicator to calculate all the levels could be 5 seconds or more, depending on the number of bars in the chart and especially if Montly Volume Profile levels are selected (POC, VAH or VAL).
2) Levels displayed vs the selected chart timeframe. On a timeframe smaller than the daily TF - both Daily, Weekly, and Monthly levels will be displayed. On a timeframe bigger than the daily TF but smaller than the weekly TF - the Weekly and Monthly levels will be display but not the Daily levels. On a timeframe bigger than the weekly TF but smaller than the monthly TF - only the Monthly levels will be displayed. Not Daily and Weekly.
CREDITS
The core algorithm for calculating the POC levels is based on the indicator "Naked Intrabar POC" developed by rumpypumpydumpy (https:www.tradingview.com/u/rumpypumpydumpy/).
The "Naked intrabar POC" indicator calculates the POC on the current chart timeframe.
This indicator (Multiple Naked Levels) adds two new features:
1) It calculates the POC on three specific timeframes, the Daily, Weekly, and Monthly timeframes - not only the current chart timeframe.
2) It adds functionaly by calculating the VAL and VAH of the volume profile on the Daily, Weekly, Monthly timeframes .
Bitcoin Momentum StrategyThis is a very simple long-only strategy I've used since December 2022 to manage my Bitcoin position.
I'm sharing it as an open-source script for other traders to learn from the code and adapt it to their liking if they find the system concept interesting.
General Overview
Always do your own research and backtesting - this script is not intended to be traded blindly (no script should be) and I've done limited testing on other markets beyond Ethereum and BTC, it's just a template to tweak and play with and make into one's own.
The results shown in the strategy tester are from Bitcoin's inception so as to get a large sample size of trades, and potential returns have diminished significantly as BTC has grown to become a mega cap asset, but the script includes a date filter for backtesting and it has still performed solidly in recent years (speaking from personal experience using it myself - DYOR with the date filter).
The main advantage of this system in my opinion is in limiting the max drawdown significantly versus buy & hodl. Theoretically much better returns can be made by just holding, but that's also a good way to lose 70%+ of your capital in the inevitable bear markets (also speaking from experience).
In saying all of that, the future is fundamentally unknowable and past results in no way guarantee future performance.
System Concept:
Capture as much Bitcoin upside volatility as possible while side-stepping downside volatility as quickly as possible.
The system uses a simple but clever momentum-style trailing stop technique I learned from one of my trading mentors who uses this approach on momentum/trend-following stock market systems.
Basically, the system "ratchets" up the stop-loss to be much tighter during high bearish volatility to protect open profits from downside moves, but loosens the stop loss during sustained bullish momentum to let the position ride.
It is invested most of the time, unless BTC is trading below its 20-week EMA in which case it stays in cash/USDT to avoid holding through bear markets. It only trades one position (no pyramiding) and does not trade short, but can easily be tweaked to do whatever you like if you know what you're doing in Pine.
Default parameters:
HTF: Weekly Chart
EMA: 20-Period
ATR: 5-period
Bar Lookback: 7
Entry Rule #1:
Bitcoin's current price must be trading above its higher-timeframe EMA (Weekly 20 EMA).
Entry Rule #2:
Bitcoin must not be in 'caution' condition (no large bearish volatility swings recently).
Enter at next bar's open if conditions are met and we are not already involved in a trade.
"Caution" Condition:
Defined as true if BTC's recent 7-bar swing high minus current bar's low is > 1.5x ATR, or Daily close < Daily 20-EMA.
Trailing Stop:
Stop is trailed 1 ATR from recent swing high, or 20% of ATR if in caution condition (ie. 0.2 ATR).
Exit on next bar open upon a close below stop loss.
I typically use a limit order to open & exit trades as close to the open price as possible to reduce slippage, but the strategy script uses market orders.
I've never had any issues getting filled on limit orders close to the market price with BTC on the Daily timeframe, but if the exchange has relatively low slippage I've found market orders work fine too without much impact on the results particularly since BTC has consistently remained above $20k and highly liquid.
Cost of Trading:
The script uses no leverage and a default total round-trip commission of 0.3% which is what I pay on my exchange based on their tier structure, but this can vary widely from exchange to exchange and higher commission fees will have a significantly negative impact on realized gains so make sure to always input the correct theoretical commission cost when backtesting any script.
Static slippage is difficult to estimate in the strategy tester given the wide range of prices & liquidity BTC has experienced over the years and it largely depends on position size, I set it to 150 points per buy or sell as BTC is currently very liquid on the exchange I trade and I use limit orders where possible to enter/exit positions as close as possible to the market's open price as it significantly limits my slippage.
But again, this can vary a lot from exchange to exchange (for better or worse) and if BTC volatility is high at the time of execution this can have a negative impact on slippage and therefore real performance, so make sure to adjust it according to your exchange's tendencies.
Tax considerations should also be made based on short-term trade frequency if crypto profits are treated as a CGT event in your region.
Summary:
A simple, but effective and fairly robust system that achieves the goals I set for it.
From my preliminary testing it appears it may also work on altcoins but it might need a bit of tweaking/loosening with the trailing stop distance as the default parameters are designed to work with Bitcoin which obviously behaves very differently to smaller cap assets.
Good luck out there!






















