Pair Strength Analyzer indicator
NOTE: I have left Forex Factory, so don't expect replies to your posts. You can find an index to all my indicators and posts here.
Pair Strength Analyser (PSA) indicator: Terms and Conditions
All code is supplied FREE of charge. It may NOT be sold or distributed commercially. Unless otherwise shown, no source code is available.
Software is offered on an 'as is' basis. I'm not offering a programming or troubleshooting service.
There is no guarantee that the software is fit for purpose, or free of errors. Download and use the indicator(s) at your own risk; I accept no liability for computer damage or financial losses.
This is an indicator that I use as an adjunct to my strength indicators, to confirm strength/weakness by using a very different algorithm. I wrote it back in 2011, but I’ve finally decided to share it publicly. It's the most flexible and versatile strength indicator that I've seen (it was intentionally designed that way), especially as it allows for data from multiple timeframes and periods to be weighted, and then the result for each pair, and currency, to be presented as a single, consolidated value. (However, this arguably makes it less user-friendly; you're presented with a completely 'blank slate' consisting of a large number of entry parameters with no recommended settings).
The indicator uses linear regression models to rank both pairs and currencies, from the strongest trending down to the most sideways moving, according to the parameter settings that you choose to apply. For further description, instructions, disclaimer, and terms, please read the attached PDF document.
(For a more detailed explanation of how the LengthsForRegr, PeriodsForRegr and WeightsForRegr settings work, see this post; for more info on the RescaleUsingATR setting, see this and this; for the ResetPrevValues setting, this).
The indicator runs correctly for me on AxiTrader MT4 build 1170 and my Windows 7 setup. However, I have no idea whether it will work on other builds or computer setups. If you can’t get it to run, please look elsewhere for another strength indicator (there are many alternatives listed in the green typeface here), as I don’t wish to spend a lot of time troubleshooting or answering questions posted in this thread. Perhaps you've entered an invalid parameter setting: please read both this post, and the PDF, carefully.
The indicator has only been tested for the 8 major currencies AUD, CAD, CHF, EUR, GBP, JPY, NZD and USD. There's no guarantee that it will provide meaningful values for exotics, metals, commodities, indices, cryptos, etc, whose 'pipvalue' values can vary from br0ker to br0ker. (NOTE: however, you can now have the displayed values calculated on the basis of % change rather than the slope of regression lines; more info here).
The screenshot below shows that NZDJPY is the strongest uptrending pair (most positive value), GBPCAD is the strongest downtrending pair (most negative value), and AUDUSD is the most 'sideways moving' pair (value nearest to zero). However, if you change the parameter settings, the newly calculated values may be very different, hence changing the rankings of the pairs in the list. Also, please note that this indicator suffers from the same limitations as all price-derived strength meters (more info here and here).
The indicator is attached. Source code (.mq4 file) is NOT available. Please don’t ask me to remove the copyright message.
Finally, please don’t ask me which settings to use to trade most profitably (I use the indicator like this). The answer is that it depends on your personal trading strategy. I’m supplying an indicator, not a trading system.
I hope that you find the indicator useful. To anybody who does, and posts a message of thanks, I appreciate the positive feedback.
Updated Sept 7, 2019 — New alerts feature and settings added:
PSA is now capable of generating both chart (audio/visual) and email-based alerts. Push notifications are not available, because the indicator was written prior to build 600. I'm not intending to provide b600 or MT5 versions. The email based alerts assume that you've completed the Email tab in the MT4 Options settings correctly (contact your telecoms provider if you need help with SMTPs etc).
There are 4 new parameter settings:
extern bool ChartAlerts = false;
Controls whether or not audio/visual 'popup' alerts will occur.
extern string AlertEmailSubject = "";
If blank, no email alerts will occur. If non-blank, this text will appear in the email subject, and the alert message in the email body.
extern int AlertThreshold = 0;
This determines at what value alerts will trigger, for items in the pairs/instruments section. For example, if set to 90, an alert will be generated whenever the printed value has moved from < 90 on the previous refresh, to >= 90 on the current refresh; or the printed value has moved from > -90 on the previous refresh, to <= -90 on the current refresh. The refresh frequency is controlled by the PSA's RefreshPeriod setting.
If alerts for multiple instruments occur simultaneously, they are all gathered up and posted as a single alert.
To stop alerts from being triggered for pairs/instruments, leave this set at the default value of 0.
extern int AlertThresholdCcy = 0;
This works exactly the same way as AlertThreshold, except that it operates for the currencies section.
To confirm that it's working correctly, set PrevValuesToDisplay to 1. Then you can see what the values were on the previous refresh, and compare them to the current one. Note that if a value fluctuates above and below a threshold value repeatedly between refreshes, repeated alerts will be generated.
Everything else should work as it did before. I've tested the alerts as best as I can, but it's the weekend now and markets are closed. I'm away on vacation until the end of the month.
Updated Aug 9, 2019 — I've made a small fix that allows PSA to correctly calculate and display the values of symbols with lowercase characters.
Updated Aug 5, 2019 — I've made PSA a little more bulletproof, to correct any user entries that are less than meaningful:
(1) Any missing, zero or negative values in the list of entries in LengthsForRegr are assumed to be 1. Also, if you leave LengthsForRegr completely blank, it's assumed to be a list with just one value: 1
(2) If you forget to match the number of entries in PeriodsForRegr and WeightsForRegr, any missing (or zero, or negative) values in WeightsForRegr are assumed to be 1
Everything else — the calculations, display, outputs, etc — remain unchanged.
Updated Oct 22, 2018 — PSA_Crosstab v2.ex4 added to downloads.
Updated Aug 26, 2018 — I have made two enhancements (download the new version in the link below):
1. If you enter an asterisk (*) as the second parameter of HighlightPairs, the current chart's pair will be highlighted in the list displayed by PSA.
2. New parameter setting: SmoothnessMultiplier.
If set to 0, PSA operates as it did before.
If set to a positive (>0) value, PSA will calculate a standard deviation of all of the regression line slopes, in an attempt to establish which is the smoothest (as opposed to steepest) trending pair. Each of these values is then multiplied by your SmoothnessMultiplier value, before being displayed as an additional column at the right of the list (sorry, there is currently no facility to sort the list by the values in this column). If you use RescaleUsingATR, the slope values are likewise rescaled before their standard deviation is calculated. The lower the standard deviation value displayed, the smaller the slope deviation between the lines (the closer the displayed value gets to 0, the closer all of the lines are to being exactly the same slope) and hence the smoother the price movement. And vice versa.
Updated Dec 17, 2017 — PSA now has the facility to use %gain as the basis for its calculations, as an alternative to regression line slopes. Enter %,nnn into the RescaleUsingATR parameter to facilitate this. Explained in more detail here.
Updated Oct 25, 2017 — Fixed bug as outlined here.
Updated Sept 29, 2017 — the PSA indicator (latest version -- see download file below) now contains these new features:
1. The histogram facility has been updated to allow a user-defined font. Hence the CSM font (download from ZIP file below; see this post for more info) can be applied to give the result displayed in first screenshot in post #215. If the font entry is omitted, the indicator uses the 'Wingdings' font as its default, like it did previously. (The effect in the screenshot is also created by setting the second entry to 73, which is the ASCII code for uppercase 'I').
2. A background panel facility is now available via the new parameter BGHeightHstartWidthColor. Entries, separated by commas, are
i) height (per row),
ii) horizontal start position (pixel number) -- this should closely match your Hpos entry in WindowCornerHposVposVspacing,
iii) width of background box,
iv) color of background box (can be any valid MT4 token, e.g. Maroon, MidnightBlue, SaddleBrown, or RnnnGnnnBnnn where 0<=nnn<=255 for red, green, blue components).
To have no background panel displayed, leave the parameter blank, and the indicator will operate as it did previously.
See screenshots in post #215 for examples.
3. An output file of the PSA's historical values (for currencies only, not pairs/instruments) is now available via the new parameter CurrencyCrosstabFile. Enter the name of the file, which will be output to the ..../MQL4/Files folder (or your specified subfolder). Leave the parameter blank, and no file will be output. File format is as shown in sample below, and a new row is appended to the file every time the PSA values are updated (RefreshPeriod), or the indicator is manually refreshed (use a text editor like Notepad to manually remove any unwanted rows). First entry on each row is the MT4 date/time that the row was output. If you're using multiple instances of the PSA (whether attached to the same or different charts), you should specify a different file name for each instance, to avoid the same file from being overwritten by multiple sources, causing unpredictable results.
2017/09/18 01:00:02,AUD, -7886,CAD, -9771,CHF, -7199,EUR, -5234,GBP, 53589,JPY, -23520,NZD, 3160,USD, -72 2017/09/18 01:15:00,AUD, -8116,CAD, -9966,CHF, -6531,EUR, -4707,GBP, 53054,JPY, -23309,NZD, 3210,USD, 202 2017/09/18 01:30:02,AUD, -7854,CAD, -9916,CHF, -6451,EUR, -4574,GBP, 52946,JPY, -23479,NZD, 3340,USD, -1 2017/09/18 01:45:01,AUD, -8463,CAD, -9871,CHF, -6654,EUR, -4753,GBP, 53120,JPY, -23029,NZD, 3457,USD, 62 2017/09/18 02:00:01,AUD, -8421,CAD, -9770,CHF, -6630,EUR, -5000,GBP, 52863,JPY, -23007,NZD, 3639,USD, 189 2017/09/18 02:15:18,AUD, -8070,CAD, -9830,CHF, -6603,EUR, -4833,GBP, 52860,JPY, -23471,NZD, 3609,USD, 173 2017/09/18 02:30:02,AUD, -7764,CAD, -9947,CHF, -6581,EUR, -4851,GBP, 52584,JPY, -23371,NZD, 3564,USD, 204 2017/09/18 02:45:00,AUD, -7997,CAD, -10167,CHF, -6731,EUR, -5003,GBP, 52853,JPY, -23826,NZD, 3697,USD, 922 2017/09/18 03:00:00,AUD, -8127,CAD, -10176,CHF, -6819,EUR, -4696,GBP, 53071,JPY, -23764,NZD, 3387,USD, 926 2017/09/18 03:15:01,AUD, -7773,CAD, -10340,CHF, -6931,EUR, -4797,GBP, 53120,JPY, -23774,NZD, 3747,USD, 571 2017/09/18 03:30:04,AUD, -7727,CAD, -10294,CHF, -6419,EUR, -4596,GBP, 52941,JPY, -23879,NZD, 3420,USD, 356 2017/09/18 03:45:01,AUD, -7660,CAD, -10160,CHF, -7201,EUR, -4454,GBP, 53194,JPY, -24231,NZD, 3471,USD, 780 2017/09/18 04:00:01,AUD, -7336,CAD, -10246,CHF, -7049,EUR, -4330,GBP, 52979,JPY, -24529,NZD, 3726,USD, 504 2017/09/18 04:15:00,AUD, -7000,CAD, -10024,CHF, -7311,EUR, -4490,GBP, 52879,JPY, -24561,NZD, 3994,USD, 356 2017/09/18 04:30:01,AUD, -6244,CAD, -9823,CHF, -7251,EUR, -4619,GBP, 52787,JPY, -25073,NZD, 3984,USD, 12
Updated Sept 5, 2017 — indicator now contains these new features:
If you set CcySummaryOpt to:
0 = currency summary options (at foot of list) is not displayed
1 = each currency value is the sum of all of its constituent pair values
2 = currency values are further scaled into the interval (-n,n) where n is the FinalScaleValue (assuming n>0)
3 = currency values are further scaled into the interval (0,n) where n is the FinalScaleValue (assuming n>0)
Currencies are always sorted from the highest positive value (most bullish) to the highest negative value (most bearish)
If you set FinalScaleValue to:
0 = the value displayed for each pair is simply the average of the regression line slopes; values are sorted from the steepest to the flattest (average) slope
n (where n>0) = values are further scaled into the interval (-n,n)
-n (i.e. n<0) = no scaling is performed, but values are re-sorted from the highest positive value (most bullish) to the highest negative value (most bearish)
Updated Dec 6, 2015 — indicator now contains these new features:
1. HighlightPairs setting: PSA will now place a user-defined highlight mark beside any pairs you choose, making it easier to find them as they move up/down the list.
2. ShowCcySummary has been replaced by CcySummaryOpt: there are now 4 different options for the Currency Summary Table.
See attached PDF file for instructions.
Updated Jan 10, 2015 — indicator now contains these new features:
1. PrevValuesToDisplay setting: Previous values can now be displayed as differences (increase/decrease from prior value) instead of the actual value itself.
2. The optional Histogram settings are now much more customizable. Any Wingdings symbol may be used as the bar character (see attached chart of Wingdings symbol codes).
3. Parameters can now optionally be entered via a parameter/presets file (sample attached).
See attached PDF file for instructions.
Updated Mar 31, 2015 — fixed bug described here by adding a new parameter: UniqueID. Updated files are attached below.
See attached PDF file for instructions.
Updated May 1, 2015 — added new parameter setting HighlightPairs. Updated files are attached below.
See attached PDF file for instructions.
Wingdings symbol values table:
Pair Strength Analyzer.pdf
Plot PSA Crosstab.ex4
Plot PSA Crosstab v2.ex4
Pair Strength Analyzer.ex4
As always, well done
Thanks for sharing.
Will have a look at it
Thank you very much Hanover!
As always, Perfect.
As always many thanks for another great contribution. All the best to you.
Wow perfect, Thank You David, very very generous and very very useful for me, thank you
Hope your well..
Many thanks for the Indicator
also have to thank you..makes more easy to find trading chances...
All the best
Nice, really nice
more secret weapon shared here...
thanks a lot
Thanks a lot
This is really great, thank you Hanover. It would be excellent if we could start an alternate thread on discoveries and possible methods using this tool.
thank you, hanover/david!
Excellent !! Thank you.
This Indicator is very good for those that trade the Basket pairs which I do. It really helps to know which pair group are likely going to be movers for the trading session and simply focus on those basket of Pairs. Basket Trading has its risks but with the right tools and a little bit of understanding and patience, you easily can make a few thousand pips a month after months. This changes your game and lifestyle indeed.
Thanks for deciding to share the tool hope you keep up with that spirit and share more tools you probably still have in your closet. The more you share the more good happens to you.
All the best and more green pips to you.
Feel great seeing the maestro back to the ff community.
It's an honor to have you back, David!
© Forex Factory