2 вопроса для старта !
Atom Ответить
06.04.2011


Добрый день.
1 - Как подписать событие ?
2 - Как выставить обработчика ?

И всё это делать под WindowsForms.

В програмировании начальный уровень мне в нём легче.



Вот что есть на данный момент

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Ecng.Trading.Algo;
using Ecng.Trading.Smart;
using Ecng.Trading.BusinessEntities;
using System.Net;
using Ecng.Common;
namespace Stock_060411_podkluchenie
{
public partial class Form1 : Form
{
public SmartTrader Trader;
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
IPEndPoint IP = new IPEndPoint(IPAddress.Parse("82.204.220.34"), 8090);
Trader = new SmartTrader(textBox1.Text, textBox2.Text, IP);
Trader.Connect();
}
private void TraderConnected()
{
label3.Text = "Подключили";
}
}
}

Теги:


Спасибо:




58 Ответов
< 1 2 3  >
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 16.04.2011
Ответить


Кирил Перейти
Скажите,а в выходной день бесполезно вот так вот найти инструмент с РТСа ? Базовый актив находит без проблем а вот фьюч ни как

// находим Фьючерс Лукойл и присваиваем ее переменной _Fuchlkoh
_Fuchlkoh = securities.FirstOrDefault(sec => sec.Code == "LKOH-3.11_FT");


В выхи демо сервер АйТи практически не работает.
Спасибо:

Кирил

Фотография
Дата: 18.04.2011
Ответить


Подскажите пожалуста как мне найти фьючерс _Fuchlkoh = securities.FirstOrDefault(sec => sec.Code == "LKOH-3.11_FT"); вроде ж и торги есть а котировки получить не могу

И при вызове Trader.Disconnect(); происходит вот что ----- Сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA)
Автор топика
Спасибо:

Кирил

Фотография
Дата: 18.04.2011
Ответить


не LKOH-3.11_FT а LKOH-6.11_FT
Автор топика
Спасибо:

Кирил

Фотография
Дата: 18.04.2011
Ответить


_Fuchlkoh = securities.FirstOrDefault(sec => sec.Code == ins2 && sec.Type == SecurityTypes.Future); в чём загвостка ???
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 18.04.2011
Ответить


Кирил Перейти
_Fuchlkoh = securities.FirstOrDefault(sec => sec.Code == ins2 && sec.Type == SecurityTypes.Future); в чём загвостка ???


А в SampleSmart он отображается?

+ вот это прочитайте. Может оно https://stocksharp.ru/fo...a-prikhodit-instrumient/ ? Id у инструмента = Code@RTS.
Спасибо:

Кирил

Фотография
Дата: 18.04.2011
Ответить


сПАСИБ Помогло )))
Автор топика
Спасибо:

Кирил

Фотография
Дата: 18.04.2011
Ответить


_Fuchlkoh = securities.FirstOrDefault(sec => sec.Type == SecurityTypes.Future && sec.Code == ins2); Сделал вот так сортирую выделяю фьючи потом из фьючей нахожу по коду нахожу фьюч лука LKM1 и всё гуд
Автор топика
Спасибо:

Кирил

Фотография
Дата: 18.04.2011
Ответить


вот так даже правельней _Fuchlkoh = securities.FirstOrDefault(sec => sec.Type == SecurityTypes.Future && sec.Class == "RTS_FUT" && sec.Code == ins2);
Автор топика
Спасибо:

Кирил

Фотография
Дата: 18.04.2011
Ответить


Возникла проблемка не могу определить order.Id может на чтото не подписался подскажите пожалста
Trader.RegisterOrder(order);
Tekuhy.Content = "Заявка зарегистрирована. " + order.Id;
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 18.04.2011
Ответить


Кирил Перейти
Возникла проблемка не могу определить order.Id может на чтото не подписался подскажите пожалста
Trader.RegisterOrder(order);
Tekuhy.Content = "Заявка зарегистрирована. " + order.Id;


Этот процесс асинхронный.
Спасибо:

MyxaGT

Фотография
Дата: 18.04.2011
Ответить


this.GuiAsync(() =>
{
Trader.RegisterOrder(order);
label19.Content = "Заявка зарегистрирована. " + order.Id;
});
Так не работает
Спасибо:

MyxaGT

Фотография
Дата: 19.04.2011
Ответить


this.Dispatcher.BeginInvoke((Action)(() =>
{
this.Trader.RegisterOrder(order);
label19.Content = "Заявка зарегистрирована. " + order.Id;
})); И Этак не работает Подскажите как прально
Спасибо:

Alexander

Фотография
Дата: 19.04.2011
Ответить


Цитата:
Этот процесс асинхронный.


При чём тут GuiAsync?
Речь про отправку транзакций.
Спасибо:

Кирил

Фотография
Дата: 19.04.2011
Ответить


А как подскажите ?
Автор топика
Спасибо:

Кирил

Фотография
Дата: 19.04.2011
Ответить


В асинхронном режиме торговая программа сама генерирует Order.TransactionId. Из-за этого сразу после выполнения метода ITrader.RegisterOrder(Order) еще какое-то время может не быть инициализирован Order.Id. Чтобы узнать в программе, когда биржа присвоила заявке Order.Id, необходимо подписатся на событие ITrader.NewOrders (или для стоп-заявок ITrader.NewStopOrders). Для определения неуспешной регистрации используется событие ITrader.OrdersFailed (или для стоп-заявок ITrader.StopOrdersFailed).


this.Trader.NewOrders += TraderNewOrders; //---- Подписались
......
....
...
private void TraderNewOrders()
{
this.GuiAsync(() =>
{
label19.Content = "Заявка зарегистрирована. " + order.Id;
});
}
В чём подвох ЭЭХ
Автор топика
Спасибо:

Кирил

Фотография
Дата: 19.04.2011
Ответить


this.Trader.AsyncMode = true; Подскажите чет не пойму а куда его крутить
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 19.04.2011
Ответить


Кирил Перейти
this.Trader.AsyncMode = true; Подскажите чет не пойму а куда его крутить


Это для Квика. У Смарта всегда асинхронный режим.
Спасибо:

Кирил

Фотография
Дата: 19.04.2011
Ответить


Фуф Спасиб .
Автор топика
Спасибо:

Кирил

Фотография
Дата: 19.04.2011
Ответить


Просто надо было поменять order.Id на order.TransactionId;
И всё работает Tekuhy.Content = "Заявка зарегистрирована. " + order.TransactionId;
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 19.04.2011
Ответить


Кирил Перейти
Просто надо было поменять order.Id на order.TransactionId;
И всё работает Tekuhy.Content = "Заявка зарегистрирована. " + order.TransactionId;


Я вас читаю с самого начала и понять не могу - а что вы собственно сделать хотите?Smile

Номер заявки - это Order.Id и нужно дождаться событие NewOrders. Order.TransactionId - это номер транзакции. Разница между ними большая. Вам для чего нужен вывод на экран номера заявки? Что дальше планируется с этим выводом делать?
Спасибо:

Кирил

Фотография
Дата: 19.04.2011
Ответить


Номер нужен для дальнейшей коррекции заявки то-ли удалить то-ли модифицировать либо вообще удалить, а вывод на экран нужен всего-лишь для наглядности то-есть увидили пришла знач нормуль разрабатываем дальше. Вот собственно и всё . Вроде так ! )))
Автор топика
Спасибо:

Кирил

Фотография
Дата: 19.04.2011
Ответить




private void button6_Click(object sender, RoutedEventArgs e)// кнопка покупки акции
{

var order1 = new Order
{
Portfolio = _portfolioMMVB,
Price = _lkoh.BestAsk.Price - 7,/////////////////////////////////////
Security = _lkoh,
Volume = 1,
Direction = OrderDirections.Buy,
};
Trader.RegisterOrder(order1);
Tekuhy.Content = order1.TransactionId;



}


private void button10_Click(object sender, RoutedEventArgs e)
{
Trader.CancelOrder(order1);
}
А почему не видит order1 ? Как сделать ? Чтоб удалял выставленый ордер ?
Автор топика
Спасибо:

MyxaGT

Фотография
Дата: 19.04.2011
Ответить


Для интересующихся... сделал выставление и удаление заявы всё вроде работает

this.Trader.NewOrders += orders => { foreach (var order in orders) Trader.CancelOrder(order); }; // подписались на получение регистрации заявок
...
...
...
...
...
Вот собственно кнопка выставляет заяву и удаляет

private void button9_Click(object sender, RoutedEventArgs e)// кнопка продажи ФЬЮчерса
{
var order = new Order // выставляем заяву
{
Portfolio = _portfolioFORTS,
Price = CenaAskRobo + 40, ////////
Security = _Fuchlkoh,
Volume = 1,
Direction = OrderDirections.Sell,
};
Trader.RegisterOrder(order);
label22.Content = "Заявка зарегистрирована. " + order.TransactionId;
Tekuhy.Content = order;
this.GuiAsync(() =>
{
if (order.State == OrderStates.Active) // проверка состояния
{
Trader.CancelOrder(order);// удаляем заяву
}
else { label19.Content = "Нету заявы "; }

});
}
Спасибо:

Кирил

Фотография
Дата: 20.04.2011
Ответить


Сделал кому интересно

public Order srt, newOrder;

,,,,,
,,,,,

this.Trader.NewOrders += orders => { }; // подписались на получение регистрации заявок
...
...
...
...
private void button9_Click(object sender, RoutedEventArgs e)// кнопка продажи ФЬЮчерса
{
var order = new Order
{
Portfolio = _portfolioFORTS,
Price = CenaAskRobo + 40, ////////
Security = _Fuchlkoh,
Volume = 1,
Direction = OrderDirections.Sell,
};
Trader.RegisterOrder(order);
label22.Content = "Заявка зарегистрирована. " + order.TransactionId;
Tekuhy.Content = order;
newOrder = order;
}

А теперь кнопка удаления заявки

private void button10_Click(object sender, RoutedEventArgs e)
{
label19.Content = newOrder;
// Trader.CancelOrder(newOrder);

this.GuiAsync(() =>
{
if (newOrder.State == OrderStates.Active)
{
Trader.CancelOrder(newOrder);
}
else { label19.Content = "Нету заявы "; }

});

}
Автор топика
Спасибо:

Кирил

Фотография
Дата: 20.04.2011
Ответить


Подскажите пожалуста а как определить какая именно заявка исполнилась ? Допустим у меня стоит и на продажу заявка и на покупку допустим исполнилась заявка на продажу как мне определить что именно заявка на покупку исполнилась ?
// подписываемся на событие появления моих новых сделок

this.Trader.NewMyTrades += myTrades =>
{
foreach (var myTrade in myTrades)
{
var trade = myTrade.Trade;
Console.WriteLine("Сделка {0} по цене {1} по бумаге {2} по объему {3} в {4}.", trade.Id, trade.Price, trade.Security.Code, trade.Volume, trade.Time);
}
};
Автор топика
Спасибо:
< 1 2 3  >

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy