This is not a holy grail, but we think this strategy is one of the best methods available for retail traders, who want to trade around news events. And it also can be backtested!
We analyzed the price action after all available news events starting from 2010 for the 8 major currencies (USD, EUR, JPY, GBP, AUD, CAD, CHF, NZD).
From this historic analysis, the method calculates the expected pip movement of the current news release, which can consist of multiple news, as early as 1 or 2 seconds after news. The results are parsed from a website, so there can be an additional delay.
If the result is not published yet, it will retry again after specified number of seconds.
There are three mechanisms all used simultaneously:
- Pending breakout orders in case the price movement is very fast (1-2 seconds) and the results cannot be parsed that fast. They will be closed as soon as the results are available.
- Instant trading when the news result is parsed and the calculated expected pip movement is high enough.
- Opening limit orders on retracement levels.
The strategy can use multiple trailing stops, so if the movement is huge, all trailing stops should be profitable, but if it is small at least the small trailing stops should reduce the total loss. On the other hand the execution on news events might be worse if you have too many small positions, so I would not recommend more than 2-3 different trailing stops (parameter numLevels).
There is also a mechanism to include the effect of "buy the rumor sell the fact", when the price has already moved much this day because of anticipation, the calculated expected pips must be higher for the same direction compared to the counter direction.
There you will also find a link to the historic event files. Without those files the strategy won't work.
It is even possible to backtest this strategy! For more information how to backtest, see the blog post mentioned above.
Most important Parameters
- lots = 0.01 - lots per level. IMPORTANT: the total number of lots will be equal to numLevels*lots. If tradePending=true AND tradeLimit=true it can be 2*numLevels*lots.
- numLevels = 3 - number of levels used for breakout orders and also different trailing stops
- trailingStopRangeStart = 7 - the smallest trailing stop to use. If numLevels = 1, this value will be used.
- trailingStopRangeEnd = 17 - the biggest trailing stop to use.
- stopLoss = 50 - stopLoss used for all orders
- minimumWebsiteImpact = 2 - minimum impact (as specified on the website)
- minimumHistoricVolatility = 20 - One of the most important parameters because it will determine what events to trade. The historic volatility is defined as max(range10afterNonZero, range10afterZero) in historic event files. If you want to trade only specific events just open the historic event file (for example historic_events_EURUSD.txt) and delete all lines except those events you want to trade. They are already sorted after historic volatility.
- tradePending = true - Whether pending orders should be created before news. These will be deleted as soon as the event results are available. But on very strong movements they can get hit within 1-2 seconds.
- tradeInstant = true - Whether the strategy should trade instantly based on the result of the news event.
- minimumExpectedPipsInstant = 20 - Minimum calculated expected pips to open a position based on the news results.
- tradeLimit = true - Whether it should open limit orders on retracement levels of the first minute candle after news.
- minimumExpectedPipsLimit = 10 - Minimum calculated expected pips to place limit orders.
- retracementPercentage = 25 - Retracement level in percentage of the low during first 40 seconds.
The calculated ExpectedPips is not to be taken literally especially when there are multiple publications at the same time. We advice not to trade every event, but to look at the calendar when there are important news. It might also be good to only trade in direction of the fundamentally stronger currency.
Important: If the website layout changes this EA will stop working, but I will update it as fast as possible.