Skip to content

MoneyFlowIndex

Summary

The Money Flow Index is an oscillator that calculates buying and selling pressure using typical price and volume. It oscillates between zero and one hundred. It is typically used to identify trend reversals and price extremes.

Signature

1
public abstract interface MoneyFlowIndex

Namespace

cAlgo.API.Indicators

Properties

Name Description
Result { get; set; } The time series of the Money Flow Index indicator.

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
 private MoneyFlowIndex _moneyFlow;
 [Parameter("Period", DefaultValue = 14)]
 public int Period { get; set; }
 [Output("Main")]
 public IndicatorDataSeries Result { get; set; }
 protected override void Initialize()
 {
    _moneyFlow = Indicators.MoneyFlowIndex(Period);
 }
 public override void Calculate(int index)
 {
    // Display Result of Indicator
    Result[index] = _moneyFlow.Result[index];
 }
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
 using cAlgo.API;
 using cAlgo.API.Indicators;
 namespace cAlgo.Robots
 {
     // This sample cBot shows how to use the Money Flow Index indicator
     [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
     public class MoneyFlowIndexSample : Robot
     {
         private double _volumeInUnits;
         private MoneyFlowIndex _moneyFlowIndex;
         [Parameter("Volume (Lots)", DefaultValue = 0.01)]
         public double VolumeInLots { get; set; }
         [Parameter("Stop Loss (Pips)", DefaultValue = 10)]
         public double StopLossInPips { get; set; }
         [Parameter("Take Profit (Pips)", DefaultValue = 10)]
         public double TakeProfitInPips { get; set; }
         [Parameter("Label", DefaultValue = "Sample")]
         public string Label { get; set; }
         public Position[] BotPositions
         {
             get
             {
                 return Positions.FindAll(Label);
             }
         }
         protected override void OnStart()
         {
             _volumeInUnits = Symbol.QuantityToVolumeInUnits(VolumeInLots);
             _moneyFlowIndex = Indicators.MoneyFlowIndex(14);
         }
         protected override void OnBar()
         {
             if (_moneyFlowIndex.Result.Last(1) > 80)
             {
                 ClosePositions(TradeType.Buy);
                 if (BotPositions.Length == 0)
                 {
                     ExecuteMarketOrder(TradeType.Sell, SymbolName, _volumeInUnits, Label, StopLossInPips, TakeProfitInPips);
                 }
             }
             else if (_moneyFlowIndex.Result.Last(1) < 20)
             {
                 ClosePositions(TradeType.Sell);
                 if (BotPositions.Length == 0)
                 {
                     ExecuteMarketOrder(TradeType.Buy, SymbolName, _volumeInUnits, Label, StopLossInPips, TakeProfitInPips);
                 }
             }
         }
         private void ClosePositions(TradeType tradeType)
         {
             foreach (var position in BotPositions)
             {
                 if (position.TradeType != tradeType) continue;
                 ClosePosition(position);
             }
         }
     }
 }

Last update: June 26, 2022

Comments