using cAlgo.API;
using cAlgo.API.Indicators;
namespace cAlgo.Robots
{
// このサンプルcBotは、Hull移動平均インジケーターの使い方を示しています
[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class HullMovingAverageSample : Robot
{
private double _volumeInUnits;
private HullMovingAverage _fastHull;
private HullMovingAverage _slowHull;
[Parameter("Source", Group = "Fast MA")]
public DataSeries FastMaSource { get; set; }
[Parameter("Period", DefaultValue = 9, Group = "Fast MA")]
public int FastMaPeriod { get; set; }
[Parameter("Source", Group = "Slow MA")]
public DataSeries SlowMaSource { get; set; }
[Parameter("Period", DefaultValue = 20, Group = "Slow MA")]
public int SlowMaPeriod { get; set; }
[Parameter("Volume (Lots)", DefaultValue = 0.01, Group = "Trade")]
public double VolumeInLots { get; set; }
[Parameter("Stop Loss (Pips)", DefaultValue = 10, Group = "Trade")]
public double StopLossInPips { get; set; }
[Parameter("Take Profit (Pips)", DefaultValue = 10, Group = "Trade")]
public double TakeProfitInPips { get<span="p">; set<span="p">; }
[Parameter("Label", DefaultValue = "Sample", Group = "Trade")]
public string Label { get<span="p">; set<span="p">; }
public Position[] BotPositions
{
get
{
return Positions.FindAll(Label);
}
}
protected override void OnStart()
{
_volumeInUnits = Symbol.QuantityToVolumeInUnits(VolumeInLots<span="p">);
_fastHull = Indicators.HullMovingAverage(FastMaSource, FastMaPeriod);
_slowHull = Indicators.HullMovingAverage<span="p">(SlowMaSource, SlowMaPeriod);
}
protected override void OnBar<span="p">()
{
if (_fastHull<span="p">.Result.HasCrossedAbove<span="p">(_slowHull<span="p">.Result<span="p">, 0<span="p">))
{
ClosePositions(TradeType<span="p">.Sell<span="p">);
ExecuteMarketOrder<span="p">(TradeType<span="p">.Buy<span="p">, SymbolName<span="p">, _volumeInUnits<span="p">, Label<span="p">, StopLossInPips<span="p">, TakeProfitInPips<span="p">);
}
else if (_fastHull<span="p">.Result<span="p">.HasCrossedBelow<span="p">(<span="n">_slowHull<span="p">.<span="n">Result<span="p">, 0<span="p">))
{
ClosePositions<span="p">(<span="n">TradeType<span="p">.Buy<span="p">);
ExecuteMarketOrder<span="p">(<span="n">TradeType<span="p">.Sell<span="p">, <span="n">SymbolName<span="p">, _volumeInUnits<span="p">, <span="n">Label<span="p">, <span="n">StopLossInPips<span="p">, TakeProfitInPips<span="p">);
}
<span="p">}
private void ClosePositions<span="p">(TradeType tradeType<span="p">)
{
foreach (var position in BotPositions<span="p">)
{
if (position<span="p">.TradeType != tradeType<span="p">) continue<span="p">;
ClosePosition<span="p">(<span="n">position<span="p">);
}
}
<span="p">}
<span="p">}