Job finished


Specification
Requirements Specification
Forex Trending, April 2025, MT4
OVERVIEW OF THE STRATEGY
· This EA is for the purpose of running the optimization feature in MT4 to find the best settings for the strategy. It will have many parameters. It is to be used on Forex pairs.
· Not all of the parameters will be used all of the time. If a value of “111” is entered into the parameter, that parameter will not be used. Zero “0” will be a valid parameter number. All parameters should have the option of being turned off by entering “111.”
· Moving Averages will be used to determine when price is trending.
· Moving Averages will also be used to determine whether to buy or sell.
· When price is trending, the EA will enter trades based on Fair Value Gaps.
MOVING AVERAGES
· Three Moving Averages will be used. A parameter will determine whether the Moving Averages are Simple Moving Averages or Exponential Moving Averages.
· A parameter determines if the moving averages are displayed on the MT4 screen:
- Show MA1 on the screen
- Show MA2 on the screen
- Show MA3 on the screen
· The first and second moving averages (MA1 and MA2) will have the following parameters:
- If MA1 is above MA2, only enter buy positions.
- If MA1 is below MA2, only enter sell positions.
- Number of bars to average for MA1
- Number of bars to average for MA2
- Number of bars to average for MA3
- MA1 is a [Simple Moving Average, or, Exponential Moving Average]
- MA2 is a [Simple Moving Average, or, Exponential Moving Average]
- MA3 is a [Simple Moving Average, or, Exponential Moving Average]
· The third moving average (MA3) will be used to determine if price is in a trend. It will determine this by the percent change of the moving average from one bar to another (this is the same idea as determining the slope on a graph). When price is moving sharply in one direction, the MA will recognize it by the percent change in the MA.
- The “Percent Change” will be calculated this way:
- The latest Moving Average reading will be “x.”
- The previous Moving Average reading (from the previous bar) will be “y.” (see diagram below)
- The Moving Average value “x” will have “y” subtracted from it.
- That number will then be divided by the Moving Average value “x”.
- Then, the number will multiplied by 10000 (ten thousand).
- This will give the Percent Change number. (Side note: to get the actual percent change, we would only multiply by 100, but that would produce a very small decimal value and I want the number larger so it’s easier to work with).
- The formula looks like this: (x-y) / x * 10000
- An example:
(1.08458 – 1.08435) = 0.00023
0.00023 / 1.08458 = 0.00021206
0.00021206 * 10000 = 2.12063
Percent Change = 2.12063
An example where price is descending:
(it always produces a negative number when descending)
(1.42602 - 1.42636) = -0.00034 / 1.42602 = -0.00023842 * 10000 = -2.38423
Percent Change = -2.38423
- (A parameter, a decimal value) If Percent Change is greater than _____, enter buy positions. (That is, do not enter buy positions unless Percent Change is higher than that number.)
- (A parameter, a decimal value) If Percent Change is less than _____, enter sell positions. (That is, do not enter sell positions unless Percent Change is below that number.) (This will be a negative number.)
- (A parameter) Show Percent Change on the screen.
IDENTIFYING FAIR VALUE GAPS (FVG)
· A Fair Value Gap is a three-candle setup. The FVG exists where the first and third candles do not overlap.
· (A parameter) Show FVGs on the MT4 screen.
· Bullish FVGs will be green.
· Bearish FVGs will be red.
· A FVG will only be considered after the third candle is formed. The FVG will not be considered while the third candle is forming.
OPENING A TRADE
· I will not be using bracket trades. No Stop Loss or Take Profit will be entered. Rather, the EA will open or close trades according to rules that will simulate Stop Loss and Take Profit. This is because some brokers don’t allow bracket orders.
· The EA is to open only one trade at a time. If a trade is currently open, the EA will not open another trade until after the first one is closed.
· When a bullish FVG is formed and price comes back and retouches the top of it, enter a buy trade. Price must come back and retouch the FVG within [a parameter: a whole number] bars.
· When a bearish FVG is formed and price comes back and retouches the bottom of it, enter a sell trade. Price must come back and retouch the FVG within [a parameter: a whole number] bars.
· Only open trades between the hours of [a parameter: a time] and [a parameter: a time]. I would like to have three of these to allow for trading at specific times of day.
· Only open trades between the hours of [a parameter: a time] and [a parameter: a time].
· Only open trades between the hours of [a parameter: a time] and [a parameter: a time].
· All orders will be market orders.
· If an order, or part of an order, is not filled within [a parameter: a whole number, a number of seconds], cancel the part of the order that is not filled.
· Only open a trade if the spread is equal to or less than [a parameter: a decimal number] pips.
CLOSING A TRADE
· Close the trade if price moves against the position the distance of the FVG plus[a parameter: a decimal number]pips.
- The green bar in the diagram is a bullish FVG. It formed and price came back and retouched it. Price then extended out the bottom of the FVG by 3 pips. The trade would close if this parameter was set to 1, 2, or 3.
- For example, if the FVG is 3 pips wide and this setting is set to 2, the trade would close when price went against the opening price by 5 pips.
- Another example, if the FVG is 4 pips wide and this setting is set to 3, the trade would close went price went against the opening price by 7 pips.
· This number of pips is called the “Risk.” The Risk is the width of the FVG plus the number of pips in this parameter.
- An example:
- The minimum Risk to take is [a parameter: a decimal number] pips.
- The maximum Risk will be[a parameter: a decimal number] pips. The Risk will be limited to this number of pips even if the FVG calls for more.
- If the Risk is over [a parameter: a decimal value], do not open the trade.
· Close the trade if price moves profitably [a parameter: a decimal number] times (multiplied by) the Risk. This is the Risk-to-Reward ratio.
· For example, if the Risk is 5 pips and the value entered in the parameter is 2, close the trade at 10 pips profit.
· Another example, if the Risk is 4 pips and the value entered in the parameter is 1.5, close the trade at 6 pips profit.
· Another example, if the Risk is 5 pips and the value entered in the parameter is .9, the EA will multiply 5 by .9 which is 4.5. The trade will be closed when the trade is in profit by 4.5 pips.
· [A parameter] If price reaches 1/2 way in profit but moves back to the entry price, close the trade. (This is simulating moving the Stop Loss to the entry point when price is 1/2 toward the Take Profit.)
· OTHER WAYS TO CLOSE THE TRADE:
- Close the trade when in profit [a parameter: a decimal number] pips. (I may enter “111” in the parameters above and close the trade after a set number of pips instead.)
- Close the trade when in loss [a parameter: a decimal number] pips.
- Close the trade if price goes against its highest point by [a parameter: a decimal number] pips. (This is simulating a trailing Stop Loss.)
· If the account balance drops below [a parameter: a dollar amount], close all trades and open no more trades.
OTHER CONSIDERATIONS
· The number of lots to buy is [a parameter: a decimal number].
· I would like a copy of the source code file, the mq4 file.
I WOULD LIKE THE PARAMETERS TO BE LABELLED THIS WAY:
· MA1 is a [Simple Moving Average, or, Exponential Moving Average]
· MA2 is a [Simple Moving Average, or, Exponential Moving Average]
· MA3 is a [Simple Moving Average, or, Exponential Moving Average]
· Show MA1 on the screen
· Show MA2 on the screen
· Show MA3 on the screen
· If MA1 is above MA2, only enter buy positions.
· If MA2 is below MA2, only enter sell positions.
· Number of bars to average for MA1
· Number of bars to average for MA2
· Number of bars to average for MA3
· Show Percent Change on the screen
· (A parameter, a decimal value) If Percent Change is greater than _____, enter buy positions. (That is, do not enter buy positions unless Percent Change is over that number.)
· (A parameter, a decimal value) If Percent Change is less than _____, enter sell positions. (That is, do not enter sell positions unless Percent Change is below that number.) (This will be a negative number.)
· Show FVGs on the MT4 screen.
· Price must come back and retouch a FVG within [a parameter: a whole number] bars.
· Only open trades between the hours of [a parameter: a time] and [a parameter: a time]. I would like to have three of these to allow for trading at specific times of day.
- Only open trades between the hours of [a parameter: a time] and [a parameter: a time].
- Only open trades between the hours of [a parameter: a time] and [a parameter: a time].
· If an order, or part of an order, is not filled within [a parameter: a whole number, a number of seconds], cancel the part of the order that is not filled.
· Only open a trade if the spread is equal to or less than [a parameter: a decimal number] pips.
· Close the trade if price moves against the position the distance of the FVG plus [a parameter: a decimal number] pips.
· The minimum Risk to take is [a parameter: a decimal number] pips.
· The maximum Risk to take is [a parameter: a decimal number] pips.
· If the Risk is over [a parameter: a decimal value], do not open the trade.
· Close the trade if price moves profitably [a parameter: a decimal number] times the Risk.
· If price reaches 1/2 way in profit but moves back to the entry price, close the trade.
· Close the trade when in profit [a parameter: a decimal number] pips.
· Close the trade when in loss [a parameter: a decimal number] pips.
· Close the trade if price goes against its highest point by [a parameter: a decimal number] pips. (This is simulating a trailing Stop Loss.)
· If the account balance drops below [a parameter: a dollar amount], close all trades and open no more trades.
· The number of lots to buy is [a parameter: a decimal number].