Daniel
After a bunch of reflection, I am getting everything right, except for the OnOrderFilled method, which gives me following error:
2,"Exception RightEdge.Common.RightEdgeError: Previous value for position ID 1 not found. |
at RightEdge.Common.SystemStatistics.OrderFilled(BarStatistic stats, TradeInfo trade, PositionInfo position, Double lastPrice, IAccountInfo accountInfo, Dictionary`2 positionValues) |
at RightEdge.Common.SystemStatistics.OrderFilled(TradeInfo trade, PositionInfo position, Double lastPrice, IAccountInfo accountInfo) |
at RightEdge.Common.BaseSystemHistory.OrderFilled(TradeInfo trade, PositionInfo pos, PositionState state) |
at RightEdge.Common.BaseSystemHistory.positionManager_OrderFilled(Object sender, OrderFilledEventArgs e) |
at System.EventHandler`1.Invoke(Object sender, TEventArgs e)",,,2012-02-16 00:00:00 |
Any idea where I am going wrong? Here is the code - it is a bit cumbersome, but reflection is a new thing for me.
public void AddInterestToPosition(Position position, double interest, string description="")
{
TradeInfo trade = new TradeInfo();
trade.FilledTime =SystemData.CurrentDate;
trade.TransactionType = TransactionType.Interest;
trade.Price = new Price(0.0, 0.0);
trade.Size = position.CurrentSize;
trade.OrderType = OrderType.Market;
trade.Commission = 0.0;
trade.BuyingPowerChange = -(double) interest;
trade.Description = description;
var dynPositionManager = PositionManager;
Type dynPositionManagerType = dynPositionManager.GetType();
MethodInfo getPositionDataMethodInfo =dynPositionManagerType.GetMethod("GetPositionData", BindingFlags.Instance|BindingFlags.Public|BindingFlags.NonPublic, null,CallingConventions.Any, new Type[] {typeof(string)},null);
string[] positionId = new String[1];
positionId[0] = position.ID;
PositionManager.PositionData positionData=(PositionManager.PositionData) getPositionDataMethodInfo.Invoke(dynPositionManager,positionId);
MethodInfo getBrokerPositionDataMethodInfo =dynPositionManagerType.GetMethod("GetBrokerPosition",BindingFlags.Instance|BindingFlags.Public|BindingFlags.NonPublic);
Object[]paramBrokerPositionData = new Object[3];
paramBrokerPositionData[0] =position.Symbol;
paramBrokerPositionData[1] =position.Type;
paramBrokerPositionData[2] = false;
PositionManager.PositionData brokerPositionData = (PositionManager.PositionData)getBrokerPositionDataMethodInfo.Invoke(dynPositionManager,paramBrokerPositionData);
positionData.Trades.Add(trade);
brokerPositionData.Trades.Add(trade);
MethodInfo getOnOrderFilledMethod =dynPositionManagerType.GetMethod("OnOrderFilled", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, CallingConventions.Any, new Type[] { typeof(Trade), typeof(Position), typeof(PositionInfo) }, null);
Object[]paramOnOrderFilled = new Object[3];
paramOnOrderFilled[0] = (Trade)position.Trades[position.Trades.Count-1];
paramOnOrderFilled[1] = (Position) position;
paramOnOrderFilled[2] = (PositionInfo)position.Info;
getOnOrderFilledMethod.Invoke(dynPositionManager, paramOnOrderFilled);
Thanks
Johan
Edited:
Tuesday August 04 2015 by
johan