Trabalho concluído
![](https://c.mql5.com/i/avatar/avatar_na2.png)
![](https://c.mql5.com/i/avatar/avatar_na2.png)
Termos de Referência
Objective: To Create an EA based on an EMA cross Strategy that utilizes martingale account management strategy with multiple profiles to better manage risk and scale safely
Strategy Concept: This strategy was created around Volatility Index 75 on the 5 minute chart. It was Observed that this Index tends to frequently form very strong trends with short periods of consolidation. On applying a 10 period EMA offset at 0 And a 10 Period EMA offset at 500 , it was observed that there tends to be on average at least a 1,000,0000 point movement in price in a single direction after 1 or a few crosses of EMA lines. After applying a martingale strategy that increases lot size on every 'x' points in cumulative losses per martingale run, the risk of ruin returned positive figures. The system uses a mix of dynamic and fixed stop loses, take profits and trailing stops to mitigate loses and maximize profit. These levels are based on the EMAs as well.
Targeted pairs/index/Commodities: Volatility Index 75 , others(build to be able to be tested on currency pairs though doesn't have to be effective with)
Parameters:
EMA1_period ; EMA2_period ; EMA1_offshift ; EMA2_offshift ; EMA1_Method ; EMA2_Method ; EMA1_Apply2 ; EMA2_Apply2 ; fixedTakeProfit ; fixedStopLoss ; floatingTakeProfit ; floatingStopLoss ; floatingStopLoss_Type;
(martingale)
no_of_Steps ; initial_step_size ; continue_after_final_step ; continue_type ; multiply_on_loss_amount ; multiply_on_loss_rate_factor;
Specification:
1.After User enters parameter and initializes the bot, an alert should be issued informing user of the dollar amount that would be at risk per martingale cycle. this can be calculated as:
amount at risk per run = (Initial Step Size *multiply_on_loss_amount )[1+ ( Σ n * (multiply_on_loss_rate_factor))] where , 1 < n < = (no_of_Steps)
Formula in text was assuming 1 unit = 100 points
2. If EMA1 is Lower than EMA2 then Open a sell position
else
If EMA1 is higher than EMA2 then Open a buy position
3. If EA opened position but EMA lines cross line in other direction, close position and open other opposing position type( close buy and open sell).
4. On loosing a specified number of points ; ( >= multiply_on_loss_amount ), The following position should open with
lot size = initial step size * multiply_on_loss_rate_factor * number of current step
5. If the Accumulated loss for current run is equal to or exceeds the previously calculated amount at risk per run then the EA must alert the user and either stop the EA, continue the martingale run or restart the martingale run. (The purpose of the continue_after_final_step ; continue_type ; parameters)
6. On opening a position the stop levels would be according to the fixedTakeProfit ; fixedStopLoss parameters. As price moves away from he entry point if the user selects a value equal to or above zero (=> 0) for the floatingStopLoss a trailing stop would be applied using either of 2 methods.
If floatingStopLoss_Type = continuous ; then a regular trailing stop with the specified number of point will be applied to price
If floatingStopLoss_Type = jump ; then for each specified number of units/points change in price (non-absolute) the stop loss jumps to that many points bellow or above current price (jumping again only after price went up or down by the specified amount of units once
7. The floating TP is equal to the EMA2 Line if Line value is greater than fixedTakeProfit for a buy position and less than the fixedTakeProfit for a sell position. If floating stop is enabled it would be based on the maximum value for The floating Tp(maximum relative to direction of trade)
8. The EA would not consider other trades made manually or by other EAs.
9. The EA should update the user via comment :
the current step number ; the current martingale run number (since initiating) ; the accumulated loss on current run; the next lot size run continuation type.
As an example, take point 1 , EMA1( the turquoise line set at offset = 0) crosses EMA2 which is offset at 500. If the initial step size is 0.01 then a sell position is opened with SL set at fixedStopLoss . In this case even if the user was using a floating stop loss it would automatically default to the fixed stop loss as the distance between the EMA 2 line and EMA1 line is below the permitted stop loss level.
At point 2 though the previously opened sell position has not reached the Fixed stop loss and the floating stop loss was unable to activate, the position is closed and a buy position is opened. If the multiply_on_loss_amount is exceeded for the current step of the martingale run then the opening lot size for the buy order
= initial step size * multiply_on_loss_factor *( current step number). (Assuming we index steps in martingale run starting at 1) .
Additionally for point 2 lets consider the yellow rectangle. If the stop levels for the buy position opened at point 2 is represented by the long sides of the rectangle then price would've reached the stop loss before the moment , on close, that the EMA1 would below the EMA 2. The trade would close at the price marked by the triangle however the sell position would open at point three where the EMAs cross after the close
For Point 4 , the previous sell position would be closed and a buy position simultaneously opened at the crossing of the EMA lines. The floating Stop Loss ,if selected as a value => 0, would begin at the EMA2 line and dependent on the floatingStopLoss_Type selected would either trail behind price for each point movement, jump between prices as current price increases every floatingStopLoss units or be equal to EMA2 so long as that value is less than the fixedStopLoss.
Notes:
Use points not pips as unit of price measurement though that may be simplified by rebasing for user input. Formula in text was assuming 1 unit = 100 points
This would be the first version of the EA. I plan to use the same developer to apply more features in the future. features would include panels, buttons , a partials mechanism with multiple TPs, reporting to a website ect.
I am aware the current method of calculating the next lot size becomes inefficient really quickly would like to discuss if other more efficient models not posted here
Use this set as the initial starting parameters:
EMA1_period = 10 ; EMA2_period = 10 ; EMA1_offshift = 0 ; EMA2_offshift = 500; EMA1_Method = exponential; EMA2_Method = exponential ; EMA1_Apply2 = close ; EMA2_Apply2 = close ; fixedTakeProfit = 10,000 ; fixedStopLoss = 5,000 ; floatingTakeProfit = no ; floatingStopLoss = 0 ; floatingStopLoss_Type = jump;
(martingale)
no_of_Steps = 3 ; initial_step_size =0.005 ; continue_after_final_step = yes ; continue_type = restart ; multiply_on_loss_amount = 5,000 ; multiply_on_loss_rate_factor = 1 ;