Create ELS Order(O2GO, CS)
From FxCodeBaseWiki
The example shows how to create an ELS order with an entry order as a primary order.
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
class SampleTradeOpener
{
/*
* This class does a simple operation of getting some info from Accounts table and Offers table and using that
* data creates an Entry Order with Entry Stop (ELS).
*/
static FXCore.CoreAut fxCore;
static FXCore.TradeDeskAut tradeDesk;
static string username;
static string password;
static string connection = "Demo";
static string url = "www.fxcorporate.com";
public static void Main(string[] args)
{
if(args.Length < 2)
{
Console.WriteLine("USAGE: [application].exe [username] [password]");
return;
}
username = args[0];
password = args[1];
#region Initialize
//--------------------------------------------------------------------------------
// Create FXCore and TradeDesk
//--------------------------------------------------------------------------------
Console.WriteLine("Creating objects....");
fxCore = new FXCore.CoreAut();
tradeDesk = (FXCore.TradeDeskAut)fxCore.CreateTradeDesk("trader");
// Set an extended row filter to include stop orders into the orders table
tradeDesk.SetRowsFilterType(tradeDesk.ROWSFILTER_EXTENDED);
Console.WriteLine("Objects created.");
#endregion
#region Login
//--------------------------------------------------------------------------------
// Login process
//--------------------------------------------------------------------------------
Console.WriteLine("Logging into the trading desk...");
tradeDesk.Login(username, password, url, connection);
Console.WriteLine("Logged in.");
#endregion
#region Get all needed data
//--------------------------------------------------------------------------------
// Get information about an offer
//--------------------------------------------------------------------------------
Console.WriteLine("Getting object reference to table 'Offers' and getting Instrument, Ask, and QuoteID for ANY first available instrument...");
FXCore.TableAut offers = (FXCore.TableAut)tradeDesk.FindMainTable("offers");
string inst = (string)offers.CellValue(1, "Instrument");
double rate = (double)offers.CellValue(1, "Ask");
double pointSize = (double)offers.CellValue(1, "PointSize");
Console.WriteLine("Got the table. Instrument: {0}, Ask Rate: {1}.", inst, rate);
//--------------------------------------------------------------------------------
// Get information about an account
//--------------------------------------------------------------------------------
Console.WriteLine("Getting object reference to table 'Accounts' and getting AccountID and Minimal Lot Size.....");
FXCore.TableAut accounts = (FXCore.TableAut)tradeDesk.FindMainTable("accounts");
string accountId = (string)accounts.CellValue(1, "AccountID");
FXCore.TradingSettingsProviderAut settingsProvider = (FXCore.TradingSettingsProviderAut)tradeDesk.TradingSettingsProvider;
int minAmount = settingsProvider.GetBaseUnitSize(inst, accountId);
Console.WriteLine("Got the table. AccountID: {0}, Lot Size: {1}.", accountId, minAmount);
#endregion
#region Create Entry Order
//--------------------------------------------------------------------------------
// Create an entry order with an entry stop
//--------------------------------------------------------------------------------
object result;
Console.WriteLine("Creating a buy entry order using our variables...");
tradeDesk.CreateEntryOrderELS(accountId, inst, true, minAmount, rate + pointSize * 50, 0, tradeDesk.SL_STOP,
rate - pointSize * 10, 0, 0, 0, tradeDesk.TIF_GTC, out result);
//--------------------------------------------------------------------------------
// Print results
//--------------------------------------------------------------------------------
FXCore.OrdersBatchResultEnumAut batchResult = (FXCore.OrdersBatchResultEnumAut)result;
FXCore.TableAut orders = (FXCore.TableAut)tradeDesk.FindMainTable("orders");
for (int i = 0; i < batchResult.Count; i++)
{
FXCore.OrderBatchResultAut orderResult = (FXCore.OrderBatchResultAut)batchResult.Item(i + 1);
if (orderResult.Success)
{
FXCore.RowAut orderRow = FindOrderRow(orders, orderResult.OrderID, 10000);
if (orderRow == null)
// already executed/deleted/didn't received yet
continue;
string contingencyType = GetContingencyTypeDescription((int)orderRow.CellValue("ContingencyType"));
Console.WriteLine(" Order has been Created ({0}, {2}). OrderID is: {1}",
(string)orderRow.CellValue("Type"),
orderResult.OrderID,
contingencyType);
}
else
Console.WriteLine("Failed to create an order");
}
#endregion
#region Logout
//--------------------------------------------------------------------------------
// Logout
//--------------------------------------------------------------------------------
Console.WriteLine("Logging out.....");
tradeDesk.Logout();
Console.WriteLine("Logged out.");
#endregion
}
/// <summary>
/// Gets description for a contingency type.
/// </summary>
/// <param name="contingencyType">Contingency type</param>
/// <returns>Description of the given contingency type.</returns>
private static string GetContingencyTypeDescription(int contingencyType)
{
switch (contingencyType)
{
case 0:
return "Entry order";
case 1:
return "OCO order";
case 2:
return "OTO order";
case 3:
return "ELS order";
}
return "Unknown order";
}
/// <summary>
/// Wait for order ID addition in the table and returns order row. May return null (in case of timeout).
/// </summary>
/// <param name="orders">Orders table</param>
/// <param name="orderId">Order ID of the order to find</param>
/// <param name="timeout">Timeout in milliseconds</param>
/// <returns>Order row or null.</returns>
static FXCore.RowAut FindOrderRow(FXCore.TableAut orders, string orderId, int timeout)
{
DateTime start = DateTime.Now;
TimeSpan timeSpan;
do
{
try
{
FXCore.RowAut row = (FXCore.RowAut)orders.FindRow("OrderID", orderId, 0);
return row;
}
catch
{
}
Thread.Sleep(100);
timeSpan = start - DateTime.Now;
} while (timeSpan.Milliseconds < timeout);
return null;
}
}
This Article in Other Languages
Language: | English • español |
---|