Snippets

GainFuturesDev Example of margins calculation

Created by Vitaliy Pfau last modified
using System;
using System.Linq;
using GF.Api;
using GF.Api.Connection;
using GF.Api.Margin.Calculation;

namespace TestMarginRequest
{
    internal class Program
    {
        private const string Symbol = "NKDZ22";
        private const string Account = "replace_with_correct_value";

        private const string UserName = "replace_with_correct_value";
        private const string Password = "replace_with_correct_value";
        
        public static void Main(string[] args)
        {
            var client = GF.Api.Impl.GFApi.CreateClient();

            var runner = new GF.Api.Threading.GFClientRunner(client);
            runner.Start();

            client.Connection.Aggregate.LoginCompleted += (gfClient, eventArgs) =>
            {
                Console.WriteLine("Login Completed");
                gfClient.Contracts.Lookup.BySymbol(Symbol);
            };
            
            client.Contracts.Lookup.SymbolLookupReceived += (gfClient, eventArgs) =>
            {
                var accountID = gfClient.Accounts.Get(Account).ID;
                var contractID = eventArgs.Contracts.First().ID;
                
                var position = new HypoPosition(contractID, 1, 1);
                var order = new HypoOrder(contractID, GF.Api.Values.Orders.OrderSide.Buy, 1);
                
                var request = new MarginCalculationRequest(
                    accountID,
                    new[]{ position },
                    new[]{ order });
                
                string validation = client.Margin.ValidateMarginCalculationRequest(request);
                if (string.IsNullOrEmpty(validation))
                    client.Margin.RequestMarginCalculation(request);
                else
                    Console.WriteLine($"Margin request is not valid: {validation}");
            };
            client.Margin.MarginCalculationCompleted += (gfClient, eventArgs) =>
            {
                Console.WriteLine("Margin request completed");
                Console.WriteLine($"Initial: {eventArgs.Result.InitialMarginRequirements}");
                Console.WriteLine($"Maintenance: {eventArgs.Result.MaintenanceMarginRequirements}");
            };
            client.Traders.TraderError += (gfClient, eventArgs) =>
            {
                Console.WriteLine($"TraderApi error occurred: {eventArgs.Message}");
            };

            Console.WriteLine("Connecting...");

            client.Connection.Aggregate.Connect(
                new GF.Api.Connection.ConnectionContextBuilder()
                    .WithUserName(UserName)
                    .WithPassword(Password)
                    .WithPort(9210)
                    .WithHost("api.gainfutures.com")
                    .WithUUID("9e61a8bc-0a31-4542-ad85-33ebab0e4e86")
                    .WithForceLogin(true)
                    .Build());

            Console.WriteLine("Press any key to exit");
            Console.ReadKey();

            runner.Stop();
        }
    }
}

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.