Вопросы новичка в S# (Закрыта)
Atom
01.12.2010


ttt

Фотография
Добрый день.
Очень понравилась идея использования Вашей библиотеки для реализации роботов.
Подскажите, пожалуйста:
1) Как идентифицировать заявку?
//например, выставляю заявку buy RIZ0 4 контракта по цене 160500. Каким образом далее смогу ее отслеживать?
Вариант с использованием таблицы сделок не подходит - необходимо реализовать контроль исполнения заявок пользуясь исключительно информацией из таблицы заявок.
С языком C# только начал разбираться, возможно поэтому не нашел в представленных в дистрибутиве S# проектах примеров контроля состояния заявки по ее уникальному признаку.
2) Верно ли я понимаю суть работы с Квиком: для реализации автономного робота необходимо организовать два потока на C#:
- первый: выполняет функции получения данных из Квика через DDE сервер (используя библиотеку S#);
- второй: непосредственно реализует алгоритм выставления и снятия заявок.
Можно ли обойтись одним потоком?

Теги:


Спасибо: Николай_Флёров




506 Ответов
<< < 16 17 18 19 20  > >>
Mikhail Sukhov

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


freelancer Перейти
А как узнать текущую сумму на ФОРТС ? С учетом вариационной маржи ?

SelectedPortfolio.ExtensionInfo[DdeDerivativePortfolioColumns.CurrentLimitPositionsPrice] вызывает исключение (ключ не найден)


https://stocksharp.ru/do...2c-9fc5-27ecb07bdf5e.htm
Спасибо:

Teddy

Фотография
Дата: 03.08.2011


вопрос по выводу данных через произвольную таблицу quik/
делал как в примере данные выходят. но нужно чтобы строка просто обновлялась а не добавлялась новая.
написано что нужно добавить IdentityAttribute. добавлял но всё так же.
и как собственно обратиться к выводимым столбцам таблицы из кода своей стратегии.
примеров на форуме не нашёл,если можно примеры кода.
вот код
Код
namespace SampleDdeCustomTable
{
    using System;
    using System.ComponentModel;
    using Ecng.Common;
    using Ecng.Serialization;

    using StockSharp.Quik;

    [DdeCustomTable("BOT2")]
    public class BOT2 : INotifyPropertyChanged
    {
        public BOT2() { }
        private string _instrument;
        [DdeCustomColumn("Инструмент", Order = 0)]       
        public string instrument
        {
            get { return _instrument; }
            set { _instrument = value; NotifyPropertyChanged("Инструмент"); }
        }
        private decimal _High;
        [DdeCustomColumn("High", Order = 1)]
        [Identity]
        public decimal High 
        {
            get { return _High; }
            set{_High=value;NotifyPropertyChanged("High");}
        }
        private decimal _Low;
        [DdeCustomColumn("Low", Order = 2)]        
        public decimal Low
        {
            get { return _Low; }
            set { _Low = value; NotifyPropertyChanged("Low"); }
        }
        private decimal _SMA;
        [DdeCustomColumn("SMA", Order = 3)]        
        public decimal SMA 
        {
            get { return _SMA; }
            set { _SMA = value; NotifyPropertyChanged("SMA"); }
        }


        private PropertyChangedEventHandler _propertyChanged;

        event PropertyChangedEventHandler INotifyPropertyChanged.PropertyChanged
        {
            add { _propertyChanged += value; }
            remove { _propertyChanged -= value; }
        }

        private void NotifyPropertyChanged(string info)
        {
            if (_propertyChanged != null)
                _propertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }
}
Спасибо:

freelancer

Фотография
Дата: 04.08.2011


У меня сейчас так:

_trader.DerivativePortfoliosTable.Columns.Add(DdeDerivativePortfolioColumns.CurrentLimitPositionsPrice);
Не добавляется, говорит что уже есть.

portfoliosComboBox.SelectedPortfolio.ExtensionInfo[DdeDerivativePortfolioColumns.CurrentLimitPositionsPrice]
Нет такого ключа.

Как правильно получить лимит отк. поз. ?
Спасибо:

vader

Фотография
Дата: 04.08.2011


Событие стратегии NewMyTrades происходит один раз. Почему?
Код

this.NewMyTrades += mytrades => {
				MessageBox.Show("Event");
				MyTrades.PushRange(mytrades.ToArray());
			};
Спасибо:

Mikhail Sukhov

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


vader Перейти
Событие стратегии NewMyTrades происходит один раз. Почему?
Код

this.NewMyTrades += mytrades => {
				MessageBox.Show("Event");
				MyTrades.PushRange(mytrades.ToArray());
			};


Запустил пример Sample. Событие вызывается всегда, когда происходит сделка.
Спасибо:

Mikhail Sukhov

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


freelancer Перейти
У меня сейчас так:

_trader.DerivativePortfoliosTable.Columns.Add(DdeDerivativePortfolioColumns.CurrentLimitPositionsPrice);
Не добавляется, говорит что уже есть.

portfoliosComboBox.SelectedPortfolio.ExtensionInfo[DdeDerivativePortfolioColumns.CurrentLimitPositionsPrice]
Нет такого ключа.

Как правильно получить лимит отк. поз. ?


Portfolio.BeginAmount
Спасибо:

freelancer

Фотография
Дата: 04.08.2011


OK. Спасибо. Желательно, что бы подсказка свойства была как название колонки
Спасибо:

Mikhail Sukhov

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


freelancer Перейти
OK. Спасибо. Желательно, что бы подсказка свойства была как название колонки


Это невозможно, потому что Portfolio не зависящий от Квика тип данных. Он и в Смарте используется и в Плазе.
Спасибо:

vader

Фотография
Дата: 05.08.2011


Mikhail Sukhov Перейти
vader Перейти
Событие стратегии NewMyTrades происходит один раз. Почему?
Код

this.NewMyTrades += mytrades => {
				MessageBox.Show("Event");
				MyTrades.PushRange(mytrades.ToArray());
			};


Запустил пример Sample. Событие вызывается всегда, когда происходит сделка.

Какие средства диагностироания посоветуете?
Спасибо:

Mikhail Sukhov

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


vader Перейти
Mikhail Sukhov Перейти

Запустил пример Sample. Событие вызывается всегда, когда происходит сделка.

Какие средства диагностироания посоветуете?


Пример Sample работает?
Спасибо:

vader

Фотография
Дата: 05.08.2011


Да, работает.
Спасибо:

Mikhail Sukhov

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


vader Перейти
Да, работает.


Ну значит ошибка в вашем боте. Попробуйте ProcessDataError послушать.
Спасибо:

vader

Фотография
Дата: 05.08.2011


ProcessDataError молчит.
что ещё можно сделать?
Спасибо:

Mikhail Sukhov

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


vader Перейти
ProcessDataError молчит.
что ещё можно сделать?


Искать через Visual Studio Debugger. Ошибка не системная судя по всему, а в логике.
Спасибо:

vader

Фотография
Дата: 05.08.2011


как логика может влиять на то, происходит событие NewMyTrades или нет?
тем более ,что список заявок нормально заплняется.
Спасибо:

Mikhail Sukhov

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


Teddy Перейти
вопрос по выводу данных через произвольную таблицу quik/
делал как в примере данные выходят. но нужно чтобы строка просто обновлялась а не добавлялась новая.
написано что нужно добавить IdentityAttribute. добавлял но всё так же.


Судя по структуре данных там вряд ли можно выделить что-то уникальное.

Teddy Перейти

и как собственно обратиться к выводимым столбцам таблицы из кода своей стратегии.
примеров на форуме не нашёл,если можно примеры кода.


Как к обычным свойствам.
Спасибо:

l-way

Фотография
Дата: 07.08.2011


Добрый день

Помогите разобраться со следующими вопросами:

1. Что вернет
Security.GetMarketPrice(OrderDirection.Sell, new Unit(1000), MarketPriceTypes.Opposite);
в случае, если
а) достигли нижнего лимита цены и в стакане нет бидов;
б) до достижения нижнего лимита остается < 1000 пунктов.

2. Чему равно Security.BestBid в случае а) из первого вопроса.

Спасибо.
Спасибо:

Mikhail Sukhov

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


l-way Перейти
Добрый день

Помогите разобраться со следующими вопросами:

1. Что вернет
Security.GetMarketPrice(OrderDirection.Sell, new Unit(1000), MarketPriceTypes.Opposite);
в случае, если
а) достигли нижнего лимита цены и в стакане нет бидов;
б) до достижения нижнего лимита остается < 1000 пунктов.


а) 0
б) все котировки в стакане не учитываются, только лучшая пара.
Спасибо:

Teddy

Фотография
Дата: 14.08.2011


подскажите как нужно задавать время работы стратегии.
Спасибо:

freelancer

Фотография
Дата: 15.08.2011


У меня 15-ти минутки.
Событийная модель:
Код
this.
When(StrategyRuleConditionHelper.NewCandles(_candleManager.Tokens.ElementAt(0))).
Do(new Action(action));

Но:
Код
_candleManager.GetTimeFrameCandle(Security, _timeFrame, _сandleBounds.Max - _timeFrame).Time + _timeFrame - Trader.MarketTime = 14.59

Хотя должно быть = 0 где-то.

В чем проблема может быть ?
Спасибо:

hobo

Фотография
Дата: 15.08.2011


Teddy Перейти
подскажите как нужно задавать время работы стратегии.

Попробуйте if-омRollEyes
Спасибо:

Church

Фотография
Дата: 15.08.2011


Подскажите, поддерживает ли EmulationTrader стоп-ордера? При попытке зарегистрировать ордер получаю NotImplementedException в StockSharp.BusinessEntities.dll!StockSharp.BusinessEntities.StopCondition.TryActivate(StockSharp.BusinessEntities.MarketDepth depth) + 0x37 bytes

Создаю ордер так:
Код
private Order CreateStopLimit(OrderDirections Direct, decimal stopPrice, decimal ProtectiveSpread, int Vol)
        {
            return new Order
            {
                Type = OrderTypes.Conditional,
                Volume = Vol,
                Security = this.Security,
                Portfolio = this.Portfolio,
                Direction = Direct,
                StopCondition = new QuikStopCondition
                {
                    Type = QuikStopConditionTypes.StopLimit,
                    StopPrice = stopPrice,
                    Spread = ProtectiveSpread,
                },
            };
        }


Регистрировать пытался обоими методами из сэмплов. И так:
Код
// регистрируем заявку (обычным способом - лимитированной заявкой)
this.RegisterOrder(_shortOrder);

И так:
Код
// регистрируем заявку (через котирование)
var strategy = new MarketQuotingStrategy(_shortOrder, new Unit(), new Unit());
base.ChildStrategies.Add(strategy);

Оба выдают этот exception.
Спасибо:

Mikhail Sukhov

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


freelancer Перейти
В чем проблема может быть ?


Я не понял вопроса.
Спасибо:

Mikhail Sukhov

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


Church Перейти
Подскажите, поддерживает ли EmulationTrader стоп-ордера?


Нет
Спасибо:

freelancer

Фотография
Дата: 15.08.2011


Mikhail Sukhov Перейти
freelancer Перейти
В чем проблема может быть ?


Я не понял вопроса.


При наступлении события NewCandles выражение _candleManager.GetTimeFrameCandle(Security, _timeFrame, _сandleBounds.Max - _timeFrame) должно получать сформированную свечку (прошлую то есть), но иногда (!) получает текущую незакрытую.
То есть иногда _candleManager.GetTimeFrameCandle(Security, _timeFrame, _сandleBounds.Max - _timeFrame).Time ≈ Trader.MarketTime
Спасибо:
<< < 16 17 18 19 20  > >>

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

loading
clippy