Crear Orden de Entrada Fluctuante (O2GO, CS)

From FxCodeBaseWiki
Jump to: navigation, search

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