Дочерние стратегии StopLoss и TakeProfit.
Atom Ответить
01.03.2018


Добрый день! Пытаюсь выставить заявки типа стоп лимит и тейк профит так:

Как только приходит сделка сразу же исполняется отложенный ордер. В примере SampleQuik при выставлении стоп заявки таблица стоп заявок пишет "Ошибка".
Как правильно выставлять стопы и тейки?

И еще вопрос. С помощью какого элемента графики рисовать стопы на графике?
Пробовал рисовать LineElement но исключение пишет что элемент поддерживается.



Спасибо:




23 Ответов
Support

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


Добрый день

Пожалуйста приведите логи стратегии.
Спасибо:

Константин

Фотография
Благотворитель
Дата: 07.03.2018
Ответить


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

Support

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


Добрый день

В логе у вас уровень 0.5 а в примере 10 и 20. Вы меняли код?
Спасибо:

Константин

Фотография
Благотворитель
Дата: 10.03.2018
Ответить


Здравствуйте! С данной проблемой вроде разобрался.
Скажите пожалуйста как можно отрисовывать стоп-лосс и тейк-профит на графике?
Автор топика
Спасибо:

Константин

Фотография
Благотворитель
Дата: 10.03.2018
Ответить


Думал что разобрался, но еще больше запутался.
Такое ощущение что стратегия бросает заявку в стакан по цене сделки. Закрывает не весь объем позиции, а только часть. В основном только 1 лот. Таблица стоп заявок в квике не отображает стоп заявки установленные стратегией.
В примере используется OrderConditionalGrid, но он закрыт и как там все работает посмотреть нельзя. Из примера заявки выставляются вроде как нормально. И квик отображает стоп заявки в таблице.
Код:

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

Support

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


Добрый день

Если вы хотите чтобы позиция закрывалась одной заявкой то необходимо выставить свойство QuotingVolume
Спасибо:

Константин

Фотография
Благотворитель
Дата: 12.03.2018
Ответить


Support Перейти
Добрый день

Если вы хотите чтобы позиция закрывалась одной заявкой то необходимо выставить свойство QuotingVolume

Здравствуйте.
Меня больше волнует почему стоп срабатывает сразу после получения сделки, и как отрисовать стоп и тейк на графике.
Автор топика
Спасибо:

Support

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


Защитная стратегия активируется при пересечении цены. В вашем логе нет отладочной информации с указанием цен стакана или тиковой сделки. Вероятно было пробитие стаканом или сделкой защитного уровня.
Спасибо:

Константин

Фотография
Благотворитель
Дата: 15.03.2018
Ответить


Вот проект Wpf - https://github.com/Constalgo/StopLossAndTakeProfit.
Вместо стоп заявок стратегия выставляет лимитку с ценой сделки. Потому она сразу же исполняется. Таблица стоп заявок в квике пуста. Так же обратите внимание что при клике по кнопке автовыравнивание приложение зависает вместе с квиком.
Автор топика
Спасибо:

Support

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


Добрый день

Защитные стратегии выставляют лимитные заявки. Если вам нужны сто заявки то их необходимо выставлять в коде как обычные заявки.
Спасибо:

Константин

Фотография
Благотворитель
Дата: 26.03.2018
Ответить


Для стопов и тейков есть элемент для отрисовки на графике?
Автор топика
Спасибо:

Support

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


Добрый день

График не зависит от типов торговых данных. Вы можете изобразить ваши заявки любым подходящим элементом графика. Например уровнями http://doc.stocksharp.ru...ng_ChartOrderElement.htm Наш пример SampleActiveOrders демонстрирует работу с данным элементом.
Спасибо:

Константин

Фотография
Благотворитель
Дата: 11.04.2018
Ответить


SampleActiveOrders это немного не то. Вот так можно ли как то рисовать?
Автор топика
Спасибо:

Support

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


Добрый день

Вы можете использовать маркер заявок. Пример использования показан в SampleChartActiveOrders

79f0ac5f8fd5d57e2febe73ccdd8e5fd.png
Спасибо:

Константин

Фотография
Благотворитель
Дата: 12.04.2018
Ответить


Здравствуйте! Я смотрел этот пример. Я же написал что это немного не то. Если я буду использовать трейлинг то на истории я не смогу видеть как он смещался. SampleChartActiveOrders показывает просто уровни. На скрине выше видно как стоп смещается. Может можно использовать значения не привязанные к ордерам? Рисовать ломаную линию на графике указав координаты оси X (время) и оси Y (цена).
Автор топика
Спасибо:

Support

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


Все элементы графика не привязаны к торговым объектам. Вы можете выбрать подходящий элемент и рисовать на графике в произвольном стиле.
Спасибо:

Константин

Фотография
Благотворитель
Дата: 03.06.2018
Ответить


Добрый день! Я не понимаю как можно рисовать в произвольном стиле. Метод добавления данных на график (ChartDrawData.Add();) принимает аргумент типа IIndicatorValue. Перегрузки с аргументом типа decimal нет. При попытке передать decimal выбрасывает исключение, при чем ошибки уровня компиляции нет.
Скрин: https://yadi.sk/i/UCLUsVhF3WxFnE
Пробовал создать класс реализующий интерфейс IIndicatorValue, но так и не понял куда передать нужное значение.
Код:

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

Support

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


Добрый день

Есть два варианта: 1) Подобрать подходящий графически индикатор и передавать в него значения. В этом варианте вы контролируете что именно рисовать. 2) Изменить существующий индикатор путём переопределение интерфейса IIndicatorPainter. В этом варианте вы контролируете как именно рисовать данные.
Спасибо:

Константин

Фотография
Благотворитель
Дата: 07.06.2018
Ответить


Про IIndicatorPainter не понял. Как можно переопределить интерфейс? Да и интерфейса такого я не нашел. Есть IChartIndicatorPainter. Вы его имели в виду? То есть для того что бы рисовать индикатор так, как мне нужно мне надо создать класс реализующий IChartIndicatorPainter, а затем экземпляр этого класса передать в ChartIndicatorElement.IndicatorPainter? Верно? Если да то можно ли где то посмотреть реализацию такого класса? Не очень понятно как реализовывать методы этого интерфейса.
Автор топика
Спасибо:

Support

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


Добрый день

Ниже реализация отрисовщика для индикатора Ишимоку

Код
namespace StockSharp.Xaml.Charting.IndicatorPainters
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.Windows.Media;

    using Ecng.Serialization;
    using Ecng.Xaml;

    using StockSharp.Algo.Indicators;
    using StockSharp.Localization;

    /// <summary>
    /// The renderer for <see cref="Ichimoku"/>.
    /// </summary>
    [Indicator(typeof(Ichimoku))]
    public class IchimokuPainter : BaseChartIndicatorPainter
    {
        private ChartIndicatorElement _tenkan;
        private ChartIndicatorElement _kijun;
        private ChartIndicatorElement _senkouA;
        private ChartIndicatorElement _chinkou;

        /// <summary>
        /// <see cref="Ichimoku.Tenkan"/> line color.
        /// </summary>
        [Display(
            ResourceType = typeof(LocalizedStrings),
            Name = LocalizedStrings.Str2039Key,
            Description = LocalizedStrings.Str2040Key)]
        public Color TenkanColor { get; set; } = Colors.Red;

        /// <summary>
        /// <see cref="Ichimoku.Kijun"/> line color.
        /// </summary>
        [Display(
            ResourceType = typeof(LocalizedStrings),
            Name = LocalizedStrings.Str2041Key,
            Description = LocalizedStrings.Str2042Key)]
        public Color KijunColor { get; set; } = Colors.Blue;

        /// <summary>
        /// <see cref="Ichimoku.SenkouA"/> line color.
        /// </summary>
        [Display(
            ResourceType = typeof(LocalizedStrings),
            Name = LocalizedStrings.Str2043Key,
            Description = LocalizedStrings.Str2044Key)]
        public Color SenkouAColor { get; set; } = Colors.SandyBrown;

        /// <summary>
        /// <see cref="Ichimoku.SenkouB"/> line color.
        /// </summary>
        [Display(
            ResourceType = typeof(LocalizedStrings),
            Name = LocalizedStrings.Str2045Key,
            Description = LocalizedStrings.Str2046Key)]
        public Color SenkouBColor { get; set; } = Colors.Thistle;

        /// <summary>
        /// <see cref="Ichimoku.Chinkou"/> line color.
        /// </summary>
        [Display(
            ResourceType = typeof(LocalizedStrings),
            Name = LocalizedStrings.Str2047Key,
            Description = LocalizedStrings.Str2048Key)]
        public Color ChinkouColor { get; set; } = Colors.Green;

        /// <summary>
        /// To initialize renderer.
        /// </summary>
        /// <returns>Graphical data.</returns>
        public override IEnumerable<ChartIndicatorElement> Init()
        {
            InnerElements.Clear();

            InnerElements.Add(_tenkan = new ChartIndicatorElement
            {
                DrawStyle = ChartIndicatorDrawStyles.Line,
                Color = TenkanColor,
                StrokeThickness = BaseElement.StrokeThickness,
                Title = LocalizedStrings.Str764
            });

            InnerElements.Add(_kijun = new ChartIndicatorElement
            {
                DrawStyle = ChartIndicatorDrawStyles.Line,
                Color = KijunColor,
                StrokeThickness = BaseElement.StrokeThickness,
                Title = LocalizedStrings.Str765
            });

            InnerElements.Add(_senkouA = new ChartIndicatorElement
            {
                DrawStyle = ChartIndicatorDrawStyles.Band,
                Color = SenkouAColor,
                AdditionalColor = SenkouBColor,
                StrokeThickness = BaseElement.StrokeThickness,
                Title = LocalizedStrings.Str767
            });

            InnerElements.Add(_chinkou = new ChartIndicatorElement
            {
                DrawStyle = ChartIndicatorDrawStyles.Line,
                Color = ChinkouColor,
                StrokeThickness = BaseElement.StrokeThickness,
                Title = LocalizedStrings.Str768
            });

            return InnerElements;
        }

        /// <summary>
        /// To process new values.
        /// </summary>
        /// <param name="time">The time stamp of the new data generation.</param>
        /// <param name="value">Indicator values.</param>
        /// <param name="draw">The method of value drawing on the chart.</param>
        public override void ProcessValues(DateTimeOffset time, IIndicatorValue value, DrawHandler draw)
        {
            if (!value.IsFormed)
            {
                draw(_tenkan, 0, double.NaN);
                draw(_kijun, 0, double.NaN);
                draw(_senkouA, 0, double.NaN, double.NaN);
                draw(_chinkou, 0, double.NaN);
            }
            else
            {
                var values = value.GetSimpleValues();
                var ind = (Ichimoku)value.Indicator;

                draw.TryDraw(_tenkan, 0, values[ind.Tenkan]);
                draw.TryDraw(_kijun, 0, values[ind.Kijun]);
                draw.TryDraw(_senkouA, 0, values[ind.SenkouA], values[ind.SenkouB]);
                draw(_chinkou, 0, double.NaN);
                draw.TryDraw(_chinkou, ind.Kijun.Length, values[ind.Chinkou]);
            }
        }

        #region IPersistable

        /// <summary>
        /// Load settings.
        /// </summary>
        /// <param name="storage">Settings storage.</param>
        public override void Load(SettingsStorage storage)
        {
            TenkanColor = storage.GetValue<SettingsStorage>(nameof(TenkanColor)).ToColor();
            KijunColor = storage.GetValue<SettingsStorage>(nameof(KijunColor)).ToColor();
            SenkouAColor = storage.GetValue<SettingsStorage>(nameof(SenkouAColor)).ToColor();
            SenkouBColor = storage.GetValue<SettingsStorage>(nameof(SenkouBColor)).ToColor();
            ChinkouColor = storage.GetValue<SettingsStorage>(nameof(ChinkouColor)).ToColor();
        }

        /// <summary>
        /// Save settings.
        /// </summary>
        /// <param name="storage">Settings storage.</param>
        public override void Save(SettingsStorage storage)
        {
            storage.SetValue(nameof(TenkanColor), TenkanColor.ToStorage());
            storage.SetValue(nameof(KijunColor), KijunColor.ToStorage());
            storage.SetValue(nameof(SenkouAColor), SenkouAColor.ToStorage());
            storage.SetValue(nameof(SenkouBColor), SenkouBColor.ToStorage());
            storage.SetValue(nameof(ChinkouColor), ChinkouColor.ToStorage());
        }

        #endregion
    }
}
Спасибо:

Константин

Фотография
Благотворитель
Дата: 09.06.2018
Ответить


Здравствуйте! В какой сборке определен метод TryDraw?

Ошибка:
Цитата:
Ошибка CS1061 'DrawHandler" не содержит определения для "TryDraw" и не удалось найти метод расширения "TryDraw", принимающий тип "DrawHandler" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).


Подключенные сборки:
Цитата:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Windows.Media;
using Ecng.Serialization;
using Ecng.Xaml;
using StockSharp.Algo.Indicators;
using StockSharp.Localization;
using StockSharp.Xaml.Charting;
using StockSharp.Xaml.Charting.IndicatorPainters;
Автор топика
Спасибо:

Support

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


Ниже код метода расширения

Код
static class PainterExtensions
    {
        public static void TryDraw(this DrawHandler draw, ChartIndicatorElement elem, int index, params IIndicatorValue[] values)
        {
            draw(elem, index, values.Select(v => v.IsEmpty ? double.NaN : v.GetValue<double>()).ToArray());
        }
    }
Спасибо: Константин

Константин

Фотография
Благотворитель
Дата: 16.06.2018
Ответить


Спасибо. РазобралсяLaugh
Автор топика
Спасибо:


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

loading
clippy