using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NiApiLib;

namespace StopLoss
{
    class Program
    {
        static void Main(string[] args)
        {
            Connection c = new Connection();
            c.connect();
            Console.ReadLine();
        }
    }

    class Connection
    {
        NiApiLib.SrvrSession Session = new NiApiLib.SrvrSessionClass();
        NiApiLib.Table Tbl = new NiApiLib.TableClass();
        NiApiLib.DataRow Row = new NiApiLib.DataRowClass();
        public void connect()
        {
            Session.HostAddr = "nidemo.mfd.ru";
            Session.HostPort = 2900;
            Session.Name = "AFedin";
            Session.Password = "12345";
            Session.CatalogName = "catalog.name";
            Session.OnLogin+=new _ISrvrSessionEvents_OnLoginEventHandler(Session_OnLogin);
            Tbl.OnInsert += new _ITableEvents_OnInsertEventHandler(Tbl_OnInsert);
            Tbl.OnModify += new _ITableEvents_OnModifyEventHandler(Tbl_OnModify);
            Session.Connect();
        }

        void Tbl_OnModify(object NiDataRow, string TableName)
        {
            Console.WriteLine("Modify Stoploss");
        }

        void Tbl_OnInsert(object NiDataRow, string TableName)
        {
            Console.WriteLine("Insert Stoploss");
        }
        public void Session_OnLogin(int LoginResult)
        {
            if (LoginResult == 0)
            {
                Console.WriteLine("[System] Online");
                Tbl.Open(Session, "STOPLOSS", ETableType.tabAdrr);
                Tbl.SetOnlineUpdates(ESubscribtion.subEnabled);
                Row.Structure = Tbl.Structure;
                
                
                //object CLIENT_NAME="I_CLIENT_NAME";
                //Row.set_Item(ref CLIENT_NAME, "88212"); //  Код клиента
                object SHORTNAME="I_SHORTNAME";
		Row.set_Item(ref SHORTNAME,"+МосЭнерго"); // Инструмент 
		object DIRECTION="I_DIRECTION";
                Row.set_Item(ref DIRECTION,"3"); // Выставление на: 3-покупка, 4-продажа
                object PRICE="I_PRICE";
                Row.set_Item(ref PRICE,"3.30"); // Цена
                object PRICESIZE="I_PRICESIZE";
		Row.set_Item(ref PRICESIZE,"1"); // Количество
		object NAME="I_NAME";
		Row.set_Item(ref NAME,"MSNG"); // Тикер
		object MARKET_LEVEL="I_MARKET_LEVEL";
                Row.set_Item(ref MARKET_LEVEL, "3.30"); // Уровень рынка для стоп-лосса
                object BROKERREF="I_BROKERREF";
                Row.set_Item(ref BROKERREF, "te/"); // Идентификатор
                //object ALERT_LEVEL="I_ALERT_LEVEL";
                //Row.set_Item(ref ALERT_LEVEL,"32"); // Уровень рынка для алерта
                //object ORDER_EXECUTION_TERM="I_ORDER_EXECUTION_TERM";
		//Row.set_Item(ref ORDER_EXECUTION_TERM,"107");  // Условие: 48- уровню рынка, 49 - При нарушении предельного уровня маржи, 107 - при нарушении заданого уровня маржи.
                object SYSTEM="I_SYSTEM";
		Row.set_Item(ref SYSTEM,"1"); // 1 - Стоп-лосс / 2 - алерт 
		object SROK="I_SROK";
                Row.set_Item(ref SROK,"11.06.2010"); // Использовать до....
		object ACCOUNT="I_ACCOUNT";
                Row.set_Item(ref ACCOUNT,"S01-00000F00"); // Счет
		object USE_MARGIN ="I_USE_MARGIN";
		Row.set_Item(ref USE_MARGIN,"118");  // Использовать маржу: 118 - да, 119- нет
                object TRADEBOARD1 = "TRADEBOARD"; 
                Row.set_Item(ref TRADEBOARD1,"EQBR");// Рынок
                object ORDER_TRADEBOARD="I_ORDER_TRADEBOARD";
                Row.set_Item(ref ORDER_TRADEBOARD,"EQBR");// Рынок заявки
                //object ORDER_SHORTNAME="I_ORDER_SHORTNAME";
		//Row.set_Item(ref ORDER_SHORTNAME,"+МосЭнерго"); // выставить по инструменту
		object ORDER_NAME="I_ORDER_NAME";
                Row.set_Item(ref ORDER_NAME, "MSNG"); // выставить по тикеру
                //object STOPKIND="I_STOPKIND";
		//Row.set_Item(ref STOPKIND,"135");  // Выставить заявку: 135 - пустую, 136- по позиции
                //object CANCELFLAG="I_CANCELFLAG";
                //Row.set_Item(ref CANCELFLAG,"138"); //137 снимать при закрытии, 138 - оставлять при закрытии
                Tbl.Insert(Row);
                Console.WriteLine("[System] Стоп-лосс выставлен");
            }
            else
            {
                Console.WriteLine("[System] Offline");
            }

        }

    }
}
