Skip to content

EaseOfMovement

interface cAlgo.API.Indicators

DesktopCLICloud

Ease of Movement is a volume based oscillator that measures the "ease" of price movement.

Definition

public interface EaseOfMovement

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

Remarks

It quantifies the price/volume relationship. When the oscillator is close to zero it signifies that prices will not move easy. Conversely, prices are advancing or declining with relative ease when the oscillator is positive or negative away from zero.

Examples

Example 1

private EaseOfMovement _easeOfMovement;

protected override void Initialize()
{
   _easeOfMovement = Indicators.EaseOfMovement(Period, MAType);
}
public override void Calculate(int index)
{
   // Display Result of Indicator
   Result[index] = _easeOfMovement.Result[index];
}
import clr
clr.AddReference("cAlgo.API")

from cAlgo.API import *

class Test():
    def initialize(self):
        self.easeOfMovement = api.Indicators.EaseOfMovement(api.Period, api.MAType)

    def calculate(self, index):
        api.Result[index] = self.easeOfMovement.Result[index]
{
  "Parameters": [
    {
      "Name": "Period",
      "Type": "Integer",
      "DefaultValue": 14
    },
    {
      "Name": "MAType",
      "DisplayName": "MA Type",
      "Type": "Enum",
      "EnumTypeFullName": "cAlgo.API.MovingAverageType",
      "DefaultValue": "Simple"
    }
  ],
  "LineOutputs": [
    {
      "Name": "Result",
      "DisplayName": "Main"
    }
  ]
}

Example 2

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

namespace cAlgo.Robots
{
    // This sample cBot shows how to use the Ease Of Movement indicator
    public partial class EaseOfMovementSample : Robot
    {
        private double _volumeInUnits;

        private EaseOfMovement _easeOfMovement;

        private SimpleMovingAverage _simpleMovingAverage;

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

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

            _easeOfMovement = Indicators.EaseOfMovement(14, MovingAverageType.Simple);

            _simpleMovingAverage = Indicators.SimpleMovingAverage(Bars.ClosePrices, 9);
        }

        protected override void OnBar()
        {
            if (_easeOfMovement.Result.Last(1) > (Symbol.TickSize * 0.05))
            {
                if (Bars.ClosePrices.Last(1) > _simpleMovingAverage.Result.Last(1) && Bars.ClosePrices.Last(2) < _simpleMovingAverage.Result.Last(2))
                {
                    ExecuteMarketOrder(TradeType.Buy, SymbolName, _volumeInUnits, Label, StopLossInPips, TakeProfitInPips);
                }
                else if (Bars.ClosePrices.Last(1) < _simpleMovingAverage.Result.Last(1) && Bars.ClosePrices.Last(2) > _simpleMovingAverage.Result.Last(2))
                {
                    ExecuteMarketOrder(TradeType.Sell, SymbolName, _volumeInUnits, Label, StopLossInPips, TakeProfitInPips);
                }
            }
            else
            {
                ClosePositions();
            }
        }

        private void ClosePositions()
        {
            foreach (var position in BotPositions)
            {
                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 EaseOfMovementSample():
    def on_start(self):
        self.volumeInUnits = api.Symbol.QuantityToVolumeInUnits(api.VolumeInLots)
        self.easeOfMovement = api.Indicators.EaseOfMovement(14, MovingAverageType.Simple)
        self.simpleMovingAverage = api.Indicators.SimpleMovingAverage(api.Bars.ClosePrices, 9)

    def on_bar_closed(self):
        if self.easeOfMovement.Result.Last(0) > (api.Symbol.TickSize * 0.05):
            if api.Bars.ClosePrices.Last(0) > self.simpleMovingAverage.Result.Last(0) and api.Bars.ClosePrices.Last(1) < self.simpleMovingAverage.Result.Last(1):
                api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, self.volumeInUnits, api.Label, api.StopLossInPips, api.TakeProfitInPips)
            elif api.Bars.ClosePrices.Last(0) < self.simpleMovingAverage.Result.Last(0) and api.Bars.ClosePrices.Last(1) > self.simpleMovingAverage.Result.Last(1):
                api.ExecuteMarketOrder(TradeType.Sell, api.SymbolName, self.volumeInUnits, api.Label, api.StopLossInPips, api.TakeProfitInPips)
        else:
            self.close_positions()

    def get_bot_positions(self):
        return api.Positions.FindAll(api.Label)

    def close_positions(self):
        for position in self.get_bot_positions():
            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
ResultDesktopCLICloudIndicatorDataSeries The time series of the Ease Of Movement Indicator.

Inherited members

From StandardIndicator: AddToChart, Symbol, TimeFrame, Bars