//Addits -- ------------------------------------------------------------------------------------------------------------- //Initial Type of Argument E: GF.Api.Positions.PositionChangedEventArgs public int RunCatTrail(EventArgs e) { //var account = gfClient.Accounts.Get().FirstOrDefault(); //Should be inside loop ? Called inside loop? //var positions = GetOpenPositions(account, e); //Just in case we need more detail / Safety... int ret = 0; foreach (var pos in e.AsArray()) { ret = check_ts_cs(pos); switch (ret) { case 0: break; case -1: Console.WriteLine($"CatStop Triggered -- Exiting position in {e.ContractPosition.Contract.Symbol}"); break; case 1: Console.WriteLine($"TrailStop Triggered -- Exiting position in {e.ContractPosition.Contract.Symbol}"); break; default: Console.WriteLine($"Error -- Please check position in {e.ContractPosition.Contract.Symbol}"); break; } if (ret != 0) { var qty = Math.Abs(e.ContractPosition.Net.Volume); if (e.ContractPosition.Net.Volume < 0) { PlaceOrder(gfClient, e.ContractPosition.Contract.ElectronicContract, OrderSide.BuyToCover, qty); //ExitPosition(e.ContractPosition.position, ) // ^^ Requires IPosition position argument.. not present here! Doesnt make sense HOW called in MainForm.cs? WHERE is lbPositoin / IPosition passed? //Alternate Option... //Go_Flat(e); Console.WriteLine("SX order sent."); } else if (e.ContractPosition.Net.Volume > 0) { PlaceOrder(gfClient, e.ContractPosition.Contract.ElectronicContract, OrderSide.Sell, qty); Console.WriteLine("LX order sent."); } else //Alternate Block -- could replace ^^ with JUST this. { Console.WriteLine("Backup Exit order sent -- Flat."); Go_Flat(e); //OR //ExitPosition_Alt(e.ContractPosition.Contract.ElectronicContract, orderProcessor, e); } } } return(ret); }