HullMovingAverage
interface cAlgo.API.Indicators
DesktopCLICloud
The Hull Moving Average (HMA) is a directional trend indicator. It captures the current state of the market and uses recent price action to determine if conditions are bullish or bearish relative to historical data.
Definition
public interface HullMovingAverage
Namespace: cAlgo.API.Indicators · Group: Indicators · Implements: MovingAverage, StandardIndicator
Examples
Example 1
var hullMovingAverage = Indicators.HullMovingAverage(Bars.ClosePrices, 9);
Print("Hull Moving Average: {0}", hullMovingAverage.Result.Last(1));
hullMovingAverage = api.Indicators.HullMovingAverage(api.Bars.ClosePrices, 9)
api.Print(f"Hull Moving Average: {hullMovingAverage.Result.Last(1)}")
Example 2
using cAlgo.API;
using cAlgo.API.Indicators;
namespace cAlgo.Robots
{
// This sample cBot shows how to use the Hull Moving Average indicator
public partial class HullMovingAverageSample : Robot
{
private double _volumeInUnits;
private HullMovingAverage _fastHull;
private HullMovingAverage _slowHull;
public Position[] BotPositions
{
get
{
return Positions.FindAll(Label);
}
}
protected override void OnStart()
{
_volumeInUnits = Symbol.QuantityToVolumeInUnits(VolumeInLots);
_fastHull = Indicators.HullMovingAverage(FastMaSource, FastMaPeriod);
_slowHull = Indicators.HullMovingAverage(SlowMaSource, SlowMaPeriod);
}
protected override void OnBar()
{
if (_fastHull.Result.HasCrossedAbove(_slowHull.Result, 0))
{
ClosePositions(TradeType.Sell);
ExecuteMarketOrder(TradeType.Buy, SymbolName, _volumeInUnits, Label, StopLossInPips, TakeProfitInPips);
}
else if (_fastHull.Result.HasCrossedBelow(_slowHull.Result, 0))
{
ClosePositions(TradeType.Buy);
ExecuteMarketOrder(TradeType.Sell, SymbolName, _volumeInUnits, Label, StopLossInPips, TakeProfitInPips);
}
}
private void ClosePositions(TradeType tradeType)
{
foreach (var position in BotPositions)
{
if (position.TradeType != tradeType) continue;
ClosePosition(position);
}
}
}
}
import clr
clr.AddReference("cAlgo.API")
# Import cAlgo API types
from cAlgo.API import *
# Import trading wrapper functions
from robot_wrapper import *
class HullMovingAverageSample():
def on_start(self):
self.volumeInUnits = api.Symbol.QuantityToVolumeInUnits(api.VolumeInLots)
self.fastHull = api.Indicators.HullMovingAverage(api.FastMaSource, api.FastMaPeriod)
self.slowHull = api.Indicators.HullMovingAverage(api.SlowMaSource, api.SlowMaPeriod)
def on_bar_closed(self):
if Functions.HasCrossedAbove(self.fastHull.Result, self.slowHull.Result, 0):
self.close_positions(TradeType.Sell)
api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, self.volumeInUnits, api.Label, api.StopLossInPips, api.TakeProfitInPips)
elif Functions.HasCrossedBelow(self.fastHull.Result, self.slowHull.Result, 0):
self.close_positions(TradeType.Buy)
api.ExecuteMarketOrder(TradeType.Sell, api.SymbolName, self.volumeInUnits, api.Label, api.StopLossInPips, api.TakeProfitInPips)
def get_bot_positions(self):
return api.Positions.FindAll(api.Label)
def close_positions(self, tradeType):
for position in self.get_bot_positions():
if position.TradeType != tradeType:
continue
api.ClosePosition(position)
{
"AccessRights": "None",
"TimeZone": "UTC",
"Parameters": [
{
"Name": "FastMaSource",
"DisplayName": "Source",
"Type": "DataSeries",
"Group": "Fast MA"
},
{
"Name": "FastMaPeriod",
"DisplayName": "Period",
"Type": "Integer",
"DefaultValue": 9,
"Group": "Fast MA"
},
{
"Name": "SlowMaSource",
"DisplayName": "Source",
"Type": "DataSeries",
"Group": "Slow MA"
},
{
"Name": "SlowMaPeriod",
"DisplayName": "Period",
"Type": "Integer",
"DefaultValue": 20,
"Group": "Slow MA"
},
{
"Name": "VolumeInLots",
"DisplayName": "Volume (Lots)",
"Type": "Double",
"DefaultValue": 0.01,
"Group": "Trade"
},
{
"Name": "StopLossInPips",
"DisplayName": "Stop Loss (Pips)",
"Type": "Double",
"DefaultValue": 10,
"Group": "Trade"
},
{
"Name": "TakeProfitInPips",
"DisplayName": "Take Profit (Pips)",
"Type": "Double",
"DefaultValue": 10,
"Group": "Trade"
},
{
"Name": "Label",
"Type": "String",
"DefaultValue": "Sample",
"Group": "Trade"
}
]
}
Inherited members
From MovingAverage: Result
From StandardIndicator: AddToChart, Symbol, TimeFrame, Bars