TradingToolsLibraryLibrary "TradingToolsLibrary"
Easily create advanced entries, exits, filters and qualifiers to simulate strategies. Supports DCA (Dollar Cost Averaging) Lines, Stop Losses, Take Profits (with trailing or without) & ATR.
method deepCopy(this)
This creates a deep copy instead of a shallow copy of an entry_position. This does NOT deep copy the self_pyramiding_positions array reference, since only the master entry_position needs this to track the rest of its copies for efficiency reasons. This is to prevent a feedback loop.
Namespace types: entry_position
Parameters:
this (entry_position)
Returns: entry_position
method precision_fix(this, precision)
Convert a floating point number to a precise floating point number with digit precision to avoid floating point errors in quantity calculations.
Namespace types: series float, simple float, input float, const float
Parameters:
this (float)
precision (int)
Returns: float
xSellBuyMidInterpolation(_x, _high, _low, _sellRange, _buyRange)
Creates an interpolation for a sell range and buy range but with an emphasis on reaching the _low the closer to the middle of the _sell and _buy range you go.
Parameters:
_x (float) : is the value you want to use to control interpolation bewteen the _high and _low value. This will return the lowest percentage at the mid between high and low and highest percentage at the _high and _low.
_high (float)
_low (float)
_sellRange (float)
_buyRange (float)
Returns: an interpolated float between the _high and _low supplied.
xSellBuyInterpolation(_x, _high, _low, _sellRange, _buyRange)
Creates an interpolation a sell range and buy range
Parameters:
_x (float) : is the value you want to use to control interpolation bewteen the _high and _low value.
_high (float)
_low (float)
_sellRange (float)
_buyRange (float)
Returns: an interpolated float between the _high and _low supplied.
activate_entries_and_exits(_entries, _exits, _filters, _qualifiers, _equity)
Determines activation for entries or exits. Does not place the actual orders.
Parameters:
_entries (entry_position )
_exits (exit_position )
_filters (filter )
_qualifiers (qualifier )
_equity (equity_management)
Returns: void
create_entries_and_exits(_entries, _exits, _equity)
Creates actual entry and exit orders if activated
Parameters:
_entries (entry_position )
_exits (exit_position )
_equity (equity_management)
Returns: void
filter
Fields:
disabled (series__bool)
filter_for_entries_or_exits (series__string)
filter_for_groups (series__string)
condition (series__bool)
dynamic_condition (series__bool)
use_dynamic_condition (series__bool)
use_override_default_condition (series__bool)
dynamic_condition_operator (series__string)
dynamic_condition_source (series__float)
dynamic_compare_source (series__float)
dynamic_condition_source_prior (series__float)
dynamic_compare_source_prior (series__float)
use_dynamic_compare_source (series__bool)
dynamic_condition_activate_value (series__string)
expire_condition_activate_value (series__string)
expire_condition_source (series__float)
expire_condition_source_prior (series__float)
expire_compare_source (series__float)
expire_compare_source_prior (series__float)
use_expire_compare_source (series__bool)
expire_condition_operator (series__string)
qualifier
Fields:
disabled (series__bool)
qualify_for_entries_or_exits (series__string)
qualify_for_groups (series__string)
disqualify (series__bool)
condition (series__bool)
dynamic_condition (series__bool)
use_dynamic_condition (series__bool)
use_override_default_condition (series__bool)
dynamic_condition_operator (series__string)
dynamic_condition_source (series__float)
dynamic_compare_source (series__float)
dynamic_condition_source_prior (series__float)
dynamic_compare_source_prior (series__float)
use_dynamic_compare_source (series__bool)
dynamic_condition_activate_value (series__string)
expire_after_x_bars (series__integer)
use_expire_after_x_bars (series__bool)
use_expire_condition (series__bool)
use_override_expire_condition (series__bool)
expire_condition_operator (series__string)
expire_condition_source (series__float)
expire_compare_source (series__float)
expire_condition_source_prior (series__float)
expire_compare_source_prior (series__float)
use_expire_compare_source (series__bool)
expire_condition_activate_value (series__string)
active (series__bool)
expire_after_bars_bar_index (series__integer)
expire_after_bars_bar_index_prior (series__integer)
expire_bar_count (series__integer)
expire_bar_changed (series__bool)
entry_position
Fields:
disabled (series__bool)
activate (series__bool)
active (series__bool)
override_occured (series__bool)
passDebug (array__bool)
initial_activation_price (series__float)
dca_done (series__bool)
condition (series__bool)
dynamic_condition (series__bool)
use_dynamic_condition (series__bool)
use_override_default_condition (series__bool)
dynamic_condition_operator (series__string)
dynamic_condition_source (series__float)
dynamic_compare_source (series__float)
dynamic_condition_source_prior (series__float)
dynamic_compare_source_prior (series__float)
use_dynamic_compare_source (series__bool)
dynamic_condition_activate_value (series__string)
use_cash (series__bool)
use_percent_equity (series__bool)
percent_equity_amount (series__float)
cash_amount (series__float)
position_size (series__float)
total_position_size (series__float)
prior_total_position_size (series__float)
equity_remaining (series__float)
prior_equity_remaining (series__float)
initial_equity (series__float)
use_martingale (series__bool)
martingale_win_ratio (series__float)
martingale_lose_ratio (series__float)
martingale_win_limit (series__integer)
martingale_lose_limit (series__integer)
martingale_limit_reset_mode (series__string)
use_dynamic_percent_equity (series__bool)
dynamic_percent_equity_amount (series__float)
initial_dynamic_percent_equity_amount (series__float)
dynamic_percent_equity_source (series__float)
dynamic_percent_equity_min (series__float)
dynamic_percent_equity_max (series__float)
dynamic_percent_equity_source_sell_range (series__float)
dynamic_percent_equity_source_buy_range (series__float)
dynamic_equity_interpolation_method (series__string)
total_bars (series__integer)
bar_index_at_activate (series__integer)
bars_since_active (series__integer)
time_at_activate (series__integer)
time_since_active (series__integer)
bar_index_at_activated (series__integer)
bar_index_at_pyramid_change (series__integer)
name (series__string)
id (series__string)
group (series__string)
pyramiding_limit (series__integer)
self_pyramiding_limit (series__integer)
self_pyramiding_positions (array__|entry_position|#OBJ)
new_pyramid_cancels_dca (series__bool)
num_active_long_positions (series__integer)
num_active_short_positions (series__integer)
num_active_positions (series__integer)
position_remaining (series__float)
prior_position_remaining (series__float)
direction (series__string)
allow_flip_position (series__bool)
flip_occurred (series__bool)
ignore_flip (series__bool)
use_dca (series__bool)
dca_use_limit (series__bool)
dca_num_positions (series__integer)
dca_positions (array__float)
dca_deviation_percentage (series__float)
dca_scale (series__float)
dca_percentages (series__string)
dca_close_cancels (series__bool)
dca_active_positions (series__integer)
use_atr_deviation (series__bool)
dca_atr_length (series__integer)
dca_atr_mult (series__float)
dca_atr_updates_dca_positions (series__bool)
close_price_at_order (series__float)
dca_use_deviation_atr_min (series__bool)
dca_position_quantities (array__float)
use_dca_dynamic_percent_equity (series__bool)
dca_in_use (array__bool)
dca_activated (array__bool)
dca_money_used (array__float)
dca_lines (array__line)
dca_color (series__color)
show_dca_lines (series__bool)
atr_value (series__float)
atr_value_at_activation (series__float)
use_cooldown_bars (series__bool)
cooldown_bars (series__integer)
cooldown_bar_changed (series__bool)
cooldown_bar_index (series__integer)
cooldown_bar_index_prior (series__integer)
cooldown_bar_change_count (series__integer)
expire_condition_activate_value (series__string)
expire_condition_source (series__float)
expire_condition_source_prior (series__float)
expire_compare_source (series__float)
expire_compare_source_prior (series__float)
use_expire_compare_source (series__bool)
expire_condition_operator (series__string)
exit_position
Fields:
disabled (series__bool)
id (series__string)
group (series__string)
exit_for_entries (series__string)
exit_for_groups (series__string)
total_bars (series__integer)
name (series__string)
condition (series__bool)
dynamic_condition (series__bool)
use_dynamic_condition (series__bool)
use_override_default_condition (series__bool)
dynamic_condition_operator (series__string)
dynamic_condition_source (series__float)
dynamic_compare_source (series__float)
dynamic_condition_source_prior (series__float)
dynamic_compare_source_prior (series__float)
use_dynamic_compare_source (series__bool)
dynamic_condition_activate_value (series__string)
activate (series__bool)
active (series__bool)
reset_equity (series__bool)
use_limit (series__bool)
use_alerts (series__bool)
reset_entry_cooldowns (series__bool)
prevent_new_entries_on_partial_close (series__bool)
show_activation_zone (series__bool)
use_average_position (series__bool)
source_value (series__float)
trigger_x_times (series__integer)
amount_of_times_triggered (series__integer)
quantity_percent (series__float)
trade_qty (series__float)
exit_amount (series__float)
entries_exiting_for (array__|entry_position|#OBJ)
atr_value (series__float)
update_atr (series__bool)
use_activate_after_bars (series__bool)
show_activate_after_bars (series__bool)
activate_after_bars (series__integer)
activate_after_bars_bar_changed (series__bool)
activate_after_bars_bar_index (series__integer)
activate_after_bars_bar_index_prior (series__integer)
activate_after_bars_bar_change_count (series__integer)
all_conditions_pass (series__bool)
use_close_if_profit_only (series__bool)
profit_value (series__float)
exit_type (series__string)
exit_modifier (series__string)
update_atr_with_new_pyramid (series__bool)
percentage (series__float)
activation_percentage (series__float)
atr_multiplier (series__float)
use_cancel_if_percent (series__bool)
cancel_if_percent (series__float)
activation_value (series__float)
activation_value_crossed (series__bool)
exit_value (series__float)
hypo_long_exit_value (series__float)
hypo_short_exit_value (series__float)
close_exit_value (series__float)
debug (series__float)
expire_condition_activate_value (series__string)
expire_condition_source (series__float)
expire_condition_source_prior (series__float)
expire_compare_source (series__float)
expire_compare_source_prior (series__float)
use_expire_compare_source (series__bool)
expire_condition_operator (series__string)
equity_management
Fields:
equity (series__float)
prior_equity (series__float)
position_used (series__float)
prior_position_used (series__float)
prevent_future_entries (series__bool)
minimum_order_size (series__float)
decimal_rounding_precision (series__integer)
direction (series__string)
show_order_info_in_comments (series__bool)
show_order_info_in_labels (series__bool)
allow_longs (series__bool)
allow_shorts (series__bool)
override_occured (series__bool)
flip_occured (series__bool)
num_concurrent_wins (series__integer)
num_concurrent_losses (series__integer)
first_entry (|entry_position|#OBJ)
num_win_trades (series__integer)
num_losing_trades (series__integer)
在腳本中搜尋"take profit"
Quantitative Trend Strategy- Uptrend longTrend Strategy #1
Indicators:
1. SMA
2. Pivot high/low functions derived from SMA
3. Step lines to plot support and resistance based on the pivot points
4. If the close is over the resistance line, green arrows plot above, and vice versa for red arrows below support.
Strategy:
1. Long Only
2. Mutable 2% TP/1.5% SL
3. 0.01% commission
4. When the close is greater than the pivot point of the sma pivot high, and the close is greater than the resistance step line, a long position is opened.
*At times, the 2% take profit may not trigger IF; the conditions for reentry are met at the time of candle closure + no exit conditions have been triggered.
5. If the position is in the green and the support step line crosses over the resistance step line, positions are exited.
How to use it and what makes it unique:
Use this strategy to trade an up-trending market using a simple moving average to determine the trend. This strategy is meant to capture a good risk/reward in a bullish market while staying active in an appropriate fashion. This strategy is unique due to it's inclusion of the step line function with statistics derived from myself.
This description tells the indicators combined to create a new strategy, with commissions and take profit/stop loss conditions included, and the process of strategy execution with a description on how to use it. If you have any questions feel free to PM me and boost if you enjoyed it. Thank you, pineUSERS!
Average True Range Trailing Mean [Alifer]Upgrade of the Average True Range default indicator by TradingView. It adds and plots a trailing mean to show periods of increased volatility more clearly.
ATR TRAILING MEAN
A trailing mean, also known as a moving average, is a statistical calculation used to smooth out data over time and identify trends or patterns in a time series.
In our indicator, it clearly shows when the ATR value spikes outside of it's average range, making it easier to identify periods of increased volatility.
Here's how the ATR Trailing Mean (atr_mean) is calculated:
atr_mean = ta.cum(atr) / (bar_index + 1) * atr_mult
The ta.cum() function calculates the cumulative sum of the ATR over all bars up to the current bar.
(bar_index + 1) represents the number of bars processed up to the current bar, including the current one.
By dividing the cumulative ATR ta.cum(atr) by (bar_index + 1) and then multiplying it by atr_mult (Multiplier), we obtain the ATR Trailing Mean value.
If atr_mult is set to 1.0, the ATR Trailing Mean will be equal to the simple average of the ATR values, and it will follow the ATR's general trend.
However, if atr_mult is increased, the ATR Trailing Mean will react more strongly to the ATR's recent changes, making it more sensitive to short-term fluctuations.
On the other hand, reducing atr_mult will make the ATR Trailing Mean less responsive to recent changes in ATR, making it smoother and less prone to reacting to short-term volatility.
In summary, adjusting the atr_mult input allows traders to fine-tune the ATR Trailing Mean's responsiveness based on their preferred level of sensitivity to recent changes in market volatility.
IMPLEMENTATION IN A STRATEGY
You can easily implement this indicator in an existing strategy, to only enter positions when the ATR is above the ATR Trailing Mean (with Multiplier-adjusted sensitivity). To do so, add the following lines of codes.
Under Inputs:
length = input.int(title="Length", defval=20, minval=1)
atr_mult = input.float(defval=1.0, step = 0.1, title = "Multiplier", tooltip = "Adjust the sensitivity of the ATR Trailing Mean line.")
smoothing = input.string(title="Smoothing", defval="RMA", options= )
ma_function(source, length) =>
switch smoothing
"RMA" => ta.rma(source, length)
"SMA" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
=> ta.wma(source, length)
This will allow you to define the Length of the ATR (lookback length over which the ATR is calculated), the Multiplier to adjust the Trailing Mean's sensitivity and the type of Smoothing to be used for the ATR.
Under Calculations:
atr= ma_function(ta.tr(true), length)
atr_mean = ta.cum(atr) / (bar_index+1) * atr_mult
This will calculate the ATR based on Length and Smoothing, and the resulting ATR Trailing Mean.
Under Entry Conditions, add the following to your existing conditions:
and atr > atr_mean
This will make it so that entries are only triggered when the ATR is above the ATR Trailing Mean (adjusted by the Multiplier value you defined earlier).
ATR - DEFINITION AND HISTORY
The Average True Range (ATR) is a technical indicator used to measure market volatility, regardless of the direction of the price. It was developed by J. Welles Wilder and introduced in his book "New Concepts in Technical Trading Systems" in 1978. ATR provides valuable insights into the degree of price movement or volatility experienced by a financial asset, such as a stock, currency pair, commodity, or cryptocurrency, over a specific period.
ATR - CALCULATION AND USAGE
The ATR calculation involves three components:
1 — True Range (TR): The True Range is a measure of the asset's price movement for a given period. It takes into account the following factors:
The difference between the high and low prices of the current period.
The absolute value of the difference between the high price of the current period and the closing price of the previous period.
The absolute value of the difference between the low price of the current period and the closing price of the previous period.
Mathematically, the True Range (TR) for the current period is calculated as follows:
TR = max(high - low, abs(high - previous_close), abs(low - previous_close))
2 — ATR Calculation: The ATR is calculated as a Moving Average (MA) of the True Range over a specified period.
The ATR is calculated as follows:
ATR = MA(TR, length)
3 — ATR Interpretation: The ATR value represents the average volatility of the asset over the chosen period. Higher ATR values indicate higher volatility, while lower ATR values suggest lower volatility.
Traders and investors can use ATR in various ways:
Setting Stop Loss and Take Profit Levels: ATR can help determine appropriate stop-loss and take-profit levels in trading strategies. A larger ATR value might require wider stop-loss levels to allow for the asset's natural price fluctuations, while a smaller ATR value might allow for tighter stop-loss levels.
Identifying Market Volatility: A sharp increase in ATR might indicate heightened market uncertainty or the potential for significant price movements. Conversely, a decreasing ATR might suggest a period of low volatility and possible consolidation.
Comparing Volatility Between Assets: Since ATR uses absolute values, it shouldn't be used to compare volatility between different assets, as assets with higher prices will consistently have higher ATR values, while assets with lower prices will consistently have lower ATR values. However, the addition of a trailing mean makes such a comparison possible. An asset whose ATR is consistently close to its ATR Trailing Mean will have a lower volatility than an asset whose ATR continuously moves far above and below its ATR Trailing Mean. This can help traders and investors decide which markets to trade based on their risk tolerance and trading strategies.
Determining Position Size: ATR can be used to adjust position sizes, taking into account the asset's volatility. Smaller position sizes might be appropriate for more volatile assets to manage risk effectively.
Normalized Close IndicatorThe central aspect of this indicator is the computation of a normalized close price. The normalized close price is computed by first determining the highest and lowest closing prices over a specified historical period. This highest and lowest value form the boundaries of the historical price range.
Once these bounds are established, the current closing price's position within this range is calculated. This is done by subtracting the lowest close from the current close and dividing the result by the range (the highest close minus the lowest close). This yields a value between 0 and 1, which is then multiplied by 100 to provide a percentage. This is not calculating percentile rank, but often it overlaps.
This percentage represents where the current close price stands relative to the historical price range. If the value is near 0, it indicates that the current close price is near the historical low, potentially signaling an oversold condition. Conversely, if the value is near 100, it suggests that the current close price is near the historical high, possibly indicating an overbought condition.
By using this approach, the indicator helps identify points at which the price may be considered relatively high (overbought) or low (oversold) compared to its recent historical range.
Additionally alerts are to switch from long to short and vice versa, for the most part, my strategy that incorporates this indicator is either long or short, sometimes though, the opposite bounds (high level for longs and low level for shorts) are not reached, then stop loss and take profit levels are needed.
I discovered it works fine on markets that spend most of time in a range like BTC/USD, adjustment needs to be done in user inputs and in Pine Script (length) for different exchanges, in current configuration works fine for me on Deribit Perpetuals (BTCUSD.P and ETHUSD.P), on 5 minute and 3 minute timeframes with a stop loss of 1.5% and take profit of 4.5% for BTCUSD.P and 1.7% and 5.1% for ETHUSD.P.
EMA Buy/Sell Alerts with ATR-based TP/SLI wanted to fill a void in the Tradingview FREE indicators. I have searched far and wide on a moving average alert with ATR based take profits and stop loss. I have attempted a rudimentary version of what I hope to improve upon in the future. Will try and add different moving average options such as simple, hull, RMA, JMA, SSL, WMA, etc. For now, a basic EMA with 3 TP and a SL based on the current ATR should suffice.
I grow tired of the ATR take profits being hidden behind a paywall. Please use the script and add to your favorite indicators as you please.
Please leave feedback for future development.
Yesterday's High v.17.07Yesterday’s High Breakout it is a trading system based on the analysis of yesterday's highs, it works in trend-following mode therefore it opens a long position at the breakout of yesterday's highs even if they occur several times in one day.
There are several methods for exiting a trade, each with its own unique strategy. The first method involves setting Take-Profit and Stop-Loss percentages, while the second utilizes a trailing-stop with a specified offset value. The third method calls for a conditional exit when the candle closes below a reference EMA.
Additionally, operational filters can be applied based on the volatility of the currency pair, such as calculating the percentage change from the opening or incorporating a gap to the previous day's high levels. These filters help to anticipate or delay entry into the market, mitigating the risk of false breakouts.
In the specific case of INJ, a 12% Take-Profit and a 1.5% Stop-Loss were set, with an activated trailing-stop percentage, TRL 1 and OFF 0.5.
To postpone entry and avoid false breakouts, a 1% gap was added to the price of yesterday's highs.
Name: Yesterday's High Breakout - Trend Follower Strategy
Author: @tumiza999
Category: Trend Follower, Breakout of Yesterday's High.
Operating mode: Spot or Futures (only long).
Trade duration: Intraday.
Timeframe: 30M, 1H, 2H, 4H
Market: Crypto
Suggested usage: Short-term trading, when the market is in trend and it is showing high volatility.
Entry: When there is a breakout of Yesterday's High.
Exit: Profit target or Trailing stop, Stop loss or Crossunder EMA.
Configuration:
- Gap to anticipate or postpone the entry before or after the identified level
- Rate of Change for Entry Condition
- Take Profit, Stop Loss and Trailing Stop
- EMA length
Backtesting:
⁃ Exchange: BINANCE
⁃ Pair: INJUSDT
⁃ Timeframe: 4H
- Treshold: 1
- Gap%: 1
- SL: 1.5
- TP:12
- TRL: 1
- OFF-TRL: 0.5
⁃ Fee: 0.075%
⁃ Slippage: 1
- Initial Capital: 10000 USDT
- Position sizing: 10% of Equity
- Start : 2018-07-26 (Out Of Sample from 2022-12-23)
- Bar magnifier: on
Credits: LucF for Pine Coders (f_security function to avoid repainting using security)
Disclaimer: Risk Management is crucial, so adjust stop loss to your comfort level. A tight stop loss can help minimise potential losses. Use at your own risk.
How you or we can improve? Source code is open so share your ideas!
Leave a comment and smash the boost button!
Thanks for your attention, happy to support the TradingView community.
Visible Range Streaks of Unbroken Prior Highs/Lows [vnhilton](OVERVIEW)
This indicator keeps track of the number of unbroken prior highs/lows (unbroken being no price closes above/below the prior high/low). Great for entries and take profits. The indicator calculates on visible bars for convenience when looking back into the history without having to use bar replay, which those on the TradingView free plan cannot use intraday bar replay, so the visible range is a perfect work-around. The 2 minute chart above shows NASDAQ:NKLA on Thursday 13th July, 2023, with a significant level of $1.5 leading to a breakout. Streaks lower than 10 were hidden in the chart.
(FEATURES)
- Custom minimum streak size to start displaying plots (the smaller the size the more signals)
- Ability to show/hide numbers (that keep count of unbroken streaks), text signals (for when a streak is broken), break shapes (where the prior high/low was broken), and Zig Zag (lines between break shapes)
- Customisable Zig Zag line width, style, and colours (1 colour for a positive gradient line, and another for a negative gradient line)
- Customisable text signal text
- Customisable numbers, text signal, break shape, number label & text signal label colours
- Customisable number label, text signal label and break shape styles and sizes (number and text signal label share the same size)
Risk to Reward - FIXED SL BacktesterDon't know how to code? No problem! TradingView is an excellent platform for you. ✅ ✅
If you have an indicator that you want to backtest using a risk-to-reward ratio or fixed take profit/stop loss levels, then the Risk to Reward - FIXED SL Backtester script is the perfect solution for you.
introducing Risk to Reward - FIXED SL Backtester Script which will allow you to test any indicator / Signal with RR or Fixed SL system
How does it work ?!
Once you connect the script to your indicator, it will analyze your entry points and perform calculations based on them. It will then open trades for you according to the specified inputs in the script settings.
HOW TO CONNECT IT to your indicator?
simply open your indicator code and add the below line of code to it
plot(Signal ? 100 : 0,"Signal",display = display.data_window)
Replace Signal with the long condition from your own indicator. You can also modify the value 100 to any number you prefer. After that, open the settings.
Once the script is connected to your indicator, you can choose from two options:
Risk To Reward Ratio System
Fixed TP/ SL System
🔸if you select the Risk to Reward System ⤵️
The Risk-to-Reward System requires the calculation of a stop loss. That's why I have included three different types of stop-loss calculations for you to choose from:
ATR Based SL
Pivot Low SL
VWAP Based SL
Your stop loss and take profit levels will be automatically calculated based on the selected stop loss method and your risk-to-reward ratio.
You can also adjust their values to match your desired risk level. The trades will be displayed on the chart.
with the ability to change their values to match your risk.
once this is done, trades will be displayed on the chart
🔸if you select the Fixed system ⤵️
You have 2 inputs, which are FIXED TP & Fixed SL
input the values you want, and trades will be on your chart...
I have also added a Breakeven feature for you.
with this Breakeven feature the trade will not just move SL to Entry ?! NO NO, it will place it above entry by a % you input yourself, so you always win! 🚀
Here is an example
Enjoy, and have fun, if you have any questions do not hesitate to ask
Fair Value Gap (FVG) UnderlayBy analyzing the size and characteristics of candlestick patterns, the Fair Value Gap indicator helps traders spot potential opportunities where the price of a currency or financial asset deviates from its fair value. The FVG is represented as a percentage and displayed as columns in an underlay on the chart.
Calculation and Interpretation:
The calculation of the FVG involves evaluating the body-to-wick ratio of a candlestick. This ratio compares the size of the body (the difference between the open and close prices) to the length of the wicks (the high and low prices). A high body-to-wick ratio indicates a significant price move within the candlestick, potentially signaling a strong market sentiment. The FVG indicator compares the size of the current candlestick with the previous candlesticks over a specified lookback period, typically the last 20 to 40 candlesticks. If the current candlestick meets the criteria for a fair value gap, it is classified as either a Bearish FVG or Bullish FVG, depending on the direction of the price movement.
Interpreting the FVG is relatively straightforward. When a Bearish FVG is detected, it suggests that the price is currently lower than its fair value, indicating a potential upward price movement in the future. This could be an opportunity to consider long positions or buying opportunities. On the other hand, when a Bullish FVG is identified, it implies that the price is higher than its fair value, signaling a possible downward price correction. Traders may consider short-selling or taking profits on long positions in such scenarios.
Coloration:
The coloration of the Fair Value Gap (FVG) indicator plays a crucial role in enhancing its visual representation and aiding interpretation. When a Bearish FVG is identified, the indicator utilizes the color scheme of lime green. This color signifies the potential for an upward price movement as the current price is considered lower than its fair value. On the other hand, a Bullish FVG is represented by the vibrant color of fuchsia, indicating a potential downward price correction as the price exceeds its fair value. The coloration serves as a visual cue, making it easier for traders to quickly identify and differentiate between different types of fair value gaps on the chart. Additionally, the barcolor is aligned with the respective FVG color, providing a comprehensive view of price inefficiencies and aiding traders in their decision-making process.
Potential Applications/Strategies:
The FVG indicator can be applied in various trading strategies and situations. One possible application is in price reversion strategies. Traders can use the FVG to identify overbought or oversold conditions in the market. When a Bullish FVG occurs, it may indicate an opportunity to consider short-selling or taking profits on long positions. Similarly, a Bearish FVG can suggest a potential buying opportunity, expecting the price to revert back to its fair value.
Another application is in confirming existing trends. The FVG can act as a confirmation tool for trends identified by other indicators or analysis techniques. When a Bullish FVG aligns with an uptrend, it may strengthen the bullish bias and provide more confidence in the upward momentum. Conversely, a Bearish FVG in conjunction with a downtrend may reinforce the bearish sentiment and support the idea of further downside potential.
Parameters:
Adjusting the parameters of the FVG indicator can be beneficial based on the trader's trading style and time frame. The body-to-wick ratio threshold and lookback period can be modified to capture different types of fair value gaps and adapt to different market conditions. Shorter lookback periods may help identify more recent FVGs, which could be suitable for short-term traders, while longer periods may capture larger price inefficiencies and cater to longer-term traders.
Limitations:
However, it's important to note that the FVG indicator, like any technical analysis tool, has its limitations. It relies on historical price patterns and may not always accurately predict future price movements. The interpretation of FVGs requires careful analysis and should be used in conjunction with other indicators, technical analysis tools, and fundamental factors to make well-informed trading decisions. Traders should also exercise proper risk management and consider the overall market context when using the FVG indicator.
In conclusion, the Fair Value Gap (FVG) indicator provides traders with valuable insights into price inefficiencies and deviations from fair value. By identifying Bearish and Bullish FVGs, traders can potentially uncover trading opportunities and make more informed decisions. However, it is crucial to combine the FVG indicator with other analysis tools, conduct thorough analysis, and exercise proper risk management to achieve consistent trading success.
Buy&Sell Bullish Engulfing - The Quant Science🇺🇸
GENERAL OVERVIEW
Buy&Sell Bullish Engulfing - The Quant Science It is a Buy&Sell strategy based on the 'Bullish Engulfing' candlestick pattern. The main goal of the strategy is to achieve a consistent and sustainable return over time, with a manageable level of risk.
Bullish Engulfing
The template was developed at the top of the Indicator provided by TradingView called 'Engulfing - Bullish'.
ENTRY AND EXIT CRITERIA
Entry: A single long order is opened when the candlestick pattern is formed, and the percentage size of the order (%) is fixed by the trader through the user interface.
Exit: The long trade is closed on a percentage equity take profit-stop loss.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
🇮🇹
PANORAMICA GENERALE
Buy&Sell Bullish Engulfing - The Quant Science è una strategia Buy&Sell basata sul candlestick pattern 'Bullish Engulfing'. L'obiettivo principale della strategia è ottenere un ritorno costante e sostenibile nel tempo, con un livello gestibile di rischio.
Bullish Engulfing
Il template è stato sviluppato al top dell' Indicatore fornito da Trading View chiamato 'Engulfing - Bullish'.
CRITERI DI ENTRATA E USCITA
Entrata: viene aperto un singolo ordine long quando si forma il candlestick pattern, la size percentuale dell'ordine (%) viene selezionato tramite l'interfaccia utente dal trader.
Uscita: la chiusura della posizione avviene unicamente tramite un take profit-stop loss percentuale calcolato sul capitale.
CNTLibraryLibrary "CNTLibrary"
Custom Functions To Help Code In Pinescript V5
Coded By Christian Nataliano
First Coded In 10/06/2023
Last Edited In 22/06/2023
Huge Shout Out To © ZenAndTheArtOfTrading and his ZenLibrary V5, Some Of The Custom Functions Were Heavily Inspired By Matt's Work & His Pine Script Mastery Course
Another Shout Out To The TradingView's Team Library ta V5
//====================================================================================================================================================
// Custom Indicator Functions
//====================================================================================================================================================
GetKAMA(KAMA_lenght, Fast_KAMA, Slow_KAMA)
Calculates An Adaptive Moving Average Based On Perry J Kaufman's Calculations
Parameters:
KAMA_lenght (int) : Is The KAMA Lenght
Fast_KAMA (int) : Is The KAMA's Fastes Moving Average
Slow_KAMA (int) : Is The KAMA's Slowest Moving Average
Returns: Float Of The KAMA's Current Calculations
GetMovingAverage(Source, Lenght, Type)
Get Custom Moving Averages Values
Parameters:
Source (float) : Of The Moving Average, Defval = close
Lenght (simple int) : Of The Moving Average, Defval = 50
Type (string) : Of The Moving Average, Defval = Exponential Moving Average
Returns: The Moving Average Calculation Based On Its Given Source, Lenght & Calculation Type (Please Call Function On Global Scope)
GetDecimals()
Calculates how many decimals are on the quote price of the current market © ZenAndTheArtOfTrading
Returns: The current decimal places on the market quote price
Truncate(number, decimalPlaces)
Truncates (cuts) excess decimal places © ZenAndTheArtOfTrading
Parameters:
number (float)
decimalPlaces (simple float)
Returns: The given number truncated to the given decimalPlaces
ToWhole(number)
Converts pips into whole numbers © ZenAndTheArtOfTrading
Parameters:
number (float)
Returns: The converted number
ToPips(number)
Converts whole numbers back into pips © ZenAndTheArtOfTrading
Parameters:
number (float)
Returns: The converted number
GetPctChange(value1, value2, lookback)
Gets the percentage change between 2 float values over a given lookback period © ZenAndTheArtOfTrading
Parameters:
value1 (float)
value2 (float)
lookback (int)
BarsAboveMA(lookback, ma)
Counts how many candles are above the MA © ZenAndTheArtOfTrading
Parameters:
lookback (int)
ma (float)
Returns: The bar count of how many recent bars are above the MA
BarsBelowMA(lookback, ma)
Counts how many candles are below the MA © ZenAndTheArtOfTrading
Parameters:
lookback (int)
ma (float)
Returns: The bar count of how many recent bars are below the EMA
BarsCrossedMA(lookback, ma)
Counts how many times the EMA was crossed recently © ZenAndTheArtOfTrading
Parameters:
lookback (int)
ma (float)
Returns: The bar count of how many times price recently crossed the EMA
GetPullbackBarCount(lookback, direction)
Counts how many green & red bars have printed recently (ie. pullback count) © ZenAndTheArtOfTrading
Parameters:
lookback (int)
direction (int)
Returns: The bar count of how many candles have retraced over the given lookback & direction
GetSwingHigh(Lookback, SwingType)
Check If Price Has Made A Recent Swing High
Parameters:
Lookback (int) : Is For The Swing High Lookback Period, Defval = 7
SwingType (int) : Is For The Swing High Type Of Identification, Defval = 1
Returns: A Bool - True If Price Has Made A Recent Swing High
GetSwingLow(Lookback, SwingType)
Check If Price Has Made A Recent Swing Low
Parameters:
Lookback (int) : Is For The Swing Low Lookback Period, Defval = 7
SwingType (int) : Is For The Swing Low Type Of Identification, Defval = 1
Returns: A Bool - True If Price Has Made A Recent Swing Low
//====================================================================================================================================================
// Custom Risk Management Functions
//====================================================================================================================================================
CalculateStopLossLevel(OrderType, Entry, StopLoss)
Calculate StopLoss Level
Parameters:
OrderType (int) : Is To Determine A Long / Short Position, Defval = 1
Entry (float) : Is The Entry Level Of The Order, Defval = na
StopLoss (float) : Is The Custom StopLoss Distance, Defval = 2x ATR Below Close
Returns: Float - The StopLoss Level In Actual Price As A
CalculateStopLossDistance(OrderType, Entry, StopLoss)
Calculate StopLoss Distance In Pips
Parameters:
OrderType (int) : Is To Determine A Long / Short Position, Defval = 1
Entry (float) : Is The Entry Level Of The Order, NEED TO INPUT PARAM
StopLoss (float) : Level Based On Previous Calculation, NEED TO INPUT PARAM
Returns: Float - The StopLoss Value In Pips
CalculateTakeProfitLevel(OrderType, Entry, StopLossDistance, RiskReward)
Calculate TakeProfit Level
Parameters:
OrderType (int) : Is To Determine A Long / Short Position, Defval = 1
Entry (float) : Is The Entry Level Of The Order, Defval = na
StopLossDistance (float)
RiskReward (float)
Returns: Float - The TakeProfit Level In Actual Price
CalculateTakeProfitDistance(OrderType, Entry, TakeProfit)
Get TakeProfit Distance In Pips
Parameters:
OrderType (int) : Is To Determine A Long / Short Position, Defval = 1
Entry (float) : Is The Entry Level Of The Order, NEED TO INPUT PARAM
TakeProfit (float) : Level Based On Previous Calculation, NEED TO INPUT PARAM
Returns: Float - The TakeProfit Value In Pips
CalculateConversionCurrency(AccountCurrency, SymbolCurrency, BaseCurrency)
Get The Conversion Currecny Between Current Account Currency & Current Pair's Quoted Currency (FOR FOREX ONLY)
Parameters:
AccountCurrency (simple string) : Is For The Account Currency Used
SymbolCurrency (simple string) : Is For The Current Symbol Currency (Front Symbol)
BaseCurrency (simple string) : Is For The Current Symbol Base Currency (Back Symbol)
Returns: Tuple Of A Bollean (Convert The Currency ?) And A String (Converted Currency)
CalculateConversionRate(ConvertCurrency, ConversionRate)
Get The Conversion Rate Between Current Account Currency & Current Pair's Quoted Currency (FOR FOREX ONLY)
Parameters:
ConvertCurrency (bool) : Is To Check If The Current Symbol Needs To Be Converted Or Not
ConversionRate (float) : Is The Quoted Price Of The Conversion Currency (Input The request.security Function Here)
Returns: Float Price Of Conversion Rate (If In The Same Currency Than Return Value Will Be 1.0)
LotSize(LotSizeSimple, Balance, Risk, SLDistance, ConversionRate)
Get Current Lot Size
Parameters:
LotSizeSimple (bool) : Is To Toggle Lot Sizing Calculation (Simple Is Good Enough For Stocks & Crypto, Whilst Complex Is For Forex)
Balance (float) : Is For The Current Account Balance To Calculate The Lot Sizing Based Off
Risk (float) : Is For The Current Risk Per Trade To Calculate The Lot Sizing Based Off
SLDistance (float) : Is The Current Position StopLoss Distance From Its Entry Price
ConversionRate (float) : Is The Currency Conversion Rate (Used For Complex Lot Sizing Only)
Returns: Float - Position Size In Units
ToLots(Units)
Converts Units To Lots
Parameters:
Units (float) : Is For How Many Units Need To Be Converted Into Lots (Minimun 1000 Units)
Returns: Float - Position Size In Lots
ToUnits(Lots)
Converts Lots To Units
Parameters:
Lots (float) : Is For How Many Lots Need To Be Converted Into Units (Minimun 0.01 Units)
Returns: Int - Position Size In Units
ToLotsInUnits(Units)
Converts Units To Lots Than Back To Units
Parameters:
Units (float) : Is For How Many Units Need To Be Converted Into Lots (Minimun 1000 Units)
Returns: Float - Position Size In Lots That Were Rounded To Units
ATRTrail(OrderType, SourceType, ATRPeriod, ATRMultiplyer, SwingLookback)
Calculate ATR Trailing Stop
Parameters:
OrderType (int) : Is To Determine A Long / Short Position, Defval = 1
SourceType (int) : Is To Determine Where To Calculate The ATR Trailing From, Defval = close
ATRPeriod (simple int) : Is To Change Its ATR Period, Defval = 20
ATRMultiplyer (float) : Is To Change Its ATR Trailing Distance, Defval = 1
SwingLookback (int) : Is To Change Its Swing HiLo Lookback (Only From Source Type 5), Defval = 7
Returns: Float - Number Of The Current ATR Trailing
DangerZone(WinRate, AvgRRR, Filter)
Calculate Danger Zone Of A Given Strategy
Parameters:
WinRate (float) : Is The Strategy WinRate
AvgRRR (float) : Is The Strategy Avg RRR
Filter (float) : Is The Minimum Profit It Needs To Be Out Of BE Zone, Defval = 3
Returns: Int - Value, 1 If Out Of Danger Zone, 0 If BE, -1 If In Danger Zone
IsQuestionableTrades(TradeTP, TradeSL)
Checks For Questionable Trades (Which Are Trades That Its TP & SL Level Got Hit At The Same Candle)
Parameters:
TradeTP (float) : Is The Trade In Question Take Profit Level
TradeSL (float) : Is The Trade In Question Stop Loss Level
Returns: Bool - True If The Last Trade Was A "Questionable Trade"
//====================================================================================================================================================
// Custom Strategy Functions
//====================================================================================================================================================
OpenLong(EntryID, LotSize, LimitPrice, StopPrice, Comment, CommentValue)
Open A Long Order Based On The Given Params
Parameters:
EntryID (string) : Is The Trade Entry ID, Defval = "Long"
LotSize (float) : Is The Lot Size Of The Trade, Defval = 1
LimitPrice (float) : Is The Limit Order Price To Set The Order At, Defval = Na / Market Order Execution
StopPrice (float) : Is The Stop Order Price To Set The Order At, Defval = Na / Market Order Execution
Comment (string) : Is The Order Comment, Defval = Long Entry Order
CommentValue (string) : Is For Custom Values In The Order Comment, Defval = Na
Returns: Void
OpenShort(EntryID, LotSize, LimitPrice, StopPrice, Comment, CommentValue)
Open A Short Order Based On The Given Params
Parameters:
EntryID (string) : Is The Trade Entry ID, Defval = "Short"
LotSize (float) : Is The Lot Size Of The Trade, Defval = 1
LimitPrice (float) : Is The Limit Order Price To Set The Order At, Defval = Na / Market Order Execution
StopPrice (float) : Is The Stop Order Price To Set The Order At, Defval = Na / Market Order Execution
Comment (string) : Is The Order Comment, Defval = Short Entry Order
CommentValue (string) : Is For Custom Values In The Order Comment, Defval = Na
Returns: Void
TP_SLExit(FromID, TPLevel, SLLevel, PercentageClose, Comment, CommentValue)
Exits Based On Predetermined TP & SL Levels
Parameters:
FromID (string) : Is The Trade ID That The TP & SL Levels Be Palced
TPLevel (float) : Is The Take Profit Level
SLLevel (float) : Is The StopLoss Level
PercentageClose (float) : Is The Amount To Close The Order At (In Percentage) Defval = 100
Comment (string) : Is The Order Comment, Defval = Exit Order
CommentValue (string) : Is For Custom Values In The Order Comment, Defval = Na
Returns: Void
CloseLong(ExitID, PercentageClose, Comment, CommentValue, Instant)
Exits A Long Order Based On A Specified Condition
Parameters:
ExitID (string) : Is The Trade ID That Will Be Closed, Defval = "Long"
PercentageClose (float) : Is The Amount To Close The Order At (In Percentage) Defval = 100
Comment (string) : Is The Order Comment, Defval = Exit Order
CommentValue (string) : Is For Custom Values In The Order Comment, Defval = Na
Instant (bool) : Is For Exit Execution Type, Defval = false
Returns: Void
CloseShort(ExitID, PercentageClose, Comment, CommentValue, Instant)
Exits A Short Order Based On A Specified Condition
Parameters:
ExitID (string) : Is The Trade ID That Will Be Closed, Defval = "Short"
PercentageClose (float) : Is The Amount To Close The Order At (In Percentage) Defval = 100
Comment (string) : Is The Order Comment, Defval = Exit Order
CommentValue (string) : Is For Custom Values In The Order Comment, Defval = Na
Instant (bool) : Is For Exit Execution Type, Defval = false
Returns: Void
BrokerCheck(Broker)
Checks Traded Broker With Current Loaded Chart Broker
Parameters:
Broker (string) : Is The Current Broker That Is Traded
Returns: Bool - True If Current Traded Broker Is Same As Loaded Chart Broker
OpenPC(LicenseID, OrderType, UseLimit, LimitPrice, SymbolPrefix, Symbol, SymbolSuffix, Risk, SL, TP, OrderComment, Spread)
Compiles Given Parameters Into An Alert String Format To Open Trades Using Pine Connector
Parameters:
LicenseID (string) : Is The Users PineConnector LicenseID
OrderType (int) : Is The Desired OrderType To Open
UseLimit (bool) : Is If We Want To Enter The Position At Exactly The Previous Closing Price
LimitPrice (float) : Is The Limit Price Of The Trade (Only For Pending Orders)
SymbolPrefix (string) : Is The Current Symbol Prefix (If Any)
Symbol (string) : Is The Traded Symbol
SymbolSuffix (string) : Is The Current Symbol Suffix (If Any)
Risk (float) : Is The Trade Risk Per Trade / Fixed Lot Sizing
SL (float) : Is The Trade SL In Price / In Pips
TP (float) : Is The Trade TP In Price / In Pips
OrderComment (string) : Is The Executed Trade Comment
Spread (float) : is The Maximum Spread For Execution
Returns: String - Pine Connector Order Syntax Alert Message
ClosePC(LicenseID, OrderType, SymbolPrefix, Symbol, SymbolSuffix)
Compiles Given Parameters Into An Alert String Format To Close Trades Using Pine Connector
Parameters:
LicenseID (string) : Is The Users PineConnector LicenseID
OrderType (int) : Is The Desired OrderType To Close
SymbolPrefix (string) : Is The Current Symbol Prefix (If Any)
Symbol (string) : Is The Traded Symbol
SymbolSuffix (string) : Is The Current Symbol Suffix (If Any)
Returns: String - Pine Connector Order Syntax Alert Message
//====================================================================================================================================================
// Custom Backtesting Calculation Functions
//====================================================================================================================================================
CalculatePNL(EntryPrice, ExitPrice, LotSize, ConversionRate)
Calculates Trade PNL Based On Entry, Eixt & Lot Size
Parameters:
EntryPrice (float) : Is The Trade Entry
ExitPrice (float) : Is The Trade Exit
LotSize (float) : Is The Trade Sizing
ConversionRate (float) : Is The Currency Conversion Rate (Used For Complex Lot Sizing Only)
Returns: Float - The Current Trade PNL
UpdateBalance(PrevBalance, PNL)
Updates The Previous Ginve Balance To The Next PNL
Parameters:
PrevBalance (float) : Is The Previous Balance To Be Updated
PNL (float) : Is The Current Trade PNL To Be Added
Returns: Float - The Current Updated PNL
CalculateSlpComm(PNL, MaxRate)
Calculates Random Slippage & Commisions Fees Based On The Parameters
Parameters:
PNL (float) : Is The Current Trade PNL
MaxRate (float) : Is The Upper Limit (In Percentage) Of The Randomized Fee
Returns: Float - A Percentage Fee Of The Current Trade PNL
UpdateDD(MaxBalance, Balance)
Calculates & Updates The DD Based On Its Given Parameters
Parameters:
MaxBalance (float) : Is The Maximum Balance Ever Recorded
Balance (float) : Is The Current Account Balance
Returns: Float - The Current Strategy DD
CalculateWR(TotalTrades, LongID, ShortID)
Calculate The Total, Long & Short Trades Win Rate
Parameters:
TotalTrades (int) : Are The Current Total Trades That The Strategy Has Taken
LongID (string) : Is The Order ID Of The Long Trades Of The Strategy
ShortID (string) : Is The Order ID Of The Short Trades Of The Strategy
Returns: Tuple Of Long WR%, Short WR%, Total WR%, Total Winning Trades, Total Losing Trades, Total Long Trades & Total Short Trades
CalculateAvgRRR(WinTrades, LossTrades)
Calculates The Overall Strategy Avg Risk Reward Ratio
Parameters:
WinTrades (int) : Are The Strategy Winning Trades
LossTrades (int) : Are The Strategy Losing Trades
Returns: Float - The Average RRR Values
CAGR(StartTime, StartPrice, EndTime, EndPrice)
Calculates The CAGR Over The Given Time Period © TradingView
Parameters:
StartTime (int) : Is The Starting Time Of The Calculation
StartPrice (float) : Is The Starting Price Of The Calculation
EndTime (int) : Is The Ending Time Of The Calculation
EndPrice (float) : Is The Ending Price Of The Calculation
Returns: Float - The CAGR Values
//====================================================================================================================================================
// Custom Plot Functions
//====================================================================================================================================================
EditLabels(LabelID, X1, Y1, Text, Color, TextColor, EditCondition, DeleteCondition)
Edit / Delete Labels
Parameters:
LabelID (label) : Is The ID Of The Selected Label
X1 (int) : Is The X1 Coordinate IN BARINDEX Xloc
Y1 (float) : Is The Y1 Coordinate IN PRICE Yloc
Text (string) : Is The Text Than Wants To Be Written In The Label
Color (color) : Is The Color Value Change Of The Label Text
TextColor (color)
EditCondition (int) : Is The Edit Condition of The Line (Setting Location / Color)
DeleteCondition (bool) : Is The Delete Condition Of The Line If Ture Deletes The Prev Itteration Of The Line
Returns: Void
EditLine(LineID, X1, Y1, X2, Y2, Color, EditCondition, DeleteCondition)
Edit / Delete Lines
Parameters:
LineID (line) : Is The ID Of The Selected Line
X1 (int) : Is The X1 Coordinate IN BARINDEX Xloc
Y1 (float) : Is The Y1 Coordinate IN PRICE Yloc
X2 (int) : Is The X2 Coordinate IN BARINDEX Xloc
Y2 (float) : Is The Y2 Coordinate IN PRICE Yloc
Color (color) : Is The Color Value Change Of The Line
EditCondition (int) : Is The Edit Condition of The Line (Setting Location / Color)
DeleteCondition (bool) : Is The Delete Condition Of The Line If Ture Deletes The Prev Itteration Of The Line
Returns: Void
//====================================================================================================================================================
// Custom Display Functions (Using Tables)
//====================================================================================================================================================
FillTable(TableID, Column, Row, Title, Value, BgColor, TextColor, ToolTip)
Filling The Selected Table With The Inputed Information
Parameters:
TableID (table) : Is The Table ID That Wants To Be Edited
Column (int) : Is The Current Column Of The Table That Wants To Be Edited
Row (int) : Is The Current Row Of The Table That Wants To Be Edited
Title (string) : Is The String Title Of The Current Cell Table
Value (string) : Is The String Value Of The Current Cell Table
BgColor (color) : Is The Selected Color For The Current Table
TextColor (color) : Is The Selected Color For The Current Table
ToolTip (string) : Is The ToolTip Of The Current Cell In The Table
Returns: Void
DisplayBTResults(TableID, BgColor, TextColor, StartingBalance, Balance, DollarReturn, TotalPips, MaxDD)
Filling The Selected Table With The Inputed Information
Parameters:
TableID (table) : Is The Table ID That Wants To Be Edited
BgColor (color) : Is The Selected Color For The Current Table
TextColor (color) : Is The Selected Color For The Current Table
StartingBalance (float) : Is The Account Starting Balance
Balance (float)
DollarReturn (float) : Is The Account Dollar Reture
TotalPips (float) : Is The Total Pips Gained / loss
MaxDD (float) : Is The Maximum Drawdown Over The Backtesting Period
Returns: Void
DisplayBTResultsV2(TableID, BgColor, TextColor, TotalWR, QTCount, LongWR, ShortWR, InitialCapital, CumProfit, CumFee, AvgRRR, MaxDD, CAGR, MeanDD)
Filling The Selected Table With The Inputed Information
Parameters:
TableID (table) : Is The Table ID That Wants To Be Edited
BgColor (color) : Is The Selected Color For The Current Table
TextColor (color) : Is The Selected Color For The Current Table
TotalWR (float) : Is The Strategy Total WR In %
QTCount (int) : Is The Strategy Questionable Trades Count
LongWR (float) : Is The Strategy Total WR In %
ShortWR (float) : Is The Strategy Total WR In %
InitialCapital (float) : Is The Strategy Initial Starting Capital
CumProfit (float) : Is The Strategy Ending Cumulative Profit
CumFee (float) : Is The Strategy Ending Cumulative Fee (Based On Randomized Fee Assumptions)
AvgRRR (float) : Is The Strategy Average Risk Reward Ratio
MaxDD (float) : Is The Strategy Maximum DrawDown In Its Backtesting Period
CAGR (float) : Is The Strategy Compounded Average GRowth In %
MeanDD (float) : Is The Strategy Mean / Average Drawdown In The Backtesting Period
Returns: Void
//====================================================================================================================================================
// Custom Pattern Detection Functions
//====================================================================================================================================================
BullFib(priceLow, priceHigh, fibRatio)
Calculates A Bullish Fibonacci Value (From Swing Low To High) © ZenAndTheArtOfTrading
Parameters:
priceLow (float)
priceHigh (float)
fibRatio (float)
Returns: The Fibonacci Value Of The Given Ratio Between The Two Price Points
BearFib(priceLow, priceHigh, fibRatio)
Calculates A Bearish Fibonacci Value (From Swing High To Low) © ZenAndTheArtOfTrading
Parameters:
priceLow (float)
priceHigh (float)
fibRatio (float)
Returns: The Fibonacci Value Of The Given Ratio Between The Two Price Points
GetBodySize()
Gets The Current Candle Body Size IN POINTS © ZenAndTheArtOfTrading
Returns: The Current Candle Body Size IN POINTS
GetTopWickSize()
Gets The Current Candle Top Wick Size IN POINTS © ZenAndTheArtOfTrading
Returns: The Current Candle Top Wick Size IN POINTS
GetBottomWickSize()
Gets The Current Candle Bottom Wick Size IN POINTS © ZenAndTheArtOfTrading
Returns: The Current Candle Bottom Wick Size IN POINTS
GetBodyPercent()
Gets The Current Candle Body Size As A Percentage Of Its Entire Size Including Its Wicks © ZenAndTheArtOfTrading
Returns: The Current Candle Body Size IN PERCENTAGE
GetTopWickPercent()
Gets The Current Top Wick Size As A Percentage Of Its Entire Body Size
Returns: Float - The Current Candle Top Wick Size IN PERCENTAGE
GetBottomWickPercent()
Gets The Current Bottom Wick Size As A Percentage Of Its Entire Bodu Size
Returns: Float - The Current Candle Bottom Size IN PERCENTAGE
BullishEC(Allowance, RejectionWickSize, EngulfWick, NearSwings, SwingLookBack)
Checks If The Current Bar Is A Bullish Engulfing Candle
Parameters:
Allowance (int) : To Give Flexibility Of Engulfing Pattern Detection In Markets That Have Micro Gaps, Defval = 0
RejectionWickSize (float) : To Filter Out long (Upper And Lower) Wick From The Bullsih Engulfing Pattern, Defval = na
EngulfWick (bool) : To Specify If We Want The Pattern To Also Engulf Its Upper & Lower Previous Wicks, Defval = false
NearSwings (bool) : To Specify If We Want The Pattern To Be Near A Recent Swing Low, Defval = true
SwingLookBack (int) : To Specify How Many Bars Back To Detect A Recent Swing Low, Defval = 10
Returns: Bool - True If The Current Bar Matches The Requirements of a Bullish Engulfing Candle
BearishEC(Allowance, RejectionWickSize, EngulfWick, NearSwings, SwingLookBack)
Checks If The Current Bar Is A Bearish Engulfing Candle
Parameters:
Allowance (int) : To Give Flexibility Of Engulfing Pattern Detection In Markets That Have Micro Gaps, Defval = 0
RejectionWickSize (float) : To Filter Out long (Upper And Lower) Wick From The Bearish Engulfing Pattern, Defval = na
EngulfWick (bool) : To Specify If We Want The Pattern To Also Engulf Its Upper & Lower Previous Wicks, Defval = false
NearSwings (bool) : To Specify If We Want The Pattern To Be Near A Recent Swing High, Defval = true
SwingLookBack (int) : To Specify How Many Bars Back To Detect A Recent Swing High, Defval = 10
Returns: Bool - True If The Current Bar Matches The Requirements of a Bearish Engulfing Candle
Hammer(Fib, ColorMatch, NearSwings, SwingLookBack, ATRFilterCheck, ATRPeriod)
Checks If The Current Bar Is A Hammer Candle
Parameters:
Fib (float) : To Specify Which Fibonacci Ratio To Use When Determining The Hammer Candle, Defval = 0.382 Ratio
ColorMatch (bool) : To Filter Only Bullish Closed Hammer Candle Pattern, Defval = false
NearSwings (bool) : To Specify If We Want The Doji To Be Near A Recent Swing Low, Defval = true
SwingLookBack (int) : To Specify How Many Bars Back To Detect A Recent Swing Low, Defval = 10
ATRFilterCheck (float) : To Filter Smaller Hammer Candles That Might Be Better Classified As A Doji Candle, Defval = 1
ATRPeriod (simple int) : To Change ATR Period Of The ATR Filter, Defval = 20
Returns: Bool - True If The Current Bar Matches The Requirements of a Hammer Candle
Star(Fib, ColorMatch, NearSwings, SwingLookBack, ATRFilterCheck, ATRPeriod)
Checks If The Current Bar Is A Hammer Candle
Parameters:
Fib (float) : To Specify Which Fibonacci Ratio To Use When Determining The Hammer Candle, Defval = 0.382 Ratio
ColorMatch (bool) : To Filter Only Bullish Closed Hammer Candle Pattern, Defval = false
NearSwings (bool) : To Specify If We Want The Doji To Be Near A Recent Swing Low, Defval = true
SwingLookBack (int) : To Specify How Many Bars Back To Detect A Recent Swing Low, Defval = 10
ATRFilterCheck (float) : To Filter Smaller Hammer Candles That Might Be Better Classified As A Doji Candle, Defval = 1
ATRPeriod (simple int) : To Change ATR Period Of The ATR Filter, Defval = 20
Returns: Bool - True If The Current Bar Matches The Requirements of a Hammer Candle
Doji(MaxWickSize, MaxBodySize, DojiType, NearSwings, SwingLookBack)
Checks If The Current Bar Is A Doji Candle
Parameters:
MaxWickSize (float) : To Specify The Maximum Lenght Of Its Upper & Lower Wick, Defval = 2
MaxBodySize (float) : To Specify The Maximum Lenght Of Its Candle Body IN PERCENT, Defval = 0.05
DojiType (int)
NearSwings (bool) : To Specify If We Want The Doji To Be Near A Recent Swing High / Low (Only In Dragonlyf / Gravestone Mode), Defval = true
SwingLookBack (int) : To Specify How Many Bars Back To Detect A Recent Swing High / Low (Only In Dragonlyf / Gravestone Mode), Defval = 10
Returns: Bool - True If The Current Bar Matches The Requirements of a Doji Candle
BullishIB(Allowance, RejectionWickSize, EngulfWick, NearSwings, SwingLookBack)
Checks If The Current Bar Is A Bullish Harami Candle
Parameters:
Allowance (int) : To Give Flexibility Of Harami Pattern Detection In Markets That Have Micro Gaps, Defval = 0
RejectionWickSize (float) : To Filter Out long (Upper And Lower) Wick From The Bullsih Harami Pattern, Defval = na
EngulfWick (bool) : To Specify If We Want The Pattern To Also Engulf Its Upper & Lower Previous Wicks, Defval = false
NearSwings (bool) : To Specify If We Want The Pattern To Be Near A Recent Swing Low, Defval = true
SwingLookBack (int) : To Specify How Many Bars Back To Detect A Recent Swing Low, Defval = 10
Returns: Bool - True If The Current Bar Matches The Requirements of a Bullish Harami Candle
BearishIB(Allowance, RejectionWickSize, EngulfWick, NearSwings, SwingLookBack)
Checks If The Current Bar Is A Bullish Harami Candle
Parameters:
Allowance (int) : To Give Flexibility Of Harami Pattern Detection In Markets That Have Micro Gaps, Defval = 0
RejectionWickSize (float) : To Filter Out long (Upper And Lower) Wick From The Bearish Harami Pattern, Defval = na
EngulfWick (bool) : To Specify If We Want The Pattern To Also Engulf Its Upper & Lower Previous Wicks, Defval = false
NearSwings (bool) : To Specify If We Want The Pattern To Be Near A Recent Swing High, Defval = true
SwingLookBack (int) : To Specify How Many Bars Back To Detect A Recent Swing High, Defval = 10
Returns: Bool - True If The Current Bar Matches The Requirements of a Bearish Harami Candle
//====================================================================================================================================================
// Custom Time Functions
//====================================================================================================================================================
BarInSession(sess, useFilter)
Determines if the current price bar falls inside the specified session © ZenAndTheArtOfTrading
Parameters:
sess (simple string)
useFilter (bool)
Returns: A boolean - true if the current bar falls within the given time session
BarOutSession(sess, useFilter)
Determines if the current price bar falls outside the specified session © ZenAndTheArtOfTrading
Parameters:
sess (simple string)
useFilter (bool)
Returns: A boolean - true if the current bar falls outside the given time session
DateFilter(startTime, endTime)
Determines if this bar's time falls within date filter range © ZenAndTheArtOfTrading
Parameters:
startTime (int)
endTime (int)
Returns: A boolean - true if the current bar falls within the given dates
DayFilter(monday, tuesday, wednesday, thursday, friday, saturday, sunday)
Checks if the current bar's day is in the list of given days to analyze © ZenAndTheArtOfTrading
Parameters:
monday (bool)
tuesday (bool)
wednesday (bool)
thursday (bool)
friday (bool)
saturday (bool)
sunday (bool)
Returns: A boolean - true if the current bar's day is one of the given days
AUSSess()
Checks If The Current Australian Forex Session In Running
Returns: Bool - True If Currently The Australian Session Is Running
ASIASess()
Checks If The Current Asian Forex Session In Running
Returns: Bool - True If Currently The Asian Session Is Running
EURSess()
Checks If The Current European Forex Session In Running
Returns: Bool - True If Currently The European Session Is Running
USSess()
Checks If The Current US Forex Session In Running
Returns: Bool - True If Currently The US Session Is Running
UNIXToDate(Time, ConversionType, TimeZone)
Converts UNIX Time To Datetime
Parameters:
Time (int) : Is The UNIX Time Input
ConversionType (int) : Is The Datetime Output Format, Defval = DD-MM-YYYY
TimeZone (string) : Is To Convert The Outputed Datetime Into The Specified Time Zone, Defval = Exchange Time Zone
Returns: String - String Of Datetime
Major and Minor Trend Indicator by Nikhil34aScript Description:
This script is designed to provide a visual indication of the major and minor trends of an asset, along with potential buy and sell signals. It calculates two Simple Moving Averages (SMA): a longer-term 200-period SMA (Major SMA) and a shorter-term 20-period SMA (Minor SMA). The script determines whether the asset's closing price is above or below these moving averages to identify the major and minor trends. It also detects potential buying and selling opportunities based on the intersection of the asset's price with the SMA lines.
Usefulness:
This script can be useful for traders and investors who follow trend-based strategies and want to monitor the major and minor trends of an asset. By visually displaying the trends and potential buy and sell signals, it helps traders make informed decisions about entering or exiting positions.
Simple Explanation on BTC Chart:
In the context of a BTC chart, let's consider the following scenario:
BTC is currently trading above the 200-period SMA (Simple Moving Average), which is located at 29,059.
BTC is trading below the 20-period SMA, positioned at 30,178.
The current price of BTC is 29,916.
Based on this information, we can conclude that:
The major trend is bullish since BTC is trading above the 200-period SMA.
The minor trend is bearish as BTC is trading below the 20-period SMA.
The intersection of the price with the moving averages indicates a potential selling opportunity.
Traders using this script would observe that BTC is in a bullish major trend, a bearish minor trend, and there is a possibility of a sell signal. They may consider these factors when making trading decisions, such as adjusting their positions or taking profits.
Remember to conduct your own analysis and consider additional factors before making any trading decisions.
Williams %R Cross Strategy with 200 MA Filter
1. The script is a trading strategy based on the Williams %R indicator and a 200-period moving average (MA) filter.
2. The user can input the length of the Williams %R indicator (`wrLength`), the threshold for %R crossing (`crossPips`), the take profit level in pips (`takeProfitPips`), and the stop loss level in pips (`stopLossPips`).
3. The script calculates the Williams %R using the `ta.highest` and `ta.lowest` functions to find the highest high and lowest low over the specified length (`wrLength`).
4. It also calculates a 200-period simple moving average (`ma200`) using the `ta.sma` function.
5. The entry conditions are defined as follows:
- For a long entry, it checks if the Williams %R crosses above the -50 line by a threshold of `crossPips` and if the close price is above the 200-period MA.
- For a short entry, it checks if the Williams %R crosses below the -50 line by a threshold of `crossPips` and if the close price is below the 200-period MA.
6. The exit conditions are defined as follows:
- For a long position, it checks if the close price reaches the take profit level (defined as the average entry price plus `takeProfitPips` in pips) or the stop loss level (defined as the average entry price minus `stopLossPips` in pips).
- For a short position, it checks if the close price reaches the take profit level (defined as the average entry price minus `takeProfitPips` in pips) or the stop loss level (defined as the average entry price plus `stopLossPips` in pips).
7. The script uses the `strategy.entry` function to place long and short orders when the respective entry conditions are met.
8. It uses the `strategy.close` function to close the long and short positions when the respective exit conditions are met.
The script allows you to customize the parameters such as the length of Williams %R, the crossing threshold, take profit and stop loss levels, and the moving average period to suit your trading preferences.
Focused Average True RangeThe Focused Average True Range (FATR) is a modified version of the classic Average True Range (ATR) indicator. It is designed to provide traders with more accurate data on volatility, minimizing the impact of sharp spikes in volatility.
The main distinction between the Focused ATR and the standard ATR lies in the utilization of percentiles. Instead of calculating the average price change as the regular ATR does, the Focused ATR selects a value in the middle of the range of price changes. This makes it less sensitive to sharp changes in volatility, which can be beneficial in certain trading scenarios.
Settings:
Percentile. This parameter determines which value in the series of price changes will be used. For example, if the percentile is set to 50, the indicator will use the median value of the series of price changes. This is the default value. Imagine a class of students lined up by height, and instead of calculating the average height of all students, we take the height of the students in the middle of the line. Similarly here, we take the ATR from the middle of the series. Increasing the percentile will lead to the use of a value closer to the upper bound of the range, while decreasing the percentile will lead to the use of a value closer to the lower bound.
How to Use:
The Focused ATR is especially useful for determining the sizes of stop-losses and take-profits, thanks to its ability to consider the value in the middle of the series of price changes rather than the average value. This allows traders to more accurately assess volatility and risk, which in turn can assist in optimizing trading strategies
---
Фокусированный Средний Истинный Диапазон (Focused ATR) представляет собой модифицированную версию классического индикатора ATR. Он разработан с целью предоставления трейдерам более точных данных о волатильности, минимизируя влияние резких скачков волатильности.
Основное отличие Фокусированного ATR от стандартного ATR заключается в использовании процентиля. Вместо того, чтобы рассчитывать среднее значение изменений цены, как это делает обычный ATR, Фокусированный ATR выбирает значение в середине диапазона изменений цены. Это делает его менее чувствительным к резким изменениям волатильности, что может быть полезно в некоторых торговых сценариях.
Настройки:
Процентиль. Этот параметр определяет, какое значение в ряду изменений цены будет использоваться. Например, если процентиль равен 50, то индикатор будет использовать медианное значение ряда изменений цены. Это стандартное значение. Представьте себе, что ученики класса выстроились по росту, и мы считаем не средний рост всех учеников, а берем рост учеников из середины колонны. Так и тут. Мы берем ATR из середины ряда. Увеличение процентиля приведет к использованию значения, ближе к верхней границе диапазона, в то время как уменьшение процентиля приведет к использованию значения, ближе к нижней границе.
Как использовать:
Фокусированный ATR особенно полезен для определения размеров стоп-лоссов и тейк-профитов, благодаря своей способности учитывать значение в середине ряда изменений цены, а не среднее значение. Это позволяет трейдерам более точно оценить волатильность и риск, что в свою очередь может помочь в оптимизации торговых стратегий.
.
Trading Session TemplateDescription:
The Trading Session Template Indicator is a powerful script that allows traders to customize their own trading session time range on a chart. With this indicator, you have the flexibility to define specific hours during which you prefer to focus your trading activities. The example chart showcases the New York session hours, but you can easily adapt it to any desired time range based on your trading strategy and preferences.
Key Features:
Customizable Trading Session: The indicator empowers you to define your own trading session time range, tailored to your preferred market sessions or specific trading hours. This flexibility ensures that the indicator aligns with your unique trading strategy.
Highlighted Trading Session: When a new trading day begins, the script automatically scans for the specified time range. Once the first candle within the range begins printing, the background color of the chart is highlighted, indicating the beginning of the trading session. When the last candle within the range is closed, the background color returns to normal.
Focus on Specific Market Sessions: This indicator is particularly useful for traders who prefer to trade certain market sessions or specific hours during the day. By customizing the trading session, you can better align your trading activities with specific market conditions and trading opportunities.
Candle Pattern Detection: The indicator includes the ability to detect candle patterns such as Doji, Engulfing, Hammer, and Shooting Star. You can activate the desired candle patterns and set up alerts for them. When an alert is triggered, indicating the formation of a specific candle pattern, you can further analyze the market and make informed trading decisions.
ATR Filter: The indicator offers an ATR (Average True Range) filter to limit noise and focus on candle patterns with a size comparable to the ATR. You can set a minimum and maximum size for a candle compared to the ATR. This helps you filter out smaller or larger candles that may not align with your trading preferences.
Stop Loss (SL) and Take Profit (TP) Levels: When a candle pattern is detected, based on the ATR, the indicator can display suggested Stop Loss and Take Profit levels. This feature provides additional guidance for risk management and potential profit targets.
User-Friendly Interface: The indicator provides a user-friendly interface with adjustable settings and switches for customization. Tooltips are available to guide you through the various options and configurations, making it easy to adapt the indicator to your trading style and preferences.
Note:
The Trading Session Template Indicator is designed for timeframes lower than 1D. It does not plot any information on timeframes of 1D and higher.
Disclaimer:
The Trading Session Template Indicator is provided for informational and educational purposes only. Trading in the financial markets involves risk, and you should only trade with funds that you can afford to lose. The indicator's past performance is not indicative of future results. Always conduct your own research and due diligence before making any investment decisions. The creator of this indicator shall not be held responsible for any losses or damages incurred from the use of this indicator.
Position Size Calculator (EzAlgo)Upon adding the indicator to the chart, you will be prompted to place entry price lines, stop loss price line, and multiple take profit price lines by clicking at the desired price level on the chart.
Section Summaries
Table Settings: Allows users to select position and font size from drop-down menus. Displays current settings and potential profit/loss values.
Price Points: Users can set their Entry and select whether they want to include a DCA entry, Stop Loss price, Liquidation Buffer %, Take Profit levels and the amount of position to close at each level.
Risk Management: Users fill out their Account Size, set their Risk % (or fixed $ amount) for each Entry, set Manual Leverage, or allow the indicator to automatically choose the leverage based on the Stop Loss price distance from Entry and the Risk % per Entry.
User-Input Descriptions
DCA Price: The price at which users initiate their second, equally sized and leveraged position when using a Dollar-Cost Averaging (DCA) strategy. Upon reaching the DCA Price, the Entry Price adjusts to the Avg Price, calculated as the midpoint between initial and DCA entries.
Liquidation Buffer: A pre-set percentage that determines how close to the Stop Loss a position can get before it's liquidated. This assists the Auto Leverage feature in optimizing the leverage amount according to risk tolerance.
Risk per Entry: The proportion of the account, in % or a fixed dollar amount, that users are willing to risk for each trading position. If DCA is checked, this will assume users are entering with half of the total position size per entry.
Automatic Leverage: Auto Leverage automatically determines the optimal leverage level for a trade based on the user's Stop Loss price distance from the Entry point and the user-defined risk percentage per Entry. It also considers a user-defined Liquidation Buffer, which is a preset percentage determining how close to the Stop Loss a position can get before it's liquidated. This tool allows traders to optimize their leverage amount according to their risk tolerance.
Max Leverage: The highest leverage level users are willing to use, even if the exchange permits higher. This limit applies when the Auto Leverage feature is enabled.