RO
How to use custom indicator in cBot
25 Sep 2015, 10:42
How to refer this indicator in cBot (StochacticCCI)
using System;
using cAlgo.API;
using cAlgo.API.Indicators;
namespace cAlgo.Indicators
{
[Indicator(IsOverlay = false, AccessRights = AccessRights.None)]
public class StochasticCCI : Indicator
{
[Output("StochCCI", Color = Colors.Blue)]
public IndicatorDataSeries StochCCI { get; set; }
[Output("Trigger", Color = Colors.Red)]
public IndicatorDataSeries trigger { get; set; }
[Parameter(DefaultValue = 14, MinValue = 2)]
public int Period { get; set; }
private CommodityChannelIndex cci;
private IndicatorDataSeries value1;
protected override void Initialize()
{
cci = Indicators.CommodityChannelIndex(Period);
value1 = CreateDataSeries();
}
public override void Calculate(int index)
{
double cciL = cci.Result[index];
double cciH = cci.Result[index];
for (int i = index - Period + 1; i <= index; i++)
{
if (cciH < cci.Result[i])
{
cciH = cci.Result[i];
}
if (cciL > cci.Result[i])
{
cciL = cci.Result[i];
}
}
if (cciH != cciL)
{
value1[index] = ((cci.Result[index] - cciL) / (cciH - cciL));
}
StochCCI[index] = (4 * value1[index] + 3 * value1[index - 1] + 2 * value1[index - 2] + value1[index - 3]) / 10;
StochCCI[index] = 2 * (StochCCI[index] - 0.5);
trigger[index] = 0.96 * (StochCCI[index - 1] + 0.02);
}
}
}
Replies
ColossusFX
26 Sep 2015, 17:59
That is someone elses CCI bot, not sure if its any help... CCI is not very reliable IMO.
@ColossusFX

ColossusFX
26 Sep 2015, 17:59
using System; using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Requests; namespace cAlgo.Robots { [Robot(AccessRights = AccessRights.None)] public class Cci20 : Robot { private CommodityChannelIndex _cci; private Position _position; [Parameter(DefaultValue = 1, MinValue = 0, MaxValue = 50)] public int RiskPct { get; set; } [Parameter(DefaultValue = 500, MinValue = 100, MaxValue = 500)] public int Leverage { get; set; } [Parameter("Periods", DefaultValue = 20, MinValue = 1)] public int Periods { get; set; } [Parameter("Stop Loss (pips)", DefaultValue = 10, MinValue = 0)] public int StopLoss { get; set; } [Parameter("Take Profit (pips)", DefaultValue = 0, MinValue = 0)] public int TakeProfit { get; set; } [Parameter("Volume", DefaultValue = 10000, MinValue = 1000)] public int Volume { get; set; } protected int GetVolume { get { var risk = (int) (RiskPct*Account.Balance/100); int volumeOnRisk = StopLoss > 0 ? (int) (risk*Symbol.Ask/(Symbol.PipSize*StopLoss)) : Volume; double maxVolume = Account.Equity*Leverage*100/101; double vol = Math.Min(volumeOnRisk, maxVolume); return (int) Math.Truncate(Math.Round(vol)/10000)*10000; // round to 10K } } protected override void OnStart() { _cci = Indicators.CommodityChannelIndex(Periods); } protected override void OnBar() { if (Trade.IsExecuting) return; bool isLongPositionOpen = _position != null && _position.TradeType == TradeType.Buy; bool isShortPositionOpen = _position != null && _position.TradeType == TradeType.Sell; if (_cci.Result.HasCrossedBelow(0.0, 2) && !isShortPositionOpen) OpenPosition(TradeType.Sell); else if (_cci.Result.HasCrossedAbove(0.0, 2) && !isLongPositionOpen) OpenPosition(TradeType.Buy); } private void OpenPosition(TradeType type) { if (_position != null) Trade.Close(_position); Volume = GetVolume; Print(Volume); Request request = new MarketOrderRequest(type, Volume) { Label = "CCI 20", StopLossPips = StopLoss > 0 ? StopLoss : (int?) null, TakeProfitPips = TakeProfit > 0 ? TakeProfit : (int?) null, }; Trade.Send(request); } protected override void OnPositionOpened(Position openedPosition) { _position = openedPosition; } protected override void OnPositionClosed(Position position) { _position = null; } } }@ColossusFX