using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace twsclassic //twsclassic.Window1.this1 //twsclassic.PortfolioName.AccountSeria
{
using System;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Threading;
//using Client;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;
using Ecng.Collections;
using Ecng.Common;
using Ecng.Serialization;
using Ecng.Xaml;
using Ecng.Configuration;
using StockSharp.Algo;
using StockSharp.Algo.Candles;
using StockSharp.Algo.Testing;
using StockSharp.BusinessEntities;
using StockSharp.Configuration;
using StockSharp.Localization;
using StockSharp.Logging;
using StockSharp.Messages;
using StockSharp.Xaml;
using StockSharp.Xaml.Charting;
using Newtonsoft.Json;
/// <summary>
/// Логика взаимодействия для SettingStock.xaml
/// </summary>
public partial class SettingStock : Window //: W
{
public SettingStock()
{
InitializeComponent();
ClientVisual.UpdateGraf.Tics += UpdateGraf_Tics;
}
string TCH(string ti)
{
if (ti.Length == 1) return "0" + ti;
return ti;
}
string FRECH(string ti)
{
if (ti.Length == 1) return "00" + ti;
if (ti.Length == 2) return "0" + ti;
return ti;
}
private void UpdateGraf_Tics(object sender, ClientVisual.Send_UpdateGraf e)
{
if (e.text == null) return;
if (e.text == "") return;
try
{
CORPLLC. LogTableA1BBx LogTableA1BBx = new CORPLLC. LogTableA1BBx();
try
{
LogTableA1BBx.Message1 = e.text;
}
catch { }
try
{
LogTableA1BBx.Time1 = e.stopwatch.ToString();
}
catch { }
try
{
// LogTable. LogTableA1BBx1.Add(LogTableA1BBx);
// LogsText.Content += LogTableA1BBx.Time1 + " " + LogTableA1BBx.Message1 + Environment.NewLine;
}
catch { }
}
catch { }
this.Dispatcher.BeginInvoke((Action)(() =>
{
// LogTableA1BB.ItemsSource = LogTable.LogTableA1BBx1;
// LogTableA1BB.Items.Refresh();
}));
try
{
this.Dispatcher.BeginInvoke((Action)(() =>
{
//string ee = e.text.ToString();
// System.Diagnostics.Stopwatch stopwatch = System.Diagnostics.Stopwatch.StartNew();
// var timetick2 = e.stopwatch.Elapsed;// - stopwatch.Elapsed;
//Console.WriteLine("stream " + number + " " + " ms=" + (timetick2).ToString() + " ");
DateTime localDate = e.stopwatch;
string timesdroop = TCH(localDate.Hour.ToString()) + ":" + TCH(localDate.Minute.ToString()) + ":" + TCH(localDate.Second.ToString()) + "." + FRECH(localDate.Millisecond.ToString());
LogsText.Text = timesdroop + " " + e.text/*.ToUpper()*/ + Environment.NewLine + LogsText.Text;
// totalMessage = 0;
int len = LogsText.Text.ToString().Length;
if (len > 5000)
{
try
{
double len_i = len;
len_i /= 2;
string copu = LogsText.Text.ToString();
string new_ = copu.Substring(0, (int)len_i);
int need = len - (int)len_i;
string save = copu.Substring((int)len_i, need);
int tle1 = new_.Length;
int tle2 = save.Length;
try
{
System.IO.File.AppendAllText("logs/logs" + localDate.Year.ToString() + "-" + localDate.Month.ToString() + "-" + localDate.Day.ToString() + ".txt", save);
}
catch
{
try
{
System.IO.File.WriteAllText("logs/logs" + localDate.Year.ToString() + "-" + localDate.Month.ToString() + "-" + localDate.Day.ToString() + ".txt", save);
}
catch
{
}
}
LogsText.Text = new_;// copu;
}
catch
{
}
/*try
{
System.IO.File.AppendAllText ("logs/logs" + localDate.Year.ToString() +"-"+ localDate .Month.ToString() + "-" + localDate.Day.ToString()+ ".txt", textBox9.Text);
}
catch
{
try
{
System.IO.File.WriteAllText ("logs/logs" + localDate.Year.ToString() + "-" + localDate.Month.ToString() + "-" + localDate.Day.ToString() + ".txt", textBox9.Text);
}
catch { }
}
textBox9.Text = "";*/
}
}));
}
catch
{
}
//next
/* for (int i = 0; i < SendTableForm.Total; i++)
{
string[] text = SendTableForm.SentTextTable[i].Split(new Char[] { ',' });
if (text.Length > 5)
{
string bid_slow = "0";
string bid_fast = "0";
string spread = "0";
if (SendTableForm.symb[i] != null)
coletable.OPEN(SendTableForm.symb[i], ref bid_slow, ref bid_fast, ref spread);
if (ClientVisual.coleccOrderTable.open(SendTableForm.symb[i]))
{
if (Close_Time.TIME() < 5000)
row1[4] = " wait ";
else
row1[4] =
" X ";
}
else
{
row1[4] = " - ";
}
Table_1 Table_1 = new Table_1();
Table_1.Symbol = SendTableForm.symb[i];
Table_1.Slow = bid_slow;
Table_1.Fast = bid_fast;
Table_1.Spread = spread;
this.Dispatcher.BeginInvoke((Action)(() =>
{
dataGridView1.ItemsSource = Table_1XXX;
dataGridView1.Items.Refresh();
}));
for (int z = 0; z < 5; z++)
{
}
for (int z = 0; z < 1; z++)
{
}
}
} */
// throw new NotImplementedException();
}
// private const string _settingsFile = "c://temp/connection.xml";
/// <summary>
/// иницилизация логирования
/// </summary>
///
bool start1 = false;
public void OnInits()
{
if ( start1) return;
start1 = true;
CORPLLC .Trade1._realConnector = _realConnector;
if (CORPLLC .Window1.this1 == null)
{
ClientVisual.UpdateGraf.SendUpdate(DateTime.Now, "error Window1 this null ", 1, 1, 1, "");
return;
}
if (CORPLLC .Window1.this1 == null)
{
ClientVisual.UpdateGraf.SendUpdate(DateTime.Now, "error PortfolioName AccountSeria null ", 1, 1, 1, "");
return;
}
// twsclassic.Window1.this1 = this1x;
_logManager.Listeners.Add(new GuiLogListener(Log));
_logManager.Sources.Add(_realConnector);
try
{
//загружает коннект логин пароль. например если выключали программу
if (File.Exists(CORPLLC . FileSettingStock._settingsFile))
{
_realConnector.Load(new XmlSerializer<SettingsStorage>().Deserialize(CORPLLC . FileSettingStock._settingsFile));
}
}
catch
{
}
}
private readonly LogManager _logManager = new LogManager();
Connector _realConnector = new Connector();
/// <summary>
/// пользователь вводит нужный фид
/// </summary>
// System.Windows. Windows this1;
void setting()
{
if (!_realConnector.Configure(CORPLLC . Window1.this1))
return;
new XmlSerializer<SettingsStorage>().Serialize(_realConnector.Save(), CORPLLC . FileSettingStock._settingsFile);
}
private Security _security;
private void SecurityPicker_OnSecuritySelected(Security security)
{
if (security == null)
return;
_security = security;
string path = System.IO.Directory.GetCurrentDirectory();//
// Directory.CreateDirectory(path + "\\" + );
OpenFileDialog openFileDialog1 = new OpenFileDialog();
string put = _security.Class + " " + _security.Code;
put = put.Replace("#", "").Replace(" ", "").Replace(".", "");
string put2 = path + "\\" + Client.defaults.mysettinstrument + "\\" + put /*+ " " + _security.Code*/ ;
string save_secyrity = JsonConvert.SerializeObject(_security);
System.IO.File.WriteAllText(put2 + ".txt", save_secyrity);
//подписываемся под котировки
_realConnector.SubscribeMarketDepth(security);
_realConnector.SubscribeTrades(security);
_realConnector.SubscribeLevel1(security);
// OpenBuy(security);
// OpenSell();
}
//закрытие ордера
private void OrderGrid_OnOrderCanceling(Order order)
{
_realConnector.CancelOrder(order);
}
//регистрация нвоого орддера до откртия
private void OrderGrid_OrderRegistering()
{
var pfDataSource = new PortfolioDataSource();
pfDataSource.AddRange(_realConnector.Portfolios);
var newOrder = new OrderWindow
{
Order = new Order { Security = _security },
SecurityProvider = _realConnector,
MarketDataProvider = _realConnector,
Portfolios = pfDataSource,
};
if (newOrder.ShowModal(CORPLLC . Window1.this1))
{
var order = newOrder.Order;
_realConnector.RegisterOrder(order);
}
}
//регистрация нвоого орддера, после открытия
private void OrderGrid_OnOrderReRegistering(Order order)
{
var pfDataSource = new PortfolioDataSource();
pfDataSource.Add(order.Portfolio);
var window = new OrderWindow
{
Title = LocalizedStrings.Str2976Params.Put(order.TransactionId),
SecurityProvider = _realConnector,
MarketDataProvider = _realConnector,
Portfolios = pfDataSource,
Order = order.ReRegisterClone(newVolume: order.Balance)
};
if (window.ShowModal(CORPLLC . Window1.this1))
{
_realConnector.ReRegisterOrder(order, window.Order);
}
}
bool connec_old = false;
void connect()
{
if (connec_old == true) return;
connec_old = false;
OnInits();
try
{
//загружает коннект логин пароль. например если выключали программу
if (File.Exists(CORPLLC . FileSettingStock._settingsFile))
{
_realConnector.Load(new XmlSerializer<SettingsStorage>().Deserialize(CORPLLC . FileSettingStock._settingsFile));
}
}
catch
{
}
if (_realConnector != null)
{
_logManager.Sources.Remove(_realConnector);
}
_logManager.Sources.Add(_realConnector);
//подписывается на кал баки
InitLive();
try
{
//привяжем список доступных символов к таблице
SecurityPicker.SecurityProvider = new FilterableSecurityProvider(_realConnector);
}
catch { }
//конектимся
_realConnector.Connect();
CORPLLC . Trade1._realConnector = _realConnector;
Find.IsEnabled = true;
}
void InitLive()
{
//в таблицу добавляет новые ордера
_realConnector.NewOrder += OrderGrid.Orders.Add;
//в тут я сам добавляю ордер в свою коллекцию
_realConnector.NewOrder += _realConnector_NewOrder;
//новые котировки
_realConnector.OrderBookReceived += OnDepth;
//ошибки октрытия
_realConnector.MassOrderCancelFailed += (transId, error) =>
CORPLLC . Window1.this1.GuiAsync(() => System.Windows.MessageBox.Show(CORPLLC . Window1.this1, error.ToString(), LocalizedStrings.Str716));
} //поиск символов
private void FindClick(object sender, RoutedEventArgs e)
{
var wnd = new SecurityLookupWindow
{
ShowAllOption = _realConnector.MarketDataAdapter.IsSupportSecuritiesLookupAll(),
Criteria = new Security
{
Code = "USD",
Currency = StockSharp.Messages.CurrencyTypes.USD,
UnderlyingSecurityType = StockSharp.Messages.SecurityTypes.Currency
}
};
if (!wnd.ShowModal(CORPLLC . Window1.this1))
return;
_realConnector.LookupSecurities(wnd.CriteriaMessage);
}
void OpenSell(Security SecurityExp)
{
}
void OpenBuy(Security SecurityExp)
{
}
//новые котировки
private void OnDepth(Subscription subscription, QuoteChangeMessage depth)
{
StockSharp.Messages.QuoteChange[] askM = depth.Asks;
decimal ask1 = askM[0].Price;
StockSharp.Messages.QuoteChange[] bidM = depth.Bids;
decimal bid1 = bidM[0].Price;
double ask = Convert.ToDouble(ask1);
double bid = Convert.ToDouble(bid1);
for (int i = 0; i < Client.SendTableForm.Total; i++)
{
if (ClientVisual.savelogic.alltrader.trader[Client.SendTableForm.symb[i]].Security != null)
{
if (ClientVisual.savelogic.alltrader.trader[Client.SendTableForm.symb[i]].Security.Code == depth.SecurityId.SecurityCode)
{
FinMyAndCreate(Client.SendTableForm.symb[i]);
string ff = Client.SendTableForm.symb[i];
ff = ff.Replace("/", "");
FinMyAndCreate(ff);
IBApi.global.prices[Client.SendTableForm.symb[i]].ask = ask;
IBApi.global.prices[Client.SendTableForm.symb[i]].bid = bid;
IBApi.global.prices[ff].ask = ask;
IBApi.global.prices[ff].bid = bid;
}
}
}
}
void FinMyAndCreate(string symb)
{
bool seache = false;
foreach (KeyValuePair<string, IBApi.price> kvp in IBApi.global.prices)
{
if (symb == kvp.Key)
seache = true;
}
if (!seache)
{
IBApi.price price1 = new IBApi.price();
IBApi.global.prices.Add(symb, price1);
}
}
//orders
Order copy = null;
List<CORPLLC . OrderMy> list_order_open = new List<CORPLLC.OrderMy>();
List<CORPLLC.OrderMy> itog_orders = new List<CORPLLC.OrderMy>();
private void _realConnector_NewOrder(Order obj)
{
{
CORPLLC. OrderMy OrderMy = new CORPLLC. OrderMy();
OrderMy.obj = obj;
OrderMy.Direction = obj.Direction;
OrderMy.Volume = Convert.ToDouble(obj.Volume);
OrderMy.Security = obj.Security;
CORPLLC. Trade1.priceclose.Add(OrderMy);
}
copy = obj;
for (int i = 0; i < list_order_open.Count; i++)
{
if (list_order_open[i].Security == obj.Security)
{
if (obj.Direction == Sides.Buy)
list_order_open[i].Volume += Convert.ToDouble(obj.Volume);
if (obj.Direction == Sides.Sell)
list_order_open[i].Volume -= Convert.ToDouble(obj.Volume);
list_order_open[i].obj = obj;
list_order_open[i].Direction = obj.Direction;
}
}
bool Have = false;
for (int i = 0; i < list_order_open.Count; i++)
{
if (list_order_open[i].Security == obj.Security)
{
Have = true;
}
}
if (!Have)
{
CORPLLC. OrderMy OrderMy = new CORPLLC. OrderMy();
OrderMy.obj = obj;
OrderMy.Direction = obj.Direction;
OrderMy.Security = obj.Security;
OrderMy.Volume = Convert.ToDouble(obj.Volume);
if (obj.Direction == Sides.Sell)
OrderMy.Volume = -Convert.ToDouble(obj.Volume);
list_order_open.Add(OrderMy);
CORPLLC . Trade1.priceclose.Add(OrderMy);
}
List<CORPLLC.OrderMy> itog_orders_Cesh = new List<CORPLLC.OrderMy>();
for (int i = 0; i < list_order_open.Count; i++)
{
if (list_order_open[i].Volume != 0)
{
CORPLLC . OrderMy OrderMy1 = list_order_open[i];
itog_orders_Cesh.Add(list_order_open[i]);
}
}
CORPLLC . Trade1.itog_orders = itog_orders_Cesh;
}
private void Button_Click_18(object sender, RoutedEventArgs e)
{
}
private void Button_Click(object sender, RoutedEventArgs e)
{
//start
ClientVisual.UpdateGraf.SendUpdate(DateTime.Now, "connect EX", 1, 1, 1, "");
connect();
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
OnInits();
//setting
setting();
}
}
}
namespace IBApi // IBApi . global . prices
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
public class price
{
public double ask = 0;
public double bid = 0;
}
public class NeedQuotes
{
public string Symb1 = "EUR";
public string Symb2 = "USD";
public int number = 0;
}
public static class global
{
public static List<NeedQuotes> list_NeedQuotes = new List<NeedQuotes>();
public static Dictionary<string, price> prices = new Dictionary<string, price>();
}
}
namespace CORPLLC
{
using System;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Threading;
//using Client;
using System.Collections.Generic;
using System.IO;
using Ecng.Collections;
using Ecng.Common;
using Ecng.Serialization;
using Ecng.Xaml;
using Ecng.Configuration;
using StockSharp.Algo;
using StockSharp.Algo.Candles;
using StockSharp.Algo.Testing;
using StockSharp.BusinessEntities;
using StockSharp.Configuration;
using StockSharp.Localization;
using StockSharp.Logging;
using StockSharp.Messages;
using StockSharp.Xaml;
using StockSharp.Xaml.Charting;
using Newtonsoft.Json;
public static class Window1
{
public static Window this1 = null;
public static string PortfolioName;
}
public static class PortfolioName
{
public static string AccountSeria = null;
}
public static class FileSettingStock
{
public static string _settingsFile = "connection.xml";
}
//Trade1._realConnector
/// <summary>
/// структура ордеров
/// </summary>
public class OrderMy
{
public Security Security;
public Sides Direction;
public decimal OpenPrice;
public double Volume;
public Order obj;
}
/// <summary>
/// колекция ордеров
/// </summary>
public static class Trade1
{
public static StockSharp.Algo.Connector _realConnector;
public static List<OrderMy> itog_orders = new List<OrderMy>();
public static List<OrderMy> priceclose = new List<OrderMy>();
// public static StockSharp.Algo.Connector _realConnector;
}
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes;
namespace twsclassic //twsclassic.Window1.this1 //twsclassic.PortfolioName.AccountSeria { using System; using System.Windows; using System.Windows.Forms; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Threading; //using Client; using System.Collections.Generic; using System.IO; using System.Windows.Forms;
}
namespace IBApi // IBApi . global . prices { using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading;
}
namespace CORPLLC {
}