Crear Orden de Entrada Fluctuante (O2GO, CS)
From FxCodeBaseWiki
(Redirected from Create Trailing Entry Order (O2GO, CS)/es)
El ejemplo muestra cómo crear una órdenes de Stop Entrada Fluctuante/Límite Entrada Fluctuante (STE/LTE). En este ejemplo dos órdenes son crear utilizando el método CreateEntryOrder3. El segundo es LTE, es creado utilizano el método CreateFixOrder3. Los dos métodos CreateEntryOrder3 y CreateFixOrder3 puede utilizarse crear cualquiera órdenes STE o LTE, se utilizan métodos diferentes para mostrar los maneras posible.
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace Sample.STE_LTE
{
class Program
{
static FXCore.CoreAut mCore;
static FXCore.TradeDeskAut mDesk;
static void Main(string[] args)
{
try
{
if (args.Length < 2)
{
Console.WriteLine("usage: sample.STE_LTE.exe user password [url] [connection]");
return;
}
string user = args[0];
string pwd = args[1];
string url = (args.Length > 2) ? args[2] : "http://www.fxcorporate.com";
string connection = (args.Length > 3) ? args[3] : "Demo";
//create o2go object and login
mCore = new FXCore.CoreAut();
mDesk = (FXCore.TradeDeskAut)mCore.CreateTradeDesk("trader");
FXCore.TradingSettingsProviderAut tradingSettings = (FXCore.TradingSettingsProviderAut)mDesk.TradingSettingsProvider;
FXCore.PermissionCheckerAut permissionsChecker = (FXCore.PermissionCheckerAut)mDesk.PermissionChecker;
mDesk.Login(user, pwd, url, connection);
//collect all required information
FXCore.TableAut acct = (FXCore.TableAut)mDesk.FindMainTable("accounts");
FXCore.TableAut offer = (FXCore.TableAut)mDesk.FindMainTable("offers");
string instrument = (string)offer.CellValue(1, "Instrument");
string account_id = (string)acct.CellValue(1, "AccountID");
int amount = tradingSettings.GetMinQuantity(instrument, account_id);
double ask = (double)offer.CellValue(1, "Ask");
double bid = (double)offer.CellValue(1, "Bid");
double ptsize = (double)offer.CellValue(1, "PointSize");
int trailMinMove = 0;//no trailing
object order_id_STE, order_id_LTE, di;
//create a STE order
//1. check whether STE orders are supported
bool dynamicSTEAllow = (permissionsChecker.CanUseDynamicTrailingForEntryStop() == permissionsChecker.PERMISSION_ENABLED);
bool fluctuateSTEAllow = (permissionsChecker.CanUseFluctuateTrailingForEntryStop() == permissionsChecker.PERMISSION_ENABLED);
if (!dynamicSTEAllow && !fluctuateSTEAllow)
Console.WriteLine("STE orders are not supported");
else
{
Console.WriteLine("STE orders are supported.");
//2. select trailing step
if (dynamicSTEAllow && fluctuateSTEAllow)
{
Console.WriteLine("Both dynamic and fluctuate trailing are supported.");
Console.WriteLine("Create STE order with dynamic trailing.");
trailMinMove = 1;
}
else if (dynamicSTEAllow)
{
Console.WriteLine("Only dynamic trailing is supported.");
Console.WriteLine("Create STE order with dynamic trailing.");
trailMinMove = 1;
}
else
{
Console.WriteLine("Only fluctuate trailing is supported.");
Console.WriteLine("Create STE order with fluctuate trailing.");
trailMinMove = tradingSettings.GetMinTrailingStepForEntryStop();
}
//3. create a STE order
mDesk.CreateEntryOrder3(account_id, instrument, false, amount, bid - ptsize * 100, trailMinMove, mDesk.SL_NONE, 0, 0, 0, 0, out order_id_STE, out di);
Console.WriteLine("The STE order is {0}", order_id_STE);
//4. waits until the order appears in the Orders table
WaitOrder((string)order_id_STE);
FXCore.RowAut rowOrder = (FXCore.RowAut)mDesk.FindRowInTable("orders", "OrderID", (string)order_id_STE);
Console.WriteLine("Trailing value for the {0} is {1}.", order_id_STE, rowOrder.CellValue("TrlMinMove"));
}
//create a LTE order
//1. check whether LTE orders are supported
bool dynamicLTEAllow = (permissionsChecker.CanUseDynamicTrailingForEntryLimit() == permissionsChecker.PERMISSION_ENABLED);
bool fluctuateLTEAllow = (permissionsChecker.CanUseFluctuateTrailingForEntryLimit() == permissionsChecker.PERMISSION_ENABLED);
if (!dynamicLTEAllow && !fluctuateLTEAllow)
Console.WriteLine("\nLTE orders are not supported");
else
{
Console.WriteLine("\nLTE orders are supported.");
//2. select trailing step
if (dynamicLTEAllow && fluctuateLTEAllow)
{
Console.WriteLine("Both dynamic and fluctuate trailing are supported.");
Console.WriteLine("Create LTE order with dynamic trailing.");
trailMinMove = 1;
}
else if (dynamicLTEAllow)
{
Console.WriteLine("Only dynamic trailing is supported.");
Console.WriteLine("Create LTE order with dynamic trailing.");
trailMinMove = 1;
}
else
{
Console.WriteLine("Only fluctuate trailing is supported.");
Console.WriteLine("Create LTE order with fluctuate trailing.");
trailMinMove = tradingSettings.GetMinTrailingStepForEntryLimit();
}
//3. create a LTE order
mDesk.CreateFixOrder3(mDesk.FIX_ENTRYLIMIT, null, ask + ptsize * 100, 0, null, account_id, instrument, false, amount, null, mDesk.SL_NONE, trailMinMove, mDesk.TIF_GTC, out order_id_LTE, out di);
Console.WriteLine("The LTE order is {0}", order_id_LTE);
//4. waits until the order appears in the Orders table
WaitOrder((string)order_id_LTE);
FXCore.RowAut rowOrder = (FXCore.RowAut)mDesk.FindRowInTable("orders", "OrderID", (string)order_id_LTE);
Console.WriteLine("Trailing value for the {0} is {1}.", order_id_LTE, rowOrder.CellValue("TrlMinMove"));
}
}
catch (Exception e)
{
Console.WriteLine("{0}", e.ToString());
}
//finalizing
mDesk.Logout();
}
/// <summary>
/// Waits until the order appears in the Orders table.
/// </summary>
static bool WaitOrder(string order_id)
{
long start_time = DateTime.Now.Ticks;
FXCore.TableAut orders = (FXCore.TableAut)mDesk.FindMainTable("orders");
bool found = false;
while (!found)
{
if ((DateTime.Now.Ticks - start_time) > 50000000)
{
Console.WriteLine("5 second timeout to wait for the order exceeded");
return false;
}
try
{
FXCore.RowAut row = (FXCore.RowAut)orders.FindRow("OrderID", (string)order_id, 0);
found = true;
}
catch (Exception)
{
//the trade is not found
Thread.Sleep(250);
}
}
return true;
}
}
}
Este Artículo en Otros Idiomas
Language: | English • español |
---|