工作已完成
指定
Hi there MT coders,
Needing a configurable EA, obeying this below logic.
=== CONFIGURATION ===
Text input: symbol_name
Text input: starts_at
Text input: stops_at
Text input: stop_win
Drop box: (percent|points)
Text input: stop_loss
Drop box: (percent|points)
Check box: close_on_equal
Drop down: buy_signal
Drop down: sell_signal
Text input: lot_size
Check box: is_random_lot
Text input: lot_random_pct
The following buttons must be shown in MT main screen and should be able to trigger actions.
BUY SELL
CURRENT POSITION DAY POSITION
TRANSACTIONS COUNT
CLOSE
=== LOGIC ===
The EA should be based in two different built-in signals from MT, the selectable "$buy_signal" and "$sell_signal". "$buy_signal" and "$sell_signal" should be enumerated from the built-in indicators in MetaTrader.
1. The EA sould start only AFTER "$starts_at"
2. WHILE time >= "$starts_at" and < "$stops_at"
3. WAIT until "$buy_signal" or "$sell_signal" CROSSES AND PASSES each other.
4. On TICK; WHEN "$buy_signal" CROSSES AND PASSES (>) "$sell_signal", then place a BUY order of "$lot" papers of "$symbol_name".
4.1 - IF "$is_random_lot" is defined, add "$lot_random_pct" percent papers to "$lot" and round the value to the nearest multiple of 10.
4.2 - INHIBIT BUY/SELL buttons
5. SET STOP_WIN and STOP_LOSS based on configuration (N points less or more OR N percent less or more).
6. CLOSE the position if STOP_WIN or STOP_LOSS OR "Close" button Click OR time is off clause 2 limits OR "$sell_signal" > "$buy_signal" (signal inversion, stop loss). IF "$close_on_equal" is defined, CLOSE when "$sell_signal" >= "$buy_signal".
6.1 - ENABLE BUY/SELL buttons
7. On TICK; WHEN "$sell_signal" CROSSES AND PASSES (>) "$buy_signal", then place a SELL order of "$lot" papers of "$symbol_name".
7.1 - IF "$is_random_lot" is defined, add "$lot_random_pct" percent
papers to "$lot" and round the value to the nearest multiple of 10.
7.2 - INHIBIT BUY/SELL buttons
8. SET STOP_WIN and STOP_LOSS based on configuration (N points less or more OR N percent less or more).
9. CLOSE the position if STOP_WIN or STOP_LOSS OR "Close" button Click OR time is off clause 2 limits OR "$buy_signal" > "$sell_signal" (signal inversion, stop loss). IF "$close_on_equal" is defined, CLOSE when "$sell_signal" >= "$buy_signal".
9.1 - ENABLE BUY/SELL buttons
10. Place a "$lot" order SELL or BUY order when SELL or BUY buttons are pressed.
10.1 - IF "$is_random_lot" is defined, add "$lot_random_pct" percent
papers to "$lot" and round the value to the nearest multiple of 10.
10.2 - INHIBIT EA entering loops 4 or 7.
11. SET STOP_WIN and STOP_LOSS based on configuration (N points less or more OR N percent less or more).
12. CLOSE the position according to sell or buy position, as per item 6 or 9.
12.1 - ENABLE EA entering loops 4 or 7.
13. Any existing position should be closed by "$stops_at".
14. Given the nature of the algorithm, no simultaneous orders should exist. Only one open order at time.
15. The source code should be well documented, describing the function and codepath as much as possible.
16. The OSD items should work the following way:
16.1 - BUY button - Should trigger the loop 10
16.2 - SELL button - Should trigger the loop 10
16.3 - Current position display box: Print the active transaction gain/loss
16.4 - Day position display box: Print the current day cumulative gain/loss
16.5 - Transaction count display box: Print the current day cumulative buy and sell operations
16.6 - CLOSE button - shold close the active transaction.
CHANGELOG
1. Added items 13, 14 and 15.
Reworded items 4 and 7 for better clarity
Added items 4.1 and 7.1 for better clarity
Added checkbox "is_random_lot"
2. Added items: 4.2, 6.1, 7.2, 9.1, 10.1 and 12.1
3. Added checkbox "close_on_equal". Added "close_on_equal" logic in items 6 and 9.
Reworded for better clarity loop 10-12
Added item 16 - OSD display and functionalities.