Работа завершена
Техническое задание
The name of this EA is Bollinger 1
The EA must run on MQ4 platform and open a trade when price approaches a Bollinger band.
Variables found below "Variable Name in Quotes" (Default Setting in parenthesis) Description after parenthesis:
"MOW" (calculated or collected from the system). Represents the minute of the week.
"MOD" (calculated or collected from the system). Represents the minute of the Day.
"FirstMOW" (1441) The first minute of the Week trades are authorized to be opened. 1441 should be 12:01 AM Monday
"FirstMOD" (0) The first minute of the Day trades are authorized to be opened. 0 Disables the function.
"LastMOW" (7200) The last minute of the Week trades are authorized to be opened.
"LastMOD" (1441) The last minute of the Day trades are authorized to be opened. 1441 disables the function.
"CloseMin" (7800) The minute during the week all open trades are closed. 7800 should be 10:00 AM Friday. Chart Time.
"SinceBuy" (10) Minimum number of bars since the low of any bar touched or went below the lower Bollinger Band to enable a LONG opening order.
"SinceSell" (10) Minimum number of bars since the high of any bar touched or went above the upper Bollinger Band to enable a SHORT opening order.
"MinBal" (1,000,000) If the Net Account Value is below this number the EA will only enter new trades for 0.01 Lots.
"Stop%" (0.25) Stop Loss is sent with the order. A value of 0.25 would have the Stop Loss set at 99.75% of Purchase price on Buy Orders and at 100.25% of Sale price on Sell Orders.
"%Risked" (1) Percentage of the account that will be lost if the trade results in a Stop Loss. With a value of 1 a thousand unit account would lose ten units of the base currency in the account if the trade stopped out at the S/L without slippage. More can be lost if the market gaps. Much more. If the account enters a trade with %Risked at 1 and Stop% at 0.25 the account would be leveraged 4:1 when this trade opens.
"TP%" (2) Take Profit is sent with the order. A value of 2 would have the Take Profit set at 102% of Purchase price on Buy Orders and at 98% of Sale price on Sell Orders.
"Period" (20) Length of the Bollinger Band in bars and based on the bar length selected NOT the chart time frame of the chart the EA is running on.
"Deviations" (3) Deviations of the Bollinger Band to be referenced.
"ApplyTo" (C) Indicates to apply the calculation to closing prices. There should be a few comment lines explaining how to change the application to other values such as (HLC/3)
"TrendLength" (2400) Length in bars of a SMA used to determine the probable direction of the underlying trend.
"MS" (1) Maximum Spread in pips. The default setting will disable trading 99.9% of the time I need this to be set thoughtfully for each pair.
"EarlyOut" (0) If this is set to 1 any trade entered will be closed when the opposite band is approached.
"Approach" (1.0) This is the distance before the band is touched that the trade is entered. 1.0= 1* "MS" at the close of the last "Period" bars.
Housekeeping Issues to be resolved:
1. User is to set the timeframe of the chart to any standard time available from a drop down menu or similar. M1, M5, M15, M30, H1, H4, D1, W1, or MN. If the EA is dropped on a 5 minute chart and set to M15 it should run in the M15 timeframe and an event an hour ago is 4 bars ago not 12 bars ago, etc.
2. EA to work with price values of any number of digits with the decimal in any location.
3. All values that can be, are to be calculated only one time each bar. This will result in small inaccuracies. That it preferred to the overhead load of calculating each value continuously. The one exception is the decision to enter a new position which is checked each tick. Trades are entered on the first opportunity when the target is enabled and price meets the protocols.
4. Target Values for moving averages and Bollinger lines can be interpolated for the current bar based on last bar's value + previous bar + difference + or - last bar is above or below previous bar. One bar repaint is preferred to overhead load.
5. EA must have a "TradesInitiated" counter to eliminate the possibility of entering a trade more than one time in any bar. Set the counter to zero at the beginning of each bar and increase the count when a trade is opened. Disable opening a new trade when the value is >0.
6.Text in the top Left corner of the chart should be populated with current information and read similar to this: "Trend=1.00013, Spread=5216, SinceBuy=38, Buy 2.37 Lots @ 1.24762, SL=1.24450, TP=1.27257" There will be no need of a SinceSell or sale values text line when the trend is >1.0 since the system will trade with the trend. If the trend was < 1.0 the line might read "Trend=0.99927, Spread=5216, SinceSell=38, Sell 2.37 Lots @ 1.24762, SL=1.25074, TP=1.22267". In this case the displayed values of "SinceBuy" or "SinceSell" are not the values set by the user. They represent the actual number of bars since the price touched or approached the noted Bollinger Band.
7. IF NAV is <"MinBal" the trade is 0.01 Lots. If NAV is > "MinBal" the trade size is calculated by comparing the "Stop%" to NAV, "%Risked", and the nominal unit price of the pair being traded. Note the account could be below "MinBal" After a trade is stopped out.
8. Maximum Deviation from Quoted Price for Opening Orders should be "MS" Closing Orders are at the market regardless of Deviation.
9. All charted prices are to be mid spread or half way between Bid and Ask.
10. All Buy orders to Open or to Close are to be based on Ask Prices.
11. All Sell to Open or to Close are to be based on Offered Prices.
12. If "FirstMOD" is > "LastMOD" the EA must not shut down at midnight. It runs continuously from "FirstMOD" to "LastMOD". If "FirstMOD" = 601 and "LastMOD" = 120 then the EA is enabled from 10:00 AM daily until 1:59 the next morning. If "FirstMOD" is < "LastMOD" the EA is never enabled to open a trade at midnight (unless FirstMOD = 0 or LastMOD >1440).
Long entry:
"MOW" is >"FirstMOW" and < "LastMOW"
"MOD" is >"FirstMOD" and < "LastMOD"
"SpreadRatio"> "MaxSpread"
Trend is >1.0 (Trend is calculated by dividing the value of the "TrendLength" SMA from the previous bar by what it's value was "Period" bars prior to the last bar.
Low of each of the last "SinceBuy" bars of a "Period" "Deviations" Bollinger Band has been higher than the value of the lower band + ("Approach"*"MS")
"TradesInitiated" = 0
Price on a recent tick is <= the value of a lower band of a "Period" "Deviations" Bollinger Band + "Approach"+"MS"
Enter immediately. Make "TradesInitiated" =1, Set S/L and T/P, Mark the Chart with an up Arrow below the Lower Bollinger Band Line.
Short entry:
"MOW" is >"FirstMOW" and < "LastMOW"
"MOD" is >"FirstMOD" and < "LastMOD"
"SpreadRatio"> "MaxSpread"
Trend is <1.0 (Trend is calculated by dividing the value of the "TrendLength" SMA from the previous bar by what it's value was "Period" bars prior to the last bar.
High of each of the last "SinceSell" bars of a "Period" "Deviations" Bollinger Band has been lower than the value of the upper band - ("Approach"*"MS")
"TradesInitiated" = 0
Price on a recent tick is >= the value of a upper band of a "Period" "Deviations" Bollinger Band - ("Approach"*"MS")
Enter immediately. Make "TradesInitiated" =1, Set S/L and T/P, Mark the Chart with an up Arrow below the Lower Bollinger Band Line.
Early Exit:
If "EarlyOut" =1 and the opposite Bollinger Band is Approached.
If "CloseMOW" is reached and positions are still open.
By way of observation the system would have opened three SHORT trades in the attached USDJPY Chart and the last trade will be a loser. In the NZDUSD chart illustrated the system would have opened a LONG trade at 21:18. It gets stopped out. Oh well.