Дочерние стратегии StopLoss и TakeProfit.

Дочерние стратегии StopLoss и TakeProfit.


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

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

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



Thanks:


< 1 2 3  >
Константин

Avatar
Date: 3/26/2018
Reply


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

Support

Avatar
Date: 3/27/2018
Reply


Добрый день

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

Константин

Avatar
Date: 4/11/2018
Reply


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

Support

Avatar
Date: 4/12/2018
Reply


Добрый день

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

79f0ac5f8fd5d57e2febe73ccdd8e5fd.png
Thanks:

Константин

Avatar
Date: 4/12/2018
Reply


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

Support

Avatar
Date: 4/13/2018
Reply


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

Константин

Avatar
Date: 6/3/2018
Reply


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

Thanks:

Support

Avatar
Date: 6/6/2018
Reply


Добрый день

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

Константин

Avatar
Date: 6/7/2018
Reply


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

Support

Avatar
Date: 6/8/2018
Reply


Добрый день

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

Code
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
    }
}
Thanks:
< 1 2 3  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy