﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">designer. StockSharp</title>
  <id>https://stocksharp.ru/handlers/atom.ashx?category=tag&amp;id=designer&amp;type=forum</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-10T05:29:33Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=tag&amp;id=designer&amp;type=forum" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/topic/11557/</id>
    <title type="text">Проблема с Designer(4.4.16) S# не работает при использовании MACDSignal</title>
    <published>2020-03-29T22:50:00Z</published>
    <updated>2020-03-29T22:50:00Z</updated>
    <author>
      <name>ghost-mo</name>
      <uri>https://stocksharp.ru/users/94687/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="C#" />
    <category term="Designer" />
    <content type="html">&lt;p&gt;И все таки продукты S# не дружат с комплексными индикаторами..
Просто в Designer нет возможности работать со значением индикатора MACDsignal или ни кто не рассказывает как.
Решил схитрить, и написать код(приведен ниже) но если использовать MACDsignal  то Designer вообще начинает адски глючить. ну и бонально стратегия не запускается. Помогите а? Конечно да я сейчас решил проблему сделав макд и ема, но у вас есть и др индикаторы комплексные, что с ними делать...&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;namespace StockSharp.Designer.Strategies
{
	using System;
	using System.Collections.Generic;
	using System.ComponentModel;
	using System.Linq;
	using System.Windows.Media;
	using System.Runtime.InteropServices;

	using Ecng.Common;
	using Ecng.ComponentModel;
	using Ecng.Collections;

	using MoreLinq;

	using StockSharp.Messages;
	using StockSharp.Algo;
	using StockSharp.Algo.Candles;
	using StockSharp.Algo.Strategies;
	using StockSharp.Algo.Indicators;
	using StockSharp.Logging;
	using StockSharp.BusinessEntities;
	using StockSharp.Localization;
	using StockSharp.Xaml;
	using StockSharp.Xaml.Charting;
	using StockSharp.Xaml.Diagram.Elements;

	[Guid(&amp;quot;eea2da25-de12-4b6c-b43a-6a98e2fdb01c&amp;quot;)]
	[DisplayName(@&amp;quot;MACDS_RSI&amp;quot;)]
	public class NewStrategy : Strategy
	{
		private readonly MovingAverageConvergenceDivergenceSignal _macdSig;
		private readonly RelativeStrengthIndex _rsi;

		private readonly StrategyParam&amp;lt;int&amp;gt; _longParam;
		private readonly StrategyParam&amp;lt;int&amp;gt; _shortParam;
		private readonly StrategyParam&amp;lt;int&amp;gt; _sigParam;
		private readonly StrategyParam&amp;lt;int&amp;gt; _rsiParam;
		private readonly StrategyParam&amp;lt;int&amp;gt; _konMACDSParam;
		private readonly StrategyParam&amp;lt;int&amp;gt; _konRsiParam;

		private bool _isSell=false;
		private bool _isBuy=false;

		[DiagramExternal]
		public event Action&amp;lt;Order&amp;gt; NewMyOrder;

		[DiagramExternal]
		public event Action&amp;lt;MyTrade&amp;gt; NewMyTrade2;

	//	[DiagramExternal]
	//	public event Action&amp;lt;IIndicatorValue&amp;gt; NewMacdSigIndicator;

		[DiagramExternal]
		public event Action&amp;lt;IIndicatorValue&amp;gt; NewRsiIndicator;

		public NewStrategy()
		{
			_longParam = new StrategyParam&amp;lt;int&amp;gt;(this, nameof(Long), 40);
			_shortParam = new StrategyParam&amp;lt;int&amp;gt;(this, nameof(Short), 20);
			_sigParam = new StrategyParam&amp;lt;int&amp;gt;(this, nameof(Sig), 9);
			_rsiParam = new StrategyParam&amp;lt;int&amp;gt;(this, nameof(Rsi), 18);
			_konMACDSParam=new StrategyParam&amp;lt;int&amp;gt; (this, nameof(KonMACDS), 0);
			_konRsiParam=new StrategyParam&amp;lt;int&amp;gt; (this, nameof(KonRsi), 50);

			_macdSig = new MovingAverageConvergenceDivergenceSignal(new MovingAverageConvergenceDivergence(new ExponentialMovingAverage { Length = Long },new ExponentialMovingAverage { Length = Short }),new ExponentialMovingAverage { Length = Sig });
			_rsi = new RelativeStrengthIndex { Length = Rsi };
		}

		public int Long
		{
			get =&amp;gt; _longParam.Value;
			set
			{
				_longParam.Value = value;
				_macdSig.Macd.LongMa.Length = value;
			}
		}

		public int Short
		{
			get =&amp;gt; _shortParam.Value;
			set
			{
				_shortParam.Value = value;
				_macdSig.Macd.ShortMa.Length = value;
			}
		}
		public int Sig
		{
			get =&amp;gt; _sigParam.Value;
			set
			{
				_sigParam.Value = value;
				_macdSig.SignalMa.Length = value;
			}
		}
		public int Rsi
		{
			get =&amp;gt; _rsiParam.Value;
			set
			{
				_rsiParam.Value = value;
				_rsi.Length = value;
			}
		}
		public int KonMACDS
		{
			get =&amp;gt; _konMACDSParam.Value;
			set
			{
				_konMACDSParam.Value = value;
			}
		}
		public int KonRsi
		{
			get =&amp;gt; _konRsiParam.Value;
			set
			{
				_konRsiParam.Value = value;
			}
		}

		protected override void OnReseted()
		{
			this.AddInfoLog(&amp;quot;OnReseted&amp;quot;);

			_macdSig.Reset();
			_rsi.Reset();

			base.OnReseted();
		}

		protected override void OnStarted()
		{
			this.AddInfoLog(&amp;quot;OnStarted&amp;quot;);

			_macdSig.Reset();
			_rsi.Reset();

			this
				.WhenNewMyTrade()
				.Do(trade =&amp;gt; NewMyTrade2?.Invoke(trade))
				.Apply(this);

			this
				.WhenOrderRegistered()
				.Or(this.WhenOrderChanged())
				.Do(order =&amp;gt; NewMyOrder?.Invoke(order))
				.Apply(this);

			Connector.RegisterSecurity(Security);

			base.OnStarted();
		}

		protected override void OnStopped()
		{
			this.AddInfoLog(&amp;quot;OnStopped&amp;quot;);

			Connector.UnRegisterSecurity(Security);

			base.OnStopped();
		}

		[DiagramExternal]
		public void ProcessPeriod(Unit shortPeriod, Unit longPeriod, Unit sigPeriod, Unit rsiPeriod, Unit KonMACDSPeriod, Unit KonRsiPeriod)
		{
			if (shortPeriod != null)
				Short = (int)shortPeriod.Value;

			if (longPeriod != null)
				Long = (int)longPeriod.Value;

			if (sigPeriod != null)
				Sig = (int)sigPeriod.Value;

			if (rsiPeriod != null)
				Rsi = (int)rsiPeriod.Value;

			if (KonMACDSPeriod != null)
				KonMACDS = (int)KonMACDSPeriod.Value;

			if (KonRsiPeriod != null)
				KonRsi = (int)KonRsiPeriod.Value;
		}

		[DiagramExternal]
		public void ProcessCandle(Candle candle)
		{
			// strategy are stopping
			if (ProcessState == ProcessStates.Stopping)
			{
				CancelActiveOrders();
				return;
			}
			if(this.LogLevel==LogLevels.Debug)
			this.AddInfoLog(LocalizedStrings.Str3634Params.Put(candle.OpenTime, candle.OpenPrice, candle.HighPrice, candle.LowPrice, candle.ClosePrice, candle.TotalVolume, candle.Security));

			// process new candle
			var macdSValue = _macdSig.Process(candle);
			var rsiValue = _rsi.Process(candle);

			//NewMacdSigIndicator?.Invoke(macdSValue);
			NewRsiIndicator?.Invoke(rsiValue);

			// calc new values for short and long
			var isSell = _rsi.GetCurrentValue() &amp;lt; KonRsi &amp;amp;&amp;amp; macdSValue.GetValue&amp;lt;decimal&amp;gt;() &amp;lt; KonMACDS;
			var isBuy = _rsi.GetCurrentValue() &amp;gt; KonRsi &amp;amp;&amp;amp; macdSValue.GetValue&amp;lt;decimal&amp;gt;() &amp;gt; KonMACDS;
			//Удалить
			this.AddInfoLog(_rsi.GetCurrentValue() + &amp;quot;||&amp;quot; + rsiValue);
			
			//trade
			if (_isSell!=isSell)
			{
				// if short less than long, the sale, otherwise buy
				var direction = Sides.Sell;

				// calc size for open position or revert
				var volume = Position == 0 ? Volume : Position.Abs().Min(Volume) * 2;

				// calc order price as a close price + offset
				var price = candle.ClosePrice-Security.PriceStep;

				RegisterOrder(this.CreateOrder(direction, price, volume));

				// store current values for short and long
				_isSell = isSell;
			}
			if (_isBuy!=isBuy)
			{
				// if short less than long, the sale, otherwise buy
				var direction =  Sides.Buy;

				// calc size for open position or revert
				var volume = Position == 0 ? Volume : Position.Abs().Min(Volume) * 2;

				// calc order price as a close price + offset
				var price = candle.ClosePrice +  Security.PriceStep;

				RegisterOrder(this.CreateOrder(direction, price, volume));

				// store current values for short and long
				_isBuy = isBuy;
			}
		}
	}
}
&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/10823/</id>
    <title type="text">Защита позиции в Designer </title>
    <published>2019-06-26T10:28:42Z</published>
    <updated>2019-08-31T15:02:36Z</updated>
    <author>
      <name>komaranton</name>
      <uri>https://stocksharp.ru/users/104641/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Designer" />
    <content type="html">&lt;p&gt;Подскажите как подключить кубик защита позиции. На входе сделка видна, а заявки на выходе нет.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/10309/</id>
    <title type="text">В Designer, Как получить значение индикатора</title>
    <published>2019-01-14T01:17:06Z</published>
    <updated>2019-01-14T23:28:44Z</updated>
    <author>
      <name>ghost-mo</name>
      <uri>https://stocksharp.ru/users/94687/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Designer" />
    <content type="html">&lt;p&gt;Стыдно признаться, но не осилил.
Designer 4,4,15,0 винда 10 64
В дизайнере рисую Инструмент, свеча, macd signal и в блоке сравнения хоче проверить сигнальная больше 0. соответственно добовляю блок сравнения и переменную со значением 0, в событие переменной вставляю выход индикатора.
результат в блок опкупки, ну там из примера, стартую тест на истории и получаю подсвеченный блок условия и ошибку: Указанный метод не поддерживается.&lt;/p&gt;
&lt;p&gt;Пробовал конвертацию : тип не выбирал, а вот какое свойство выбрать , я не понял.
Помогите, как сигнальную макда сравнить с нулем?&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/5338/</id>
    <title type="text">Подключение и установка Дизайнера</title>
    <published>2016-04-12T12:55:36Z</published>
    <updated>2016-04-12T12:55:36Z</updated>
    <author>
      <name>dimap68</name>
      <uri>https://stocksharp.ru/users/83749/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Designer" />
    <content type="html">&lt;p&gt;Где можно посмотреть как настраивать подключение к QUIK ?&lt;/p&gt;
&lt;p&gt;Где посмотреть инфу по установке , подключению?&lt;/p&gt;
&lt;p&gt;Спасибо&lt;/p&gt;
</content>
  </entry>
</feed>