Стоп заявка
Atom Ответить
13.06.2011


Добрый день. Сейчас фиксирую прибыль вот таким образом, просто выставляя лимитную заяку выше текущей цены цены на 30 рублей:
Цитата:
var order3 = new Order
{
Portfolio = _portfolio,
Price = _instrument0.ShrinkPrice(_instrument0.BestAsk.Price+30),
Security = _instrument0,
Volume = 5,
Direction = OrderDirections.Buy,
};
trader.RegisterOrder(order3);

Но бывает так, что нужно в районе 30-ти рублей начать следить за ценой. Далее, например, при достижении 35 рублей при откате назад более чем на 3 рубля(до 32 рублей) выбросить лимитированную заявку с ценой 31,8. Т.е. эдакий трейлинг-стоп. Как это можно реализовать? Стратегии не используются.

Заранее спасибо!

Теги:


Спасибо:




25 Ответов
patermind

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


Исходя из https://stocksharp.ru/do...9-8f48-dd8f806c39e7.htm :
Цитата:

var order3 = new Order
{
Portfolio = _portfolio,
Type = OrderTypes.Conditional,
Volume = 5,
Security = _instrument0,
Direction = OrderDirections.Buy,
StopCondition = new QuikStopCondition
{
Type = QuikStopConditionTypes.TakeProfit,
ExpiryDate = this.ExpirationDate.SelectedDate,
StopPrice = _instrument0.BestAsk.Price+30,
Offset = 3,
Spread = 0.2,
ActiveTime = this.ActiveTime,
},
};
trader.RegisterOrder(order3);

Не работает - непонятно, что писать в
Цитата:
Type = OrderTypes.Conditional
Type = QuikStopConditionTypes.TakeProfit,
ExpiryDate = this.ExpirationDate.SelectedDate,
ActiveTime = this.ActiveTime,


Не могли бы вы подсказать, что я делаю неправильно и как поправить?
Автор топика
Спасибо:

Mikhail Sukhov

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


patermind Перейти
Не могли бы вы подсказать, что я делаю неправильно и как поправить?


Приведите настройки окна новой стоп заявки терминала Квик и я скажу как это сделать в коде.
Спасибо:

patermind

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


Прилагаю скриншот того, как выглядит заявка в версии Quik

http://s48.radikal.ru/i1...106/52/0a0dbb268d45.jpg


Также прошу подсказать, как можно получить в рублях ТекСредства из таблицы Клиентский портфель. Пробовал _portfolio.CurrentAmount по подсказке с форума, и _portfolio.CurrentAmount.Value - возвращает всегда 0. Работаю на ММВБ. _portfolio.Name возвращает правильное имя торгового счета.

https://stocksharp.ru/fo...-position-v-sobytiiakh/
похожая, думаю, проблема у человека.
Автор топика
Спасибо:

Mikhail Sukhov

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


patermind Перейти
Прилагаю скриншот того, как выглядит заявка в версии Quik

https://s48.radikal.ru/i1...106/52/0a0dbb268d45.jpg


Код выше должен корректен. Какие ошибки выдает код?

patermind Перейти

Также прошу подсказать, как можно получить в рублях ТекСредства из таблицы Клиентский портфель. Пробовал _portfolio.CurrentAmount по подсказке с форума, и _portfolio.CurrentAmount.Value - возвращает всегда 0. Работаю на ММВБ. _portfolio.Name возвращает правильное имя торгового счета.

https://stocksharp.ru/fo...-position-v-sobytiiakh/
похожая, думаю, проблема у человека.


Это особенности ММВБ и Квика.
Спасибо:

patermind

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


Mikhail Sukhov Перейти


Код выше должен корректен. Какие ошибки выдает код?


Это особенности ММВБ и Квика.


Сейчас не могу прислать ошибки, как буду у компа - вышлю.

т.е. получить текущий баланс счета невозможно? тогда единственный выход - забивать руками в программу? Обидно, хотел автоматически начать считать количество акций, на которые можно выставить заявку.
Автор топика
Спасибо:

Mikhail Sukhov

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


patermind Перейти
т.е. получить текущий баланс счета невозможно?


Возможно. По той ссылке, что вы прислали, написано, как получать текущий баланс.
Спасибо:

patermind

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


Mikhail Sukhov Перейти
patermind Перейти
т.е. получить текущий баланс счета невозможно?


Возможно. По той ссылке, что вы прислали, написано, как получать текущий баланс.


Если я правильно понял совет по ссылке, делаю
Цитата:
Console.WriteLine(trader.Portfolios.Any(p => p.CurrentAmount.Value > 0));

и получаю false. Не могли бы вы привести кусок кода?
Автор топика
Спасибо:

patermind

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


Выставляю стоп вот так:
Код
var order1 = new Order
                                {
                                    Portfolio = _portfolio,
                                    Type = OrderTypes.Conditional,
                                    Volume = 5,
                                    Security = _instrument0,
                                    Direction = OrderDirections.Buy,
                                    StopCondition = new QuikStopCondition
                                    {
                                        Type = QuikStopConditionTypes.TakeProfit,
                                        ExpiryDate = DateTime.MaxValue,
                                        StopPrice = _instrument0.ShrinkPrice(_instrument0.BestBid.Price),
                                        Offset = 1,
                                        Spread = 0.02,
                                        ActiveTime = null,
                                    },
                                };

                                trader.RegisterOrder(order1);

получаю исключение:
Код

16.06.2011 11:53:11 Ecng.Trading.Quik.ApiException: Код ошибки WrongSyntax Сообщение ACCOUNT=L01-00000F00; CLIENT_CODE=S#; TRANS_ID=42776524; CLASSCODE=EQBR; SECCODE=LKOH; QUANTITY=2; OPERATION=B; ACTION=NEW_STOP_ORDER; STOPPRICE=1761,3; EXPIRY_DATE=GTC; OFFSET=1; OFFSET_UNITS=PRICE_UNITS; SPREAD=0,02; SPREAD_UNITS=PRICE_UNITS; STOP_ORDER_KIND=TAKE_PROFIT_STOP_ORDER;
   в #=qIC0em_Y9ttPjTaH5wr0hvpkv3aFwj0mcqWF7VUdIyGgDQkOGVwQSHJIIeinlK4Kh.#=qCDnuvU0p0CmYCPNQKXjVgw==(Int32 #=qdHPN_yHFRnIcr2y57$QZhQ==, StringBuilder #=qkd$GlOpEqM23R4sq1opYsQ==)
   в #=q02UxtFgauWdhIXYFhRWq6VtvjMmAFpAfaARTqgq1_iM=.#=qT29nW$7XhRVru2DGAJ35k6fNpjLmr9Ele_hXAFXFvjA=(String #=qgMwZtGc9_lSOb6BuEDfw$A==, OrderStatus& #=q4OhwAp6Bp91L0oOCquhAOQ==, UInt32& #=q1Gak7Svd4JIb$RTAyb7eMw==, Int64& #=q5jtQ3tHDK6Hp5UbL3kchiw==, String& #=q6UEPR__avOY7mtynHNE46Q==)
   в Ecng.Trading.Quik.QuikTrader.#=qqAd0VW0iJb4GasgZxL8JSVy_pxzmQ1Tj65b3zqcRk1I=(Order #=q_bFETIlAa_FSSjI$vpvChQ==, TransactionBuilder #=qztYF4TzOhvmcC7KsmDFugw==)
   в Ecng.Trading.Quik.QuikTrader.OnRegisterOrder(Order order)
   в Ecng.Trading.Algo.BaseTrader.RegisterOrder(Order order)


ММВБ, аккаунт в исключении указывается правильный. что делать?
Автор топика
Спасибо:

Mikhail Sukhov

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


Я думаю дело в спреде.
Спасибо:

patermind

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


уже писал сообщение, что решил - не обращайте внимания. Спасибо! Дело действительно в спреде - нужно стаивть его согласно шагу цены инструмента. поставил 0,1 - и заработало. или 0 - тоже все ок.


а с балансом - как его забрать, подскажите плиз?
Автор топика
Спасибо:

patermind

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


need help for get balance! )))
Автор топика
Спасибо:

Alexander

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


patermind Перейти
need help for get balance! )))


Привидите скриншот таблицы из квика и все распечатку всех порфтелей которые приходят в квик
Спасибо:

patermind

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


Скриншот сделаю сегодня вечером и сразу выложу. А как вывести в консоль все портфели? У меня, если бы это получилось, наверное я бы смог выбрать с нужным балансом.
Автор топика
Спасибо:

Alexander

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


patermind Перейти
Скриншот сделаю сегодня вечером и сразу выложу. А как вывести в консоль все портфели? У меня, если бы это получилось, наверное я бы смог выбрать с нужным балансом.


подписываетесь на NewPortfolios, приходит коллекция портфелей. Для каждого печатаете всё что необходимо
Спасибо:

patermind

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


Alexander Перейти
patermind Перейти
Скриншот сделаю сегодня вечером и сразу выложу. А как вывести в консоль все портфели? У меня, если бы это получилось, наверное я бы смог выбрать с нужным балансом.


подписываетесь на NewPortfolios, приходит коллекция портфелей. Для каждого печатаете всё что необходимо


Выглядит примерно вот так, как и в документации -
Код

trader.NewPortfolios += portfolios =>
{
    if (_portfolio == null)
    {
        // находим sberbank и присваиваем ее переменной sber
        _portfolio = portfolios.FirstOrDefault(p => p.Name == account);

        if (_portfolio != null)
        {
            Console.WriteLine("Портфель {0} появился.", account);

            // если инструмент и стакан уже появились,
            // то извещаем об этом основной поток для выставления заявки
            if (_sber != null && _depth != null)
                waitHandle.Set();
        }
    }
};


куда здесь и что именно нужно добавить, чтобы вывелись все портфели?
Автор топика
Спасибо:

Alexander

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


patermind Перейти

куда здесь и что именно нужно добавить, чтобы вывелись все портфели?


Код

trader.NewPortfolios += portfolios =>
{
//тут перебираем всю коллекцию portfolios с помощью foreach и выводим его поля
    if (_portfolio == null)
    {
//блаблабла
    }
};
Спасибо:

patermind

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


а что написать, чтобы все портфели вывелись?
Автор топика
Спасибо:

Alexander

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


patermind Перейти
а что написать, чтобы все портфели вывелись?


ну это уже чистый C#, тут секретов вроде и вопросов быть не должно
Код
var portfolioString = "";
        foreach (var portfolio in portfolios)
        {
            portfolioString += portfolio.Name + " : " + portfolio.Exchange + " : " + portfolio.BeginAmount + " : " +
                               portfolio.CurrentAmount + " : " + portfolio.Commission + " : " + portfolio.Leverage + 
                               Environment.NewLine;
            portfolioString +=
        }


покажите строку portfolioString
Спасибо:

patermind

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


Благодарю!
Цитата:

L01-00000F00 : : 0 RUB : 0 RUB : 0 : 0;


вот такое вывел в лог.
Цитата:
portfolioString += portfolio.Name + " : " + portfolio.Exchange + " : " + portfolio.BeginAmount + " : " + portfolio.CurrentAmount + " : " + portfolio.Commission + " : " + portfolio.Leverage + ";\r\n";


т.е. нету там ничего, я так понимаю.
Автор топика
Спасибо:

Alexander

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


patermind Перейти
Благодарю!
Цитата:

L01-00000F00 : : 0 RUB : 0 RUB : 0 : 0;


вот такое вывел в лог.
Цитата:
portfolioString += portfolio.Name + " : " + portfolio.Exchange + " : " + portfolio.BeginAmount + " : " + portfolio.CurrentAmount + " : " + portfolio.Commission + " : " + portfolio.Leverage + ";\r\n";


т.е. нету там ничего, я так понимаю.



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

ещё так скриншота портфелей и не увидел :)
Спасибо:

patermind

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


Прошу прощения, забыл. Прилагаю скриншот из Квика - http://s001.radikal.ru/i...106/10/1270a893e96a.jpg

Рбаотаю на ммвб на боевом сервере, 80.253.20.46

если не получится из квика подтягивать - буду примерную цифру писать в конфиге робота, и менять ее раз в неделю. но это топорный вариант, не хотелось бы.
Автор топика
Спасибо:

Alexander

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


patermind Перейти
Прошу прощения, забыл. Прилагаю скриншот из Квика - https://s001.radikal.ru/i...106/10/1270a893e96a.jpg

Рбаотаю на ммвб на боевом сервере, 80.253.20.46

если не получится из квика подтягивать - буду примерную цифру писать в конфиге робота, и менять ее раз в неделю. но это топорный вариант, не хотелось бы.


так посмотрите на заголовок таблицы ("Клиентский портфель #0"), на столбцы и сравните с тем, что указано в документации.
сходств не вижу :)

да величина депозита с ММВБ легко подтягивается, просто у вас квик не настроен судя по всему.
Спасибо:

patermind

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


вы наверное не поняли. или я неверно показал скриншот, вот новый - http://s19.radikal.ru/i1...106/8f/720c3eb039d5.jpg

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

мне вот тут мысль пришла: может у меня дде экспорт не включен на эту таблицу? проверил, было
Цитата:
trader.Terminal.StartDde(trader.SecuritiesTable, trader.MyTradesTable, trader.EquityPositionsTable, trader.StopOrdersTable, trader.OrdersTable);
стало
Цитата:
trader.Terminal.StartDde(trader.SecuritiesTable, trader.MyTradesTable, trader.EquityPositionsTable, trader.StopOrdersTable, trader.OrdersTable, trader.EquityPortfoliosTable);


проверил - не помогло :(
Автор топика
Спасибо:

patermind

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


и вот еще что - пример сэмпл показывает нужный портфель. причем вторым - первый по нулям. пытаюсь разобраться, в чем дело, еще отпишу.

P.S. ничего не получилось. пробовал trader.StartExport(), не помогло. не знаю, что делать...
Автор топика
Спасибо:

patermind

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


Сделал вот так, заработало!
Цитата:
trader.NewPortfolios += portfolios =>
{
foreach (var portfolio in portfolios)
{
if (portfolio.Name == "MC0********")
{
balance = portfolio.CurrentAmount.Value;

}
};
if (_portfolio == null)
{


всем спасибо за помощь!

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


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

loading
clippy