Beispiel #1
0
        //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);
        }