Executing market orders within class methods
30 Jun 2019, 21:03
Im trying to execute market order from the class method
Initialize()
using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;
public enum TradeDirection
{
Buy,
Sell
}
public enum Reduction
{
True,
False
}
public enum VolumeIncrementMode
{
Exponential,
Lineal,
Recursive,
LinealRecursive
}
namespace cAlgo.Robots
{
[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class HedgingSystemv2 : Robot
{
public class Cycle : HedgingSystemv2
{
public HedgingSystemv2 TradeHandler = new cAlgo.Robots.HedgingSystemv2();
public string ID;
public TradeResult[] CyclePositions = new TradeResult[1000];
public double GD;
public int LevelInPips;
public double UsedVolume;
public double BasePrice;
public VolumeIncrementMode VolumeIncmtMode;
public TradeType CycleType;
public double TP;
public string Sym;
/*public Cycle(string ID, double UsedVolume)
{
//Print("Initializing Cycle...");
this.ID = ID;
this.UsedVolume = UsedVolume;
//Print("Cycle Initialized");
}*/
public Cycle(string ID, double UsedVolume, TradeType type, VolumeIncrementMode mode, string Sym)
{
//Print("Initializing Cycle...");
this.ID = ID;
this.UsedVolume = UsedVolume;
this.CycleType = type;
this.VolumeIncmtMode = mode;
this.Sym = Sym;
//Print("Cycle Initialized");
}
public void Initialize()
{
this.CyclePositions[0] = this.TradeHandler.ExecuteMarketOrder(TradeType.Buy, SymbolName, 1000, "0");
}
public void CheckNewLevel()
{
}
public void NewTP()
{
}
public void Reset()
{
}
}
// LEVEL PARAMS
[Parameter("Distancia de Compras", Group = "Levels", MinValue = 0, DefaultValue = 250)]
public int pDistanceBuy { get; set; }
[Parameter("Distancia de Ventas", Group = "Levels", MinValue = 0, DefaultValue = 250)]
public int pDistanceSell { get; set; }
// TP PARAMS
[Parameter("Tomar Ganancias", Group = "Take Profit", MinValue = 0, DefaultValue = 25)]
public int pTakeProfit { get; set; }
[Parameter("Posicionamiento %", Group = "Take Profit", MinValue = -200, MaxValue = 100, DefaultValue = 0)]
public int pTakeProfitPosition { get; set; }
[Parameter("Reducción", Group = "Take Profit")]
public Reduction pTakeProfitReduction { get; set; }
[Parameter("Razon de Reducción", Group = "Take Profit", MinValue = 0, MaxValue = 100, DefaultValue = 16)]
public int pTakeProfitReductionRatio { get; set; }
// VOLUME PARAMS
[Parameter("Volumen inicial", Group = "Volume", MinValue = 0.01, DefaultValue = 0.01)]
public double pVolumeStart { get; set; }
[Parameter("Modo de incremento", Group = "Volume")]
public VolumeIncrementMode pVolumeIncrement { get; set; }
[Parameter("Constante de incremento", Group = "Volume", MinValue = 1.0, DefaultValue = 2.0)]
public double pVolumeIncrementConstant { get; set; }
// GLOBAL VARIABLES
Cycle[] Cycles = new Cycle[1000];
bool NewBuyCycle = true;
bool NewSellCycle = true;
string ThiscBotLabel;
int LCCI = 0;
protected override void OnStart()
{
ThiscBotLabel = GetType().Name;
Print("Starting {0} in {1}", ThiscBotLabel, Symbol.Name);
Print("Minimum Volume: {0}", Symbol.VolumeInUnitsMin);
Positions.Closed += PositionsOnClosed;
}
protected override void OnTick()
{
if (NewBuyCycle)
{
Cycles[LCCI] = new Cycle(LCCI.ToString() + "|" + ThiscBotLabel, pVolumeStart, TradeType.Buy, pVolumeIncrement, SymbolName);
Print("ID: {0}", Cycles[0].ID);
Print("USED VOLUME: {0}", Cycles[0].UsedVolume);
Print("Type: {0}", Enum.GetName(typeof(TradeType), Cycles[0].CycleType));
Print("Volume Mode: {0}", Enum.GetName(typeof(VolumeIncrementMode), Cycles[0].VolumeIncmtMode));
Cycles[LCCI].Initialize();
NewBuyCycle = !NewBuyCycle;
}
if (NewSellCycle)
{
}
}
private void PositionsOnClosed(PositionClosedEventArgs args)
{
}
protected override void OnStop()
{
if (this.IsBacktesting)
{
foreach (var position in Positions)
{
ClosePosition(position);
}
}
}
}
}
But i recieve the following error in runtime:
28/06/2019 00:00:00.422 | Crashed in OnTick with NullReferenceException: Object reference not set to an instance of an object.
Any idea?
