---
id: "T:cAlgo.API.Indicators.EaseOfMovement"
kind: "interface"
namespace: "cAlgo.API.Indicators"
url: "https://help.ctrader.com/ctrader-algo/references/Indicators/EaseOfMovement/"
---

> Documentation index for agents: https://help.ctrader.com/ctrader-algo/llms.txt · machine index: https://help.ctrader.com/ctrader-algo/api.json

# EaseOfMovement (interface)

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

Environments: Desktop supported · CLI supported · Cloud supported.

## Definition

```csharp
public interface EaseOfMovement
```

## 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

C#:

```csharp
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];
}
```

Python:

```python
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]
```

config.json:

```json
{
  "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"
    }
  ]
}
```

C#:

```csharp
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);
            }
        }
    }
}
```

Python:

```python
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)
```

config.json:

```json
{
  "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

- `IndicatorDataSeries Result {get; set;}` — The time series of the Ease Of Movement Indicator. [details](https://help.ctrader.com/ctrader-algo/references/Indicators/EaseOfMovement/Result/index.md)

## Inherited members

- `ChartIndicator AddToChart()` (from StandardIndicator) [details](https://help.ctrader.com/ctrader-algo/references/General/StandardIndicator/AddToChart/index.md)
- `Symbol Symbol {get;}` (from StandardIndicator) [details](https://help.ctrader.com/ctrader-algo/references/General/StandardIndicator/Symbol/index.md)
- `TimeFrame TimeFrame {get;}` (from StandardIndicator) [details](https://help.ctrader.com/ctrader-algo/references/General/StandardIndicator/TimeFrame/index.md)
- `Bars Bars {get;}` (from StandardIndicator) [details](https://help.ctrader.com/ctrader-algo/references/General/StandardIndicator/Bars/index.md)

