Heiken Ashi cBot issue
Heiken Ashi cBot issue
24 Jan 2014, 05:31
Hey guys,
I'm new to cAlgo and i'm preparing a Heiken Ashi robot that buys or sells at the end of each bar depending on the direction.
Build is successful but it doesn't make any trades.
Please Help
//#reference: ..\Indicators\HeikenAshiJohn.algo using System; using System.Linq; using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.Indicators; namespace cAlgo.Robots { [Robot(TimeZone = TimeZones.UTC)] public class HAK : Robot { [Parameter("Initial Volume", DefaultValue = 10000, MinValue = 0)] public int InitialVolume { get; set; } [Parameter("Initial Stop Loss", DefaultValue = 40)] public int SL { get; set; } [Parameter("Initial Take Profit", DefaultValue = 40)] public int TP { get; set; } private HeikenAshiJohn HAJ; string label = "HAK"; protected override void OnStart() { HAJ = Indicators.GetIndicator<HeikenAshiJohn>(1); } protected override void OnBar() { int index = MarketSeries.Close.Count - 2; Print("Open : " + HAJ.xOpen[index] + " | Close : " + HAJ.xClose[index] + " | Last : " + HAJ.xClose.LastValue); if (HAJ.xClose[index] < HAJ.xOpen[index]) { ExecuteMarketOrder(TradeType.Sell, Symbol, InitialVolume, label, SL, TP); } if (HAJ.xClose[index] > HAJ.xOpen[index]) { ExecuteMarketOrder(TradeType.Buy, Symbol, InitialVolume, label, SL, TP); } } } }
Replies
Kyriakos
27 Jan 2014, 08:23
HA Indicator
using System; using cAlgo.API; using cAlgo.API.Internals; using cAlgo.API.Indicators; namespace cAlgo.Indicators { [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC)] public class HeikenAshiJohn : Indicator { [Parameter("Period", DefaultValue = 1, MinValue = 1, MaxValue = 2147483647)] public int ParameterPeriod { get; set; } public IndicatorDataSeries xClose; public IndicatorDataSeries xHigh; public IndicatorDataSeries xLow; public IndicatorDataSeries xOpen; protected override void Initialize() { xClose = CreateDataSeries(); xHigh = CreateDataSeries(); xLow = CreateDataSeries(); xOpen = CreateDataSeries(); } public override void Calculate(int index) { if (index <= ParameterPeriod) { xOpen[index] = Math.Round((MarketSeries.Open[index] + MarketSeries.Close[index]) / 2, Symbol.Digits); xClose[index] = Math.Round((MarketSeries.Open[index] + MarketSeries.Low[index] + MarketSeries.High[index] + MarketSeries.Close[index]) / 4, Symbol.Digits); xHigh[index] = MarketSeries.High[index]; xLow[index] = MarketSeries.Low[index]; return; } xOpen[index] = Math.Round((xOpen[index - 1] + xClose[index - 1]) / 2, Symbol.Digits); xClose[index] = Math.Round((MarketSeries.Open[index] + MarketSeries.Low[index] + MarketSeries.High[index] + MarketSeries.Close[index]) / 4, Symbol.Digits); xHigh[index] = Math.Max(MarketSeries.High[index], Math.Max(xOpen[index], xClose[index])); xLow[index] = Math.Min(MarketSeries.Low[index], Math.Min(xOpen[index], xClose[index])); if (xClose[index] < xOpen[index]) { ChartObjects.DrawLine("OpenClose-" + index.ToString(), index, xOpen[index], index, xClose[index], Colors.Red, 5, LineStyle.Solid); ChartObjects.DrawLine("HighLow-" + index.ToString(), index, xHigh[index], index, xLow[index], Colors.Red, 1, LineStyle.Solid); } else { ChartObjects.DrawLine("OpenClose-" + index.ToString(), index, xOpen[index], index, xClose[index], Colors.Yellow, 5, LineStyle.Solid); ChartObjects.DrawLine("HighLow-" + index.ToString(), index, xHigh[index], index, xLow[index], Colors.Yellow, 1, LineStyle.Solid); } } } }
@Kyriakos
Kyriakos
27 Jan 2014, 11:10
RE:
Thank you for your help but it still doesn't trade after changing the indicator:
namespace cAlgo.Indicators { [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC)] public class HeikenAshiJohn : Indicator { [Parameter("Period", DefaultValue = 1, MinValue = 1, MaxValue = 2147483647)] public int ParameterPeriod { get; set; } [Output("xClose")] public IndicatorDataSeries xClose { get; set; } [Output("xHigh")] public IndicatorDataSeries xHigh { get; set; } [Output("xLow")] public IndicatorDataSeries xLow { get; set; } [Output("xOpen")] public IndicatorDataSeries xOpen { get; set; }
@Kyriakos
karlson
02 Mar 2015, 20:16
RE: RE:
Hi,
How to do the same robot please with Heiken Ashi Smoothed :
Thank you
using System;
using cAlgo.API;
using cAlgo.API.Indicators;
namespace cAlgo.Indicators
{
[Indicator(IsOverlay = true, AccessRights = AccessRights.None)]
public class HeikenAshiSmoothed : Indicator
{
[Parameter(DefaultValue = 5, MinValue = 1)]
public int Periods { get; set; }
[Parameter("MA Type", DefaultValue = MovingAverageType.Simple)]
public MovingAverageType MAType { get; set; }
private MovingAverage maOpen;
private MovingAverage maClose;
private MovingAverage maHigh;
private MovingAverage maLow;
private IndicatorDataSeries haClose;
private IndicatorDataSeries haOpen;
protected override void Initialize()
{
maOpen = Indicators.MovingAverage(MarketSeries.Open, Periods, MAType);
maClose = Indicators.MovingAverage(MarketSeries.Close, Periods, MAType);
maHigh = Indicators.MovingAverage(MarketSeries.High, Periods, MAType);
maLow = Indicators.MovingAverage(MarketSeries.Low, Periods, MAType);
haOpen = CreateDataSeries();
haClose = CreateDataSeries();
}
public override void Calculate(int index)
{
double haHigh;
double haLow;
Colors Color;
if (index > 0 && !double.IsNaN(maOpen.Result[index - 1]))
{
haOpen[index] = (haOpen[index - 1] + haClose[index - 1]) / 2;
haClose[index] = (maOpen.Result[index] + maClose.Result[index] + maHigh.Result[index] + maLow.Result[index]) / 4;
haHigh = Math.Max(maHigh.Result[index], Math.Max(haOpen[index], haClose[index]));
haLow = Math.Min(maLow.Result[index], Math.Min(haOpen[index], haClose[index]));
Color = (haOpen[index] > haClose[index]) ? Colors.Red : Colors.Blue;
ChartObjects.DrawLine("BarHA" + index, index, haOpen[index], index, haClose[index], Color, 7, LineStyle.Solid);
ChartObjects.DrawLine("LineHA" + index, index, haHigh, index, haLow, Color, 1, LineStyle.Solid);
}
else if (!double.IsNaN(maOpen.Result[index]))
{
haOpen[index] = (maOpen.Result[index] + maClose.Result[index]) / 2;
haClose[index] = (maOpen.Result[index] + maClose.Result[index] + maHigh.Result[index] + maLow.Result[index]) / 4;
haHigh = maHigh.Result[index];
haLow = maLow.Result[index];
}
}
}
}
@karlson
brunoamancio.ti
01 Sep 2016, 01:13
I've added some functions for cBots developers to use HA data in their bots.
Check out /algos/indicators/show/1452
@brunoamancio.ti
matteo.cechet
29 Oct 2019, 23:51
RE: RE: full program
Hello, please could you give me the complete HA bot program to install on c-trader?
thanx a lot
Matteo
@matteo.cechet
adaled
24 Jan 2014, 14:37
I think it's probably the indicator. Post the code of that.
@adaled