public Connect(int p = 9200) { gfClient = GF.Api.Impl.GFApi.CreateClient(); //Removed declaration stuff (type, object -- etc) account = gfClient.Accounts.Get().FirstOrDefault(); runner = new GF.Api.Threading.GFClientRunner(gfClient); //declared in class def runner.Start(); Console.WriteLine("Runner (HB) started."); port = p; Console.WriteLine("Connecting..."); }
public IEnumerable <GF.Api.Positions.IPosition> GetOpenPositions(GF.Api.Accounts.IAccount account, GF.Api.Positions.PositionChangedEventArgs e) { //Made active an ATTRIBUTE / PROPERTY -- now can be called whenever. //GF.Api.Positions.IPosition[] active = { }; //Should I make this a fixed memory level ? Will Dynamic create overflow? int idx = 0; foreach (var pos in e.AsArray()) { //If Matched Account, Has fills, and has Open Position PNL... Add to active. if (e.ContractPosition.Account.ID == account.ID & e.ContractPosition.Fills != null & e.ContractPosition.OTE != 0) { //Console.WriteLine(pos); active[idx] = pos.ContractPosition; } idx += 1; } //Real purpose -- return changed positions -- > To feed into TrailStop. return(active); }
/*Initially -- Try to use JUST the above code... IF you require more detail, then integrate the below stuff (tweaked examples) */ //Goal was to find and loop thrugh all open positions... return them as an iterable object -- upon PositionsChangedEvent public IEnumerable <GF.Api.Positions.IPosition> GetPositions(GF.Api.Accounts.IAccount account, GF.Api.Positions.PositionChangedEventArgs e) { return(e.ContractPosition.AsArray()); }
public IEnumerable <GF.Api.Orders.IOrder> GetPositionOrders(GF.Api.Accounts.IAccount account, GF.Api.Contracts.IContract contract) { return(WorkingOrders.Where(order => order.Account.ID == account.ID && order.Contract.PositionContract.ID == contract.PositionContract.ID)); }