Snippets
Created by
Vitaliy Pfau
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | using System;
using GF.Api.Connection;
using GF.Api.Contracts.Criteria;
using GF.Api.Contracts.Load.Expression;
using GF.Api.Contracts.Load.Request;
using GF.Api.Contracts.Lookup.Request;
using GF.Api.Impl;
using GF.Api.Threading;
namespace GFApiPagedOptionsLookup
{
class Program
{
private const string Symbol = "ESZ20";
private const int MaxPageSize = 1000; //Load request does not allow more than this
private const int PageSize = MaxPageSize;
private const string UserName = "";
private const string Password = "";
private SymbolLookupRequestID _symbolLookupRequestID;
private IContractLoadExpression _loadContractExpression;
private int _loadRequestCounter;
private ContractLoadRequestID _loadRequestID;
static void Main(string[] args)
{
new Program().Run();
}
private void Run()
{
var client = GFApi.CreateClient();
var runner = new GFClientRunner(client);
runner.Start();
Console.WriteLine("Connecting...");
client.Connection.Aggregate.LoginFailed += Aggregate_LoginFailed;
client.Connection.Aggregate.LoginCompleted += Aggregate_LoginCompleted;
client.Contracts.Lookup.SymbolLookupReceived += Lookup_SymbolLookupReceived;
client.Contracts.Load.ContractLoadReceived += Load_ContractLoadReceived;
client.Connection.Aggregate.Connect(
new 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.WriteLine();
Console.ReadKey();
runner.Stop();
}
private void Aggregate_LoginCompleted(GF.Api.IGFClient client, LoginCompleteEventArgs e)
{
Console.WriteLine("Connected");
Console.WriteLine($"Request symbol {Symbol}");
Console.WriteLine();
_symbolLookupRequestID = client.Contracts.Lookup.BySymbol(Symbol);
}
private static void Aggregate_LoginFailed(GF.Api.IGFClient client, LoginFailedEventArgs e) =>
Console.WriteLine($"Login failed: {e.FailReason}");
private void Lookup_SymbolLookupReceived(GF.Api.IGFClient client, GF.Api.Contracts.Lookup.SymbolLookupEventArgs e)
{
if (e.RequestID != _symbolLookupRequestID)
return;
if (e.Contracts.Count > 1)
{
Console.WriteLine($"Looking up contract {Symbol} returns multiple results");
return;
}
if (e.Contracts.Count < 1)
{
Console.WriteLine($"Looking up contract {Symbol} returns no results");
return;
}
var contract = e.Contracts[0];
Console.WriteLine($"Lookup result received for {Symbol}");
Console.WriteLine($"HasOptions: {contract.HasOptions}");
if (contract.HasOptions)
{
Console.WriteLine($"Requesting first {PageSize} options available for {Symbol}");
_loadContractExpression = new ContractLoadExpressionBuilder()
.Push(new ParentContractIDCriterion(contract.ID))
.Build();
var request = new ContractLoadRequestBuilder()
.WithSkipCount(0)
.WithResultCount(PageSize)
.WithExpression(_loadContractExpression)
.Build();
_loadRequestID = client.Contracts.Load.Request(request);
}
else
Console.WriteLine($"{Symbol} has no options");
}
private void Load_ContractLoadReceived(GF.Api.IGFClient client, GF.Api.Contracts.Load.ContractLoadResponseEventArgs e)
{
if (_loadRequestID != e.RequestID)
return;
Console.WriteLine($"{e.Contracts.Count} options received");
Console.WriteLine("Options:");
foreach (var contract in e.Contracts)
Console.WriteLine($"\t{contract.Symbol}");
if (e.Contracts.Count >= PageSize)
{
_loadRequestCounter++;
Console.WriteLine($"Requesting next {PageSize} options available for {Symbol}. Page# {_loadRequestCounter}");
var request = new ContractLoadRequestBuilder()
.WithSkipCount(PageSize * _loadRequestCounter)
.WithResultCount(PageSize)
.WithExpression(_loadContractExpression)
.Build();
_loadRequestID = client.Contracts.Load.Request(request);
}
else
Console.WriteLine("Done.");
}
}
}
|
Comments (0)
You can clone a snippet to your computer for local editing. Learn more.