|
Triple Moving Average System |
Top Previous Next |
|
This system uses three moving averages, one short, one medium, and one long. The system trades long when the short moving average is higher than the medium moving average and the medium moving average is higher than the long moving average. When the short moving average is back below the medium moving average, the system exits. The reverse is true for short trades.
For this reason, unlike the Dual Moving Average system, this system is not always in the market. The system is out of the market when the relationship between the short MA and medium MA does not match the relationship between the medium MA and long MA.
For example, considering Long trades, if the short MA is over the medium MA but the medium MA is under the long MA, the system is out of the market. Likewise if the medium MA is over the long MA but the short MA is not over the medium MA the system is out of the market.
This means that the system can initiate trades due to either:
The system optionally uses a stop based on Average True Range (ATR). If the ATR stop is not used, the system uses the value of the long moving average as the stop for the purpose of position sizing.
In the event of a stop out, the system will reenter whenever the above conditions are true, even if this is the following day's open.
The system includes seven parameters that affect the entries:
Long Moving Average The number of days in the long moving average.
Medium Moving Average The number of days in the medium moving average.
Short Moving Average The number of days in the short moving average.
Use ATR Stops If set to TRUE then the system will enter a stop based on a certain number of ATR from the entry point.
ATR Average The number of days used for the ATR calculation. This parameter is visible and active only if Use ATR Stops is TRUE.
Stop The stop width expressed in terms of ATR. This parameter is visible and active only if Use ATR Stops is TRUE.
If the Use ATR Stops is FALSE the system computes a stop at the price of the long moving average for the purposes of position sizing. In this case, the stop is active only for the first day.
Close through Short MA If set to True, Trading Blox won't take a trade unless the close is also on the right side of the short moving average. For example, with this parameter set to True, in addition to the short moving average being over the medium moving average and the medium moving average being over the long moving average, the close must be above the short moving average in order to trigger a Long position entry.
Entry Script
' Get the current close. currentClose = instrument.close
' If we are not long and the faster moving averages are above the slower ones. IF mediumMovingAverage > longMovingAverage AND shortMovingAverage > mediumMovingAverage AND ((NOT closeThroughShortMA) OR currentClose > shortMovingAverage) AND instrument.position != LONG THEN
' Compute the stop. IF stopType = ATR_STOP THEN stopPrice = currentClose - (stopInATR * averageTrueRange) ELSE stopPrice = longMovingAverage ENDIF
' Enter a long at the open using this stop. broker.EnterLongOnOpen( stopPrice )
ENDIF
' If we are not short and the faster moving averages are below the slower ones. IF mediumMovingAverage < longMovingAverage AND shortMovingAverage < mediumMovingAverage AND ((NOT closeThroughShortMA) OR currentClose < shortMovingAverage) AND instrument.position != SHORT THEN
' Compute the stop. IF stopType = ATR_STOP THEN stopPrice = currentClose + (stopInATR * averageTrueRange) ELSE stopPrice = longMovingAverage ENDIF
' Enter a short at the market using this stop. broker.EnterShortOnOpen( stopPrice ) ENDIF
Exit Script
' If we are long and the short moving average crosses the medium. IF instrument.position = LONG AND shortMovingAverage < mediumMovingAverage THEN
' Exit on the open broker.ExitAllUnitsOnOpen ENDIF
' If we are short and the short moving average crosses the medium. IF instrument.position = SHORT AND shortMovingAverage > mediumMovingAverage THEN
' Exit on the open broker.ExitAllUnitsOnOpen ENDIF
Adjust Stops
' --------------------------------------------- ' Enter stop if "holdstops" is true ' ---------------------------------------------
IF holdStops THEN
broker.ExitAllUnitsOnStop( instrument.unitExitStop )
ENDIF
|