Skip to content

CyberCycle

interface cAlgo.API.Indicators

DesktopCLICloud

The Cyber Cycles Oscillator is an indicator designed by John Ehlers, it is used for isolating the cycle component of the market from its trend counterpart.

Definition

public interface CyberCycle

Namespace: cAlgo.API.Indicators · Group: Indicators · Implements: StandardIndicator

Examples

Example 1

var cyberCycle = Indicators.CyberCycle(0.07);
Print("Cycle: {0}, Trigger: {1}", cyberCycle.Cycle.Last(1), cyberCycle.Trigger.Last(1));
cyberCycle = api.Indicators.CyberCycle(0.07)
api.Print(f"Cycle: {cyberCycle.Cycle.Last(1)}, Trigger: {cyberCycle.Trigger.Last(1)}")

Example 2

using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Robots
{
    // This sample cBot shows how to use the Cyber Cycle indicator
    public partial class CyberCycleSample : Robot
    {
        private double _volumeInUnits;

        private CyberCycle _cyberCycle;

        public Position[] BotPositions
        {
            get
            {
                return Positions.FindAll(Label);
            }
        }

        protected override void OnStart()
        {
            _volumeInUnits = Symbol.QuantityToVolumeInUnits(VolumeInLots);

            _cyberCycle = Indicators.CyberCycle(0.07);
        }

        protected override void OnBar()
        {
            if (_cyberCycle.Cycle.Last(1) > _cyberCycle.Trigger.Last(1) && _cyberCycle.Cycle.Last(2) <= _cyberCycle.Trigger.Last(2))
            {
                ClosePositions(TradeType.Sell);

                ExecuteMarketOrder(TradeType.Buy, SymbolName, _volumeInUnits, Label, StopLossInPips, TakeProfitInPips);
            }
            else if (_cyberCycle.Cycle.Last(1) < _cyberCycle.Trigger.Last(1) && _cyberCycle.Cycle.Last(2) >= _cyberCycle.Trigger.Last(2))
            {
                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 CyberCycleSample():
    def on_start(self):
        self.volumeInUnits = api.Symbol.QuantityToVolumeInUnits(api.VolumeInLots)
        self.cyberCycle = api.Indicators.CyberCycle(0.07)

    def on_bar_closed(self):
        if self.cyberCycle.Cycle.Last(0) > self.cyberCycle.Trigger.Last(0) and self.cyberCycle.Cycle.Last(1) <= self.cyberCycle.Trigger.Last(1):
            self.close_positions(TradeType.Sell)
            api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, self.volumeInUnits, api.Label, api.StopLossInPips, api.TakeProfitInPips)
        elif self.cyberCycle.Cycle.Last(0) < self.cyberCycle.Trigger.Last(0) and self.cyberCycle.Cycle.Last(1) >= self.cyberCycle.Trigger.Last(1):
            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": "VolumeInLots",
      "DisplayName": "Volume (Lots)",
      "Type": "Double",
      "DefaultValue": 0.01
    },
    {
      "Name": "StopLossInPips",
      "DisplayName": "Stop Loss (Pips)",
      "Type": "Double",
      "DefaultValue": 10
    },
    {
      "Name": "TakeProfitInPips",
      "DisplayName": "Take Profit (Pips)",
      "Type": "Double",
      "DefaultValue": 10
    },
    {
      "Name": "Label",
      "Type": "String",
      "DefaultValue": "Sample"
    }
  ]
}

Properties

Name Description
CycleDesktopCLICloudIndicatorDataSeries The Cyber Cycles Oscillator plot.
TriggerDesktopCLICloudIndicatorDataSeries The CCO plot shifted one bar back; crossovers of the two plots suggest Buy/Sell signals.

Inherited members

From StandardIndicator: AddToChart, Symbol, TimeFrame, Bars