Triple Supertrend with EMA and ADX strategyPublishing a strategy that includes adx and ema filter as well
Entry: all three Supertrend turns positive. If a filter of ADX and EMA is applied, also check if ADX is above the selected level and close is above EMA
Exit: when the first supertrend turns negative
opposite for short entries
A FIlter is given to take or avoid re-enter on the same side. For example, After a long exit, if the entry condition is satisfied again for long before the short single is triggered it takes re-entry if selected.
Search in scripts for "TAKE"
Compound strategyIn this strategy, I looked at how to manage the crypto I bought. Once we have a little understanding of how cryptocurrency is valued, we can manage the coins we have. For example, the most valuable coin in a coin is to sell when it is overvalued and re-buy when it is undervalued. Furthermore, I realised that buying from the right place and selling at the right time is very important to make a good profit. When it says sell, it's divided into several parts.
1. When the major uptrend is over and we are able to make the desired profit, we will sell our holdings outright.
2. Selling in the middle of a down trend and buying less than that amount again
3. When a small uptrend is over, sell the ones you bought at a lower price and make a small profit.
The other important thing is that the average cost is gradually reduced. Also, those who sell at a loss will reduce their profit (winning rate), so knowing that we will have a chance to calculate our loss and recover it. I used this to write a strategy in Trading View. I have put the link below it. From that we can see how this idea works. What I did was I made the signal by taking some technical indicators as I did in the previous one (all the indicators I got in this case were directional indicators, then I was able to get a good correlation and a standard deviation. I multiplied the correlation and the standard deviation by both and I took the signal as the time when the graph went through zero, and I connected it to the volume so that I could see some of the volume supported by it.)
Now let me tell you a little bit about what I see in this strategy. In this I used the compound effect. That is, the strategy, the profit he takes to reinvest. On the other hand, the strategy itself can put a separate stop loss value on each trade and avoid any major loss from that trade. I also added to this strategy the ability to do swing trading. That means we can take the small profits that come with going on a big up trend or a big down trend. Combined with Compound Effect, Stop Loss and Swing Trading, I was able to make a profit of 894% per annum (1,117.62% for 15 months) with a winning rate of 80%. Winning rate dropped to 80% because I added stop loss and swing trading. The other thing is that I applied DCA to this in both the up trend and the down trend (both). That was another reason for me to make a good profit. The orange line shows how to reduction of costly trade. The yellow line shows the profit and you can see that the profit line does not go down during the loss trades. That's because I want to absorb the loss from that trade.
SAR + 3SMMA with SL & TPThis script is a combination of SAR strategy and 3 Smoothed Moving Averages.
Strategy:
Takes SAR longs when all 3 SMMAs are rising. Take SAR short when all 3 SMMAs are falling.
Supports StopLoss and TakeProfit.
If you have found a profitable setup for it, please share in the comments or private chat.
Valuation TableHey folks, I hope you are all doing well!
This is an indicator that you can use to help you to evaluate companies. There are a few things I added to the valuation table that I personally use and I will explain what they are.
I added Joel Greenblatt's ROC% because it takes Earnings before Interest and Taxes to reflect more closely what the company earns from its operations, while including the cost of depreciation/amortization of assets. A high double digit figure often means that the company has a defensible edge versus its competitors (e.g. a strong brand or a unique product). It's good for relative valuation (comparing two companies in the same industry).
I also added Donald Yacktman's forward rate of return. Yacktman defines forward rate of return as the normalized free cash flow yield plus real growth plus inflation . Unlike the Earnings Yield %, the Forward Rate of Return uses the normalized Free Cash Flow of the past seven years, and considers growth. The forward rate of return can be thought of as the return that investors buying the stock today can expect from it in the future. Yacktman’s Forward Rate of Return may or may not be a useful metric. However, it does present new ways to see and think about stocks we may want to buy.
I added a box called "real price" and that is from Peter Lynch's book, "One Up on Wall Street," where he talked about how the real price of the stock is really the current price - Net Cash Per Share.
I would also personally pair this script with TradingView's built in financial indicators that shows the revenue growth, net income, etc.
Note: the script only works on the weekly timeframe and it will take some time to load because it has a lot of data.
multiple orders - strategy - educationalHi,
Here is a 'template', using array's, for multiple orders and different SL/TP levels per trade (This is an example with max 5 open trades)
The 'switch' makes sure that the first available position will be used,
for example, when 'L1' is closed in the past, and a buy condition is triggered, position 'L1' will be filled,
should it be that 'L1', 'L2', 'L3' are already filled, then position 'L4' will be filled, ...
An extra table is added with data of the trades
Be aware, the 'Buy and Hold' resembles the profit when 100% of the available equity has been bought at the time of the very first trade and sold now. On the other hand, the positions work with a % of equity, 20% per trade (5 x 20 = 100%)
You can see that every trade exits on its own terms, without interference of other trades
Important, this technique only works if in the strategy() function:
- close_entries_rule -> set at 'ANY'
- pyramiding is set at max amount of trades or higher (in this case 5 or higher)
Cheers!
Volume Pace & Pressure TableHave you ever wanted to know if a particular tickers volume is above or below average while still in the trading day? This indicator displays an easy-to-read table that informs the user exactly what is occurring in intraday volume. And a whole lot more!
Description
This indicator displays a variable table with either two or three columns and always three rows. It packs everything a user needs to know about volume in one small table. The table shows:
Current trading days volume
Average daily volume
Volume Pace
Volume Pressure (Buying & Selling)
Volume Pace
Volume Pace is a mathematical calculation invented by the author, Infinity_Trading . The problem was to figure out a way to know if the current days volume was below average or above average while still in the trading day. Calculations like Percent Daily Volume don’t work during the intraday trading hours. For example, say SPY has a 20-day volume average of 100 million shares. If in the first hour SPY has only traded 10 million shares then dividing the current volume into the average daily volume doesn’t tell the user anything when there is still 5.5 hours of trading left in the trading day. There had to be a better way! The solution was to chop up the trading day into evenly divisible time periods (i.e. <= 30 minutes). The Volume Pace algorithm takes the average daily volume and chops it up into small time periods based upon the charts current timeframe. This is the average volume per smaller time period. Then use the current days volume and the number of time periods that have occurred in the trading day so far (at the current moment in time i.e. the current candlestick) to form a calculation that returns the volume above or below the average volume up to that point in time.
Volume Pace Equations
Intraday Vol. Pace = Today’s Current Vol. - ( ( Average Daily Vol. / Time periods in trading day ) * Time periods that have occurred so far in trading day )
Postday Vol. Pace = Today’s Trading Vol. - Average Daily Vol.
^ Vol. = Volume (because TradingViews pine tags are dumb)
Volume Pace Definitions
Volume Pace is the difference in cumulative volume between todays current volume and the average daily volume up to same time of the day
Volume Pace Usage
If the Volume Pace is a positive number then it means that up to the current trading time the volume is that amount greater than the average daily volume over that same intraday time span.
If the Volume Pace is a negative number then it means that up to the current trading time the volume is that amount smaller than the average daily volume over that same intraday time span.
If the Volume Pace is positive during the intraday then the volume is on track to be an above average volume trading day.
If the Volume Pace is negative during the intraday then the volume is on track to be a below average volume trading day.
The Percent Volume Pace is the percent increase or decrease of the current volume compared to the average volume up to the same time of day. Or the Percent Volume Pace is the Volume Pace expressed as a percentage.
After the trading day is complete the Volume Pace will be the difference between the Daily Volume and the Average Daily Volume. And the same thing applies to the Percent Volume Pace.
Volume Pressure
The author, Infinity_Trading, did not invent the calculations for Volume Pressure but the definitions and explanations of Volume Pressure are their own creations. In specific terms, Volume Pressure is a mathematical calculation that uses the direction and distances of individual candlesticks bodies and wicks to assign a numerical value to volume.
buyingPressure = vol * (close - low) / (high - low)
sellingPressure = vol * (high - close) / (high - low)
^ vol = Volume (because TradingViews pine tags are dumb)
The author wants to make clear that volume “pressure” isn’t a real thing. Trades in any market require a buyer and a seller. So there is always an equal number of buyers and sellers. Thus, the idea that there are more buyers or more sellers isn’t rooted in reality. BUT the author believes that the calculation and understanding of “volume pressure” takes a very complex subject (price moment in a market) and condenses into something that intuitively makes sense to humans (pressure) and places it onto something that is already on everyone’s charts (volume bars).
The calculation for Buying Pressure is really calculating the upward distance between the low and the close of the candle. While Selling Pressure is measuring the downward distance from the high to the close. And both are using volume bars to express these measurements. So if an individual candle goes down then the red Selling Pressure will be more on the stacked bar chart than the green Buying Pressure. And vice versa for candles that went up. If a Volume Pressure bar is completely one color then it means, for a downward candle, the low and close were equivalent, and for an upward candle, the high and the close were the same. Lastly, the Buying & Selling Pressure will always add up to 100%.
Inputs and Style
In the Input section the user can set the number of days to use for all of the average calculations. All aspects of the table can be controlled. The background color, text color, border widths, and border colors. Also, the table can be moved to 9 unique locations around the chart for complete user control. Also, the user can use their cursor to hover over each cell in the table to reveal a tooltip definition of the calculation in the cell.
Special Notes
The volume table won’t display when the chart timeframe is weekly or monthly because the logic uses “daily” volume.
The Volume Pace column in the table disappears when the timeframe is greater than 30 minutes. Because for Volume Pace to work the time periods must be equally divisible into 6.5 hours (the duration of trading day).
Long Term: Cumulative Moving AverageWho to use?
This indicator is for Long Term Investors or for Position trading and not for Day traders.
What time-frame to use?
• Daily, Weekly or Monthly
What is Blue line?
• Blue line is Cumulative Moving Average. It is cumulative sum of closing price.
• It is a trend reversal level.
• It is a strong support level.
• If price is below Blue line better not to take any Long position until it crosses above it.
What are Red lines?
• Red lines are Multiplier levels.
• These are target levels to exit the position.
• It can be breakout or pull back levels.
• The level combination numbers can be fully odd or even numbers.
• For example in certain stocks the working levels will be 1x, 3x, 5x etc., in others it will be even numbers like 2x, 4x, 6x etc.
• In some cases the levels need to be tweaked with custom decimals like 1.1x, 2.1x, 3.1x, 4.1x etc. to align the support & resistance levels.
How to use?
Entry
• Enter when the Price reach closer to the Blue line.
• Enter Long when the Price takes a pullback or breakout at the Red lines.
Exit
• Exit position when the Price reach closer to the Red lines in Long positions.
Indicator Menu
• Works only in higher time-frames like D, W & M.
• Will not work in Lower time-frames less than "D" or the Launch Date shows wrong in Lower time-frames.
Multipliers:
(Read above What are Red lines?)
Launch Date:
• Launch Date: Starting date of stock when it appeared in the exchange. Works only in D, W & M timeframes.
• Years: Total number of years from the Launch Date. Accurate date will be shown in Daily timeframe.
• Candles Count: Total number of candles from the Launch Date in the current timeframe.
Labels:
• First number is last traded price.
• Second number in () is percentage change from last traded price to that level.
HighTimeframeTimingLibrary "HighTimeframeTiming"
@description Library for sampling high timeframe (HTF) historical data at an arbitrary number of HTF bars back, using a single security() call.
The data is fixed and does not alter over the course of the HTF bar. It also behaves consistently on historical and elapsed realtime bars.
‼ LIMITATIONS: This library function depends on there being a consistent number of chart timeframe bars within the HTF bar. This is almost always true in 24/7 markets like crypto.
This might not be true if the chart doesn't produce an update when expected, for example because the asset is thinly traded and there is no volume or price update from the feed at that time.
To mitigate this risk, use this function on liquid assets and at chart timeframes high enough to reliably produce updates at least once per bar period.
The consistent ratio of bars might also break down in markets with irregular sessions and hours. I'm not sure if or how one could mitigate this.
Another limitation is that because we're accessing a multiplied number of chart bars, you will run out of chart bars faster than you would HTF bars. This is only a problem if you use a large historical operator.
If you call a function from this library, you should probably reproduce these limitations in your script description.
However, all of this doesn't mean that this function might not still be the best available solution, depending what your needs are.
If a single chart bar is skipped, for example, the calculation will be off by 1 until the next HTF bar opens. This is certainly inconsistent, but potentially still usable.
@function f_offset_synch(float _HTF_X, int _HTF_H, int _openChartBarsIn, bool _updateEarly)
Returns the number of chart bars that you need to go back in order to get a stable HTF value from a given number of HTF bars ago.
@param float _HTF_X is the timeframe multiplier, i.e. how much bigger the selected timeframe is than the chart timeframe. The script shows a way to calculate this using another of my libraries without using up a security() call.
@param int _HTF_H is the historical operator on the HTF, i.e. how many bars back you want to go on the higher timeframe. If omitted, defaults to zero.
@param int _openChartBarsIn is how many chart bars have been opened within the current HTF bar. An example of calculating this is given below.
@param bool _updateEarly defines whether you want to update the value at the closing calculation of the last chart bar in the HTF bar or at the open of the first one.
@returns an integer that you can use as a historical operator to retrieve the value for the appropriate HTF bar.
🙏 Credits: This library is an attempt at a solution of the problems in using HTF data that were laid out by Pinecoders in "security() revisited" -
Thanks are due to the authors of that work for an understanding of HTF issues. In addition, the current script also includes some of its code.
Specifically, this script reuses the main function recommended in "security() revisited", for the purposes of comparison. And it extends that function to access historical data, again just for comparison.
All the rest of the code, and in particular all of the code in the exported function, is my own.
Special thanks to LucF for pointing out the limitations of my approach.
~~~~~~~~~~~~~~~~|
EXPLANATION
~~~~~~~~~~~~~~~~|
Problems with live HTF data: Many problems with using live HTF data from security() have been clearly explained by Pinecoders in "security() revisited"
In short, its behaviour is inconsistent between historical and elapsed realtime bars, and it changes in realtime, which can cause calculations and alerts to misbehave.
Various unsatisfactory solutions are discussed in "security() revisited", and understanding that script is a prerequisite to understanding this library.
PineCoders give their own solution, which is to fix the data by essentially using the previous HTF bar's data. Importantly, that solution is consistent between historical and realtime bars.
This library is an attempt to provide an alternative to that solution.
Problems with historical HTF data: In addition to the problems with live HTF data, there are different issues when trying to access historical HTF data.
Why use historical HTF data? Maybe you want to do custom calculations that involve previous HTF bars. Or to use HTF data in a function that has mutable variables and so can't be done in a security() call.
Most obviously, using the historical operator (in this description, represented using { } because the square brackets don't render) on variables already retrieved from a security() call, e.g. HTF_Close{1}, is not very useful:
it retrieves the value from the previous *chart* bar, not the previous HTF bar.
Using {1} directly in the security() call instead does get data from the previous HTF bar, but it behaves inconsistently, as we shall see.
This library addresses these concerns as well.
Housekeeping: To follow what's going on with the example and comparisons, turn line labels on: Settings > Scales > Indicator Name Label.
The following explanation assumes "close" as the source, but you can change it if you want.
To quickly see the difference between historical and realtime bars, set the HTF to something like 3 minutes on a 15s chart.
The bars at the top of the screen show the status. Historical bars are grey, elapsed realtime bars are red, and the realtime bar is green. A white vertical line shows the open of a HTF bar.
A: This library function f_offset_synch(): When supplied with an input offset of 0, it plots a stable value of the close of the *previous* HTF bar. This value is thus safe to use for calculations and alerts.
For a historical operator of {1}, it gives the close of the *last-but-one* bar. Sounds simple enough. Let's look at the other options to see its advantages.
B: Live HTF data: Represented on the line label as "security(){0}". Note: this is the source that f_offset_synch() samples.
The raw HTF data is very different on historical and realtime bars:
+ On historical bars, it uses a flat value from the end of the previous HTF bar. It updates at the close of the HTF bar.
+ On realtime bars, it varies between and within each chart bar.
There might be occasions where you want to use live data, in full knowledge of its drawbacks described above. For example, to show simple live conditions that are reversible after a chart bar close.
This library transforms live data to get the fixed data, thus giving you access to both live and fixed data with only one security() call.
C: Historical data using security(){H}: To see how this behaves, set the {H} value in the settings to 1 and show options A, B, and C.
+ On historical bars, this option matches option A, this library function, exactly. It behaves just like security(){0} but one HTF bar behind, as you would expect.
+ On realtime bars, this option takes the value of security(){0} at the end of a HTF bar, but it takes it from the previous *chart* bar, and then persists that.
The easiest way to see this inconsistency is on the first realtime bar (marked red at the top of the screen). This option suddenly jumps, even if it's in the middle of a HTF bar.
Contrast this with option A, which is always constant, until it updates, once per HTF bar.
D: PineCoders' original function: To see how this behaves, show options A, B, and D. Set the {H} value in the settings to 0, then 1.
The PineCoders' original function (D) and extended function (E) do not have the same limitations as this library, described in the Limitations section.
This option has all of the same advantages that this library function, option A, does, with the following differences:
+ It cannot access historical data. The {H} setting makes no difference.
+ It always updates at the open of the first chart bar in a new HTF bar.
By contrast, this library function, option A, is configured by default to update at the close of the last chart bar in a HTF bar.
This little frontrunning is only a few seconds but could be significant in trading. E.g. on a 1D HTF with a 4H chart, an alert that involves a HTF change set to trigger ON CLOSE would trigger 4 hours later using this method -
but use exactly the same value. It depends on the market and timeframe as to whether you could actually trade this. E.g. at the very end of a tradfi day your order won't get executed.
This behaviour mimics how security() itself updates, as is easy to see on the chart. If you don't want it, just set in_updateEarly to false. Then it matches option D exactly.
E: PineCoders' function, extended to get history: To see how this behaves, show options A and E. Set the {H} value in the settings to 0, then 1.
I modified the original function to be able to get historical values. In all other respects it is the same.
Apart from not having the option to update earlier, the only disadvantage of this method vs this library function is that it requires one security() call for each historical operator.
For example, if you wanted live data, and fixed data, and fixed data one bar back, you would need 3 security() calls. My library function requires just one.
This is the essential tradeoff: extra complexity and less robustness in certain circumstances (the PineCoders function is simple and universal by comparison) for more flexibility with fewer security() calls.
Market IndicatorIt shows bullish / bearish market. It takes the closing price and divide it by the last 20 periods moving average. Then, it takes the logarithm. So, if:
-Price above MA20: >0
-Price below MA20: <0
3 Candle Strike StretegyMainly developed for AMEX:SPY trading on 1 min chart. But feel free to try on other tickers.
Basic idea of this strategy is to look for 3 candle reversal pattern within trending market structure. The 3 candle reversal pattern consist of 3 consecutive bullish or bearish candles,
followed by an engulfing candle in the opposite direction. This pattern usually signals a reversal of short term trend. This strategy also uses multiple moving averages to filter long or short
entries. ie. if the 21 smoothed moving average is above the 50, only look for long (bullish) entries, and vise versa. There is option change these moving average periods to suit your needs.
I also choose to use Linear Regression to determine whether the market is ranging or trending. It seems the 3 candle pattern is more successful under trending market. Hence I use it as a filter.
There is also an option to combine this strategy with moving average crossovers. The idea is to look for 3 candle pattern right after a fast moving average crosses over a slow moving average.
By default , 21 and 50 smoothed moving averages are used. This gives additional entry opportunities and also provides better results.
This strategy aims for 1:3 risk to reward ratio. Stop losses are calculated using the closest low or high values for long or short entries, respectively, with an offset using a percentage of
the daily ATR value. This allows some price fluctuation without being stopped out prematurely. Price target is calculated by multiplying the difference between the entry price and the stop loss
by a factor of 3. When price target is reach, this strategy will set stop loss at the price target and wait for exit condition to maximize potential profit.
This strategy will exit an order if an opposing 3 candle pattern is detected, this could happen before stop loss or price target is reached, and may also happen after price target is reached.
*Note that this strategy is designed for same day SPY option scalping. I haven't determined an easy way to calculate the # of contracts to represent the equivalent option values. Plus the option
prices varies greatly depending on which strike and expiry that may suits your trading style. Therefore, please be mindful of the net profit shown. By default, each entry is approximately equal
to buying 10 of same day or 1 day expiry call or puts at strike $1 - $2 OTM. This strategy will close all open trades at 3:45pm EST on Mon, Wed, and Fri.
**Note that this strategy also takes into account of extended market data.
***Note pyramiding is set to 2 by default, so it allows for multiple entries on the way towards price target.
Remember that market conditions are always changing. This strategy was only able to be back-tested using 1 month of data. This strategy may not work the next month. Please keep that in mind.
Also, I take no credit for any of the indicators used as part of this strategy.
Enjoy~
Multi Day vWAP (Customizable) with AverageIntroducing the Multi-Day vWAP indicator that is fully customizable with average indicator option.
High level overview (default settings):
Default is 10 plots with each setting 1 day apart (1-10 day look back)
Labels for each plot are turned on by default (labels will default to your value, more below)
Use Style tab in options to change colors, plot style, and turn on/off individual plots
Average is turned off by default (style panel will show it's on-- go to Inputs panel and select "Show vWAP Average" to turn on)
Best use case is go to Visibility Panel in options and turn off for Days, Weeks, and Months
To turn off all labels at once go to Style tab and unselect "Labels" checkbox
If you want plots to be as small as possible in Inputs panel set the Plot Width to 0 (zero)
Detail Overview
This indicator will plot your custom daily vWAP values.
You can change the lookback period. If you change the lookback period the label will match your custom value.
For instance, if you change vWAP 1 value to "5", the label for this plot will be 5.
Average Notes:
The average will average all the vWAP values by the divisor. The default is to average all values by 10.
The average will always start to plot from the shortest lookback period. It is not possible to have the average plot before that point.
Trading Tips (default settings)
The simple way to use the vWAP is to treat them as magnets.
For intance,
Generally if price is trading below all the vWAP plots the chart is in a momentum short enviroment. All vWAP areas can be used for upside resistance/reaction areas.
If price is trading above the chart is in a momentum long enviroment and pullbacks can to vWAP levels can be looked as areas of support/reaction.
For instance:
Price is above the current day vWAP and looking to test the previous day vWAP value.
As it approaches the 2 value you are expecting this area to be a reaction area (good trade entry area) for a continuation short trade. Possibly to check back into the current day vWAP value.
I should share that this is a simple way to trade with the vWAP (true success with vWAP is understanding that price trades in vWAP channels).
Stacking and Strong Momentum
The other pattern you should look for is stacking.
For instance on this CL chart:
This chart is strong momentum long.
All 10 day vWAP plots are stacked on top of each other.
Previous action tested below all vWAPs. Price traded thru and came back and retested. Finally closing above all and above the vWAP avearge (red).
When the day vWAP was broke the next target you look for is the 2 vWAP. This reaction area held up and momentum long continued and continuing to trade above current day vWAP.
7 Day Rolling Example (Larger Timeframe)
Another great way to use this indicator is to customize the values for rolling 7 days (5 days for cash markets).
To do this set values to: 7, 14, 21, 28, 35, 42, 49, 56, 63, 70
For instance, this BTC chart:
This chart provides a good example of what you'll find when a chart is at a pivot point.
Price is checking in at the average to remain momentum long.
Upside longer term vWAP plots have been tested and had expected reaction.
Price is trading above the shorter term values.
Simple TA here will note if chart continues to trade above and takes out upper vWAPs long momentum is gaining ground.
On the downside if price trades thru the lower vWAP plots you would expect further downside. In this scenario you would be mindful to expect upside tests before (which could be good entry/reaction areas).
NQ example with 7 day values:
Overall chart is momentum short.
7 is above 14, 21
Maybe early sign of bottom.
If price takes out these values and holds above the buyers have quite a few challenges above.
Price Difference At ExpirationThe general idea:
When selling short options it is important to enter trades with a high probability of expiring Out Of The Money (OTM). Short options have limited upside and unlimited downside and so it is crucial to get both the direction and magnitude correct before entering a trade. However, this can be tricky to do reliably and so it's also a good idea to write options with a strike price far enough away from the underlying's price so that if you are directionally wrong, there's still a good chance of making a profitable trade.
But how far from the current price is far enough for a given underlying? How much is too much?
This indicator seeks to help short options traders answer these questions.
This script is fairly simple and is meant to work only on a daily chart. The basic idea is to show "if I had entered a trade with X days till expiration and a $Y strike, would the actual price change in the underlying have threatened my position before the option expired?"
To answer this question we take the closing price of each day and compare it with the closing price X number of days prior. If the current day closed higher than the day X days prior (Option entry), then we draw a positive bar with the value of the price change. Conversely, if the current day closed lower than the day X days prior we draw a negative bar with the value of the price change. For each bar we draw, we compare it with a given "max range" or "buffer". This buffer is how far OTM with which you are seeking to enter your options trade. If the actual price difference between the theoretical start and end of your trade is greater than the buffer you specified, the bar is drawn in red. Otherwise, if the total price change is safely within the buffer you built into your trade, the bar is drawn in gray.
Obviously, if you are really good at picking the direction of the underlying, the buffer you build into your options contract doesn't matter, you get a profitable trade no matter what! Good job, and please share your charts with me! However, for those of use a bit less clairvoyant, this indicator seeks to help options traders get a sense for whether or not their contracts have enough wiggle room to account for the price moving against them unexpectedly. This indicator gives you the ability to adjust expiration and buffer and get a sense for how well that configuration would have done historically if you had taken each contract to expiration. The assumption being: if it worked really well in the past, then it might work well for this trade. Obviously, past performance doesn't guarantee future results. Just because a particular buffer has worked well in the past doesn't mean that it will work now. Please trade at your own risk. This is just meant to help give a better sense of scale by offering historical comparisons. You can think of this as a rudimentary live backtesting tool.
How to use:
First, add the indicator to your chart and select an underlying. The example chart shown above is for RUT. In the example, I am interested in knowing whether a $200 buffer within 10DTE trades is sufficient to produce a likely winning trade even if I'm wrong about the direction of the underlying. To do this I push the settings button of the indicator and type in 10 for "Interval (days)" and 200 for "Buffer". Next I select only "Monday", "Wednesday", and "Friday" from the expiration checkboxes; leaving "Tuesday" and "Thursday" unchecked. This is because RUT has 3 expirations per week unlike most others that have just one per week (Friday). If you are looking at weekly options you should just check "Friday".
How to interpret the chart:
- Gray bars are your friends. Gray bars mean that if you had entered into a trade with the given DTE and buffer and you happen to be wrong about the direction (it happens to us all!), you would have still ended up with a winning trade. Good Job!
- Red bars indicate possible trouble. This means that your option would have likely been exercised if held till expiration given the amount of buffer you built into the contract. You might have needed to close for a loss or roll or take assignment.
How this can help:
I find it useful to adjust the DTE and buffer when I am going to enter a trade. It helps me see whether a similar trade has historically been resilient to lapses in directional judgement or not. If I'm really confident in the direction, then this won't be so useful. I could then sell closer to the money and feel like I have a winning position. But if there is less certainty and I want to dial back my risk, then this indicator helps me find the right risk/reward with regard to picking expirations and strikes.
Silen's Financials Fair ValueIt is finally here! 🔥 My 3rd and most important script in my Financial series! 🚀
Ever imagined to see all fundamentals (or many that is) combined into one indicator that is right on your chart, showing you how your favorite stock is trading compared to its fundamentals?
Well, here is your answer! 📡
____________________________________________________________________________________________
This script shows you my own personal interpretation of fair value, based solely on the financial fundamentals of a company compared to market averages.
I don't believe that certain sectors of the market should be priced higher than others. If you look at historical data you'll see that favored sectors always rotate - placing insanely high P/E multiples on some sectors. Once they are "out" and people rotate away from those sectors you're left with nothing but the naked fundamentals that matter. So, you'll see many companies, that have been doing well on paper, see their share price decline by 70-90% for no other reasons than people favoring other sectors.
That's why it's even more important to focus on fair value that is solely fundamentals-based. Know when your stock gets to expensive. 🤯
____________________________________________________________________________________________
To give you some examples:
- Most Megacaps trade at historically high valuations, several times my fair value. Those include AAPL, MSFT, NVDA, AMZN, TSLA, JPM, TSM, V and so on. And no, in the past they partially traded below (my) fair value.
- Most Cybersecurity / Cloud companies are trading at truly massive multiples of my fair value. (NET, DDOG, etc)
- Many Smallcaps & Midcaps are trading several multiples (OESX, CODX, QFIN) below my fair value. And no, in the past they partially traded above (my) fair value.
Ok, so much about the market. You ultimately decide how much you want to orientate on fair value. 👨🏫
____________________________________________________________________________________________
This fair value indicator (purple line):
Takes the P/E rate of the company and compares it to the market (50% weight)
Takes the P/S rate of the company and compares it to the market (50% weight)
Then adds boni and mali f or debt/equity rates and debt and equity itself
Also looks at past growth and calculates future P/E and P/S rates which adds , in some cases, value to the fair value (green line)
Also compares how historical valuations have behaved compared to fair value and simulates a fair value guideline (dark blue line)
____________________________________________________________________________________________
This script is part 3️⃣ of a series of indicators that work well together.
Script 1️⃣ of the series is:
P/E & P/S Rates
Script 2️⃣ of the series is:
Debt & Equity
If you use all 3 scripts together it will look like this, giving you truly deep and simple information about the fundamentals of a company:
Example 1 - AMD
Example 2 - HZO
Example 3 - APPS
I hope this script makes your investing and stock picks a lot easier! 🔆💹🕗
Disclaimer: Fair value is always subjective. There are many different approaches to fair value. This one is only my personal interpretation.
Disclaimer 2: This script works only for the Day-Timeframe.
Disclaimer 3: This script uses 17,5 P/E and 3,0 P/S as market averages. The actual average keeps changing but, historically speaking, these seemed to be good numbers.
Feel free to share your thoughts and feedback! 🙃
DOJI FU IndicatorIndicator is designed to paint a doji, the size of which can be adjusted in settings.
Provided there is a valid doji, the following candle is a 'FU candle' or an 'Institution' candle. This candle wicks above/below the doji and takes liquidity from above or below.
Colours can be changed
Red = Doji candle
Yellow = FU candle
Example shown on the 1hr chart, red doji indicating a change of trend upwards, the FU candle (yellow) takes liquidity from above and sweeps down.
Margin Zones[kryptodude]This indicator is based on the margin requirements of the CME exchange.
Zones act as support and resistance levels, which are more likely to have a price reaction.
The recommended zones for entering a position, as well as taking profits, are zones 50 and 100.
For example, you decide to open a short position on the +100 zone,
in which case it is recommended to place a stop-loss behind the zone.
Take-profit part at -50 and -100, based on the zones from the formed maximum at the +100 zone.
Settings:
Select the currency pair and the exchange on which the indicator will work, For example BINANCE:BTCUSD
"Margin" (for example,now 68280, the next day the margin will be different)
"Tick cost" for BTC = 25 or 12.5
taken from the CME exchange.
"Price max"- High yesterday (for example 44451).
"Price min"- Low yesterday (for example 41280).
Please note, with strong volatility,
it is recommended to change the Tick cost instead of 25 to put 12.5
And also, only dots " . " not commas ", " work in the indicator.
SignalsThis script allows you to calculate position size, and future profit, loses.
- You can add 3 target values and 1 stop loss
- Optionally you can display table, position it as you like, and see risk ratio
Plans:
- add profit loss to the labels
Kzx PT mod v1.0 by RX-RAYKzx Position tracker mod v1.0 by RX-RAY
Original script by K-zax
The modification was made for the USDRUB ticker (the number of digits in the values of price, interest, lot volume and profit loss for other tickers may affect the positioning of the inscription, but it is fully operative and it may be used with other tickers )
Typical label view:
74.30 - ENTRY PRICE
+/-0.16% - % of price chang ( range +/-9.99)
20 - position value (range 0-99)
(S) - position type (L) - long (S) - short
+/-0017 - actual profit/loss in cash (range +/- 9999)
(All range value for correct label position,
but script mod can be used out off range)
List of additions and changes:
1. Added display of position value, short / long position type and profit / loss value (including broker commission).
2. Positive interest change now corresponds to profit, negative change in interest to loss in accordance with the type of position ( short/long )
3. The position of the inscription and the digits of the values are fixed and now insignificantly depends on the change in the time interval and the change in the scale of the graph and the change in data values and their signs.
4. Added changing the color of the inscription in the situation positive price change, but profit < commission fee. (critical gain).
Position Size By Risk For Bar SizeThis simple script provides a way of calculating position size on a bar by bar basis for a fixed risk amount.
If you are trading a fixed risk amount (e.g. $100) per trade and your Entry and Stop is defined by a specific bar on the chart (any resolution e.g. 15 min, 5 min, 2 min etc) then this indicator will show you the position size you can take.
The user configures the risk amount per trade in the setting for the indicator, the default is 100 (e.g. $100).
It calculates each bar size (high - low) for the resolution of the chart that is being viewed.
The position size = (risk amount) / (bar size).
It then displays a "." (dot) for each bar and to see the position size hover your mouse over this dot .
The pane for this indicator can be set to the top of the chart by using the "Move pane up" option on the chart so that the indicator is easily accessible and discrete at the top of the chart.
Also, there is an option to use this indicator as a substitute for the built-in volume display.
Support Resistance Zones using confluence & Std. DeviationOverview:
This indicator takes (interactive) input from the user for support and resistance levels and plots important zones considering the other confluence levels in the indicator.
Working of indicator:
This indicator takes six input of Support/resistance level form the user
It has following 32 confluence levels
a.4 Recent positive Divergence levels (DN1, DN2, DN3, DN4)
b.4 recent negative divergence levels (DP1, DP2, DP3, DP4)
d.5 Fibonacci levels (Fib0, Fib236, Fib5, Fib618, Fib786)
e. 7 Pivot levels (P, PR1, PR2, PR3, PS1, PS2, PS3)
f.4 EMAs (E20, E200, E100, E50)
g. ATH, ATL, Weekly High, Weekly Low, two days ago high, two days ago low, previous day high , previous day low
The code checks nearest ‘n’ CONFLUENCE for each level (“Number of confluences to check”) in the indicator, after getting the nearest confluence it calculates the standard deviation of those levels WITH RESPECT TO THE MANUAL INPUT LEVELS.
If the Std. Deviation is less than the input value (“Minimum standard deviation” option) then the zone is displayed on the chart.
How to use:
Add the indicator on the chart select your important support and resistance levels.
Set standard deviation, if the confluence is less than the input standard deviation then you will see those zones on the chart.
You can display all divergence levels; you can display all fib levels. All confluences can be displayed by using the setting of the indicator
How to read the indicator values:
The zone will show all the confluence it has in its zone,
Example:
Table details:
The table shows the maximum and minimum deviation out of all six levels .To see at least one zone you have to make sure that Input value Std. Deviation must be greater than Min Std. Deviation of the table
Sources & refences :
Big thank to www.pinecoders.com and kodify.net
Standard deviation :
www.investopedia.com
function to find 'k' closest elements :
www.techiedelight.com
Interactive support resistance :
Divergence for many indicators:
Auto fib level by DGT:
www.tradingview.com
Dictionary/Object LibraryThis Library is aimed to mitigate the limitation of Pinescript having only one structured data type which is only arrays.
It lacks data types like Dictionaries(in Python) or Object (in JS) that are standard for other languages. Tuples do exist, but it hardly solves any problem.
Working only with Arrays could be overwhelming if your codebase is large. I looked for alternatives to arrays but couldn't find any library.
So I coded it myself and it's been working good for me. So I wanted to share it with you all.
What does it do:
==================
If you are familiar with Python or Javascript, this library tries to immimate Object/Dictonary like structure with Key Value Pairs.
For Example:
object= {name:"John Doe", age: 28 , org: "PineCoders"}
And then it also tries to immitate the Array of Objects (I call it Stack)
like this:
stack= Array({name:"John Doe", age: 28 , org: "PineCoders"},
{name:"Adam Smith", age: 32 , org: "PineCoders"},
{name:"Paragjyoti Deka", age: 25 , org: "PineCoders"})
So there are basically two ideas: Objects and Stacks.
But it looks whole different in Pinescript for obvious reasons.
Limitation:
The major limitation I couldn't overcome was that, for all of the values: both input and return values for properties will be of string type.
This is due to the limiation of Pinecsript that there is no way to return a value on a if-else statement dynamically with different data types.
And as the input data type must be explicitly defined when exporting the library functions, only string inputs are allowed.
Now that doesn't mean you won't be able to use integer, float or boolens, you just need to pass the string value for it using str.tostring() method.
And the output for the getter functions will be in strings as well. But I have added some type conversion methods that you could use from this library itself.
From String to Float, String To Integer and String to Boolean: these three methods are included in this library.
So basically the whole library is based on a manipulatiion of Array of strings under the hood.
///////////////
Usage
///////////////
Import the library using this statement:
import paragjyoti2012/STR_Dict_Lib/4 as DictLib
Objects
First define an object using this method:
for eample:
object1= DictLib.init("name=John,age=26,org=")
This is similar to
object1= {name:"John",age:"26", org:""} in JS or Python
Just like we did here in for "org", you can set initital value to "". But remember to pass string values, even for a numerical properties, like here in "age".
You can use "age="+str.tostring(age). If you find it tedious, you can always add properties later on using .set() method.
So it could also be initiated like this
object= DictLib.init("name=John")
and later on
DictLib.set(object1,"age", str.toString(age))
DictLib.set(object1,"org", "PineCoders")
The getter function looks like this
age= DictLib.get(object1,"age")
name=DictLib.get(object1,"name")
The first argument for all methods .get, .set, and .remove is the pointer (name of the object).
///////////////////////////
Array Of Objects (Stacks)
///////////////////////////
As I mentioned earlier, I call the array of objects as Stack.
Here's how to initialize a Stack.
stack= DictLib.initStack(object1)
The .initStack() method takes an object pointer as argument. It simply converts the array into a string and pushes it into the newly created stack.
Rest of all the methods for Stacks, takes the stack pointer as it's first arument.
For example:
DictLib.pushStack(stack,object2)
The second argument here is the object pointer. It adds the object to it's stack. Although it might feel like a two dimentional array, it's actually an one dimentional array with string values.
Under the hood, it looks like this
////////////////////
Methods
////////////////////
For Objects
-------------------
init() : Initializes the object.
params: (string) e.g
returns: The object ( )
example:
object1=DictLib.init("name=John,age=26,org=")
...................
get() : Returns the value for given property
params: (string object_pointer, string property)
returns: string
example:
age= DictLib.get(object1,"age")
.......................
set() : Adds a new property or updates an existing property
params: (string object_pointer, string property, string value)
returns: void
example:
DictLib.set(object1,"age", str.tostring(29))
........................
remove() : Removes a property from the object
params : (string object_pointer, string property)
returns: void
example:
DictLib.set(object1,"org")
........................
For Array Of Objects (Stacks)
-------------------------------
initStack() : Initializes the stack.
params: (string object_pointer) e.g
returns: The Stack
example:
stack= DictLib.initStack(object1)
...................
pushToStack() : Adds an object at at last index of the stack
params: (string stack_pointer, string object_pointer)
returns: void
example:
DictLib.pushToStack(stack,object2)
.......................
popFromStack() : Removes the last object from the stack
params: (string stack_pointer)
returns: void
example:
DictLib.popFromStack(stack)
.......................
insertToStack() : Adds an object at at the given index of the stack
params: (string stack_pointer, string object_pointer, int index)
returns: void
example:
DictLib.insertToStack(stack,object3,1)
.......................
removeFromStack() : Removes the object from the given index of the stack
params: (string stack_pointer, int index)
returns: void
example:
DictLib.removeFromStack(stack,2)
.......................
getElement () : Returns the value for given property from an object in the stack (index must be given)
params: (string stack_pointer, int index, string property)
returns: string
example:
ageFromObject1= DictLib.getElement(stack,0,"age")
.......................
setElement() : Updates an existing property of an object in the stack (index must be given)
params: (string stack_pointer, int index, string property, string value)
returns: void
example:
DictLib.setElement(stack,0,"age", str.tostring(32))
........................
includesElement() : Checks if any object exists in the stack with the given property-value pair
params : (string stack_pointer, string property, string value)
returns : Boolean
example:
doesExist= DictLib.includesElement(stack,"org","PineCoders")
........................
searchStack() : Search for a property-value pair in the stack and returns it's index
params: (stringp stack_pointer, string property, string value)
returns: int (-1 if doesn't exist)
example:
index= DictLib.searchElement(stack,"org","PineCoders")
///////////////////////
Type Conversion Methods
///////////////////////
strToFloat() : Converts String value to Float
params: (string value)
returns: float
example:
floatVal= DictLib.strToFloat("57.96")
.............................
strToInt() : Converts String value to Integer
params: (string value)
returns: int
example:
intVal= DictLib.strToFloat("45")
.............................
strToBool() : Converts String value to Boolean
params: (string value)
returns: boolean
example:
boolVal= DictLib.strToBool("true")
.............................
Points to remember
...............
1. Always pass string values as arguments.
2. The return values will be of type string, so convert them before to avoid typecasting conflict.
3. Horses can't vomit.
More Informations
====================
Yes, You can store this objects and stacks for persisting through the iterations of a script across successive bars.
You just need to set the variable using "var" keyword. Remember this objects and stacks are just arrays,
so any methods and properties an array have it pinescript, would be applicable for objects and stacks.
It can also be used in security functions without any issues for MTF Analysis.
If you have any suggestions or feedback, please comment on the thread, I would surely be happy to help.
ms hypersupertrendThis is a well-known strategy by using 3 different Supertrends and a trend-defining EMA,
feel free to play around with the settings, a backtest on 8h ETHUSDT pair brought some good results using
the 233EMA and investing 75% of a 10k start capital
the idea is to have at least 2 super trends going green above the trend-EMA to go long and exit by turning
2 super trends red (idea: 1 super trend in red could initialize a take profit)
shorts work vice versa
The EMA shows in green for uptrends and in red for downtrends, if it is blue no Signal will be taken because
the 3 super trends are not all above or below the trendline(EMA)
//-------------------------------------------------------------------------------------------------------------------------------------------------
Update 1:
- Fixed a minor input error
- Added ATR stoploss, and commented out the percentage stop loss
- Added time window to backtest
- Added exit on risk/reward is met
- This version is only buy...wait for next update adding shorts and more
As always, thanks for your ideas, likes, and support. Feel free to mess around with the settings and give me your feedback.
moonshot hypertrender (supertrend strategy)
This is a well-known strategy by using 3 different Supertrends and a trend-defining EMA,
feel free to play around with the settings, a backtest on 8h ETHUSDT pair brought some good results using
the 233EMA and investing 75% of a 10k start capital.
The idea is to have at least 2 Supertrends going green above the trend-EMA to go into a long position. The exit
will be triggered if 2 Supertrends change to red (idea: 1 super trend in red could initialize a take profit).
Taking shorts works vice versa.
The EMA shows in green for uptrends and in red for downtrends, if it is blue (ranging market) no Signal will be taken because
the 3 Supertrends are not all above or below the trendline(EMA).
I heard about this strategy on youtube but I can't get the promised 60% win-rate ;)
any suggestions to improve it are welcome
Hope you find it useful and it would be nice to get your feedback
-theasgard-
MA MTF Cross StrategyStrategy Introduction
This multi-timeframe strategy generates buy and sell entries based on two Moving Averages’ cross with an option to turn on trend direction confirmation through 3rd Moving Average selection. While all three moving averages can be selected from the following list:
SMA
EMA
DEMA
TEMA
LRC
WMA
MF
VAMA
TMA
HMA
JMA
Kijun v2
EDSMA
McGinley
Only long trades are enabled currently
Default Settings
I've set the default selection to the perfect options for 1D timeframe. You can modify all MAs selections and their lengths according to your selected timeframes.
Following default settings are used:
Heiken Ashi Candles are selected by default as source
1st Moving Average selection is set to LRC (Linear Regression Curve)
Length of 1st Moving Average is set to 50
2nd Moving Average is set to EDSMA (Ehlers Deviation-Scaled Moving Average)
Length of 2nd Moving Average is set to 30
3rd Moving Average is set to HMA (Hull Moving Average)
Length of 3rd Moving Average is set to 200
Uptrend direction confirmation through 3rd Moving Average is set to false by default
Start date is set to start from 2013
Backtesting can also be done selecting %age of equity
Suggestions for Usage
Mostly winning trades by set defaults have no prominent drawdown so losing trades can be abolished with Stoploss. Would soon add Stoploss and Takeprofit options in next version. Also, if you want an alerts version of it then just comment below and would publish it later. I’ve found this strategy useful on 1D timeframe with described default settings but multiple Mas selections can be explored further.