﻿<?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">6 семинар</title>
  <id>~/topic/3386/6-seminar/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-22T08:41:48Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=3386" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/23999/</id>
    <title type="text">Запись урока: Часть 1 http://vk.com/video_ext.php?oid=-66674957&amp;amp;id=167888006&amp;amp;hash=825d8ae1bd796058&amp;amp;h...</title>
    <published>2013-02-13T11:22:52Z</published>
    <updated>2014-03-06T09:17:58Z</updated>
    <author>
      <name>Самунджян Артем</name>
      <uri>https://stocksharp.ru/users/675/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;span style="font-size:120%"&gt;&lt;b&gt;Запись урока: &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:120%"&gt;&lt;b&gt;Часть 1 &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;[vk]http://vk.com/video_ext.php?oid=-66674957&amp;amp;id=167888006&amp;amp;hash=825d8ae1bd796058&amp;amp;hd=3[/vk]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:120%"&gt;&lt;b&gt;Часть 2 &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;[vk]http://vk.com/video_ext.php?oid=-66674957&amp;amp;id=167888010&amp;amp;hash=04c36384a310b279&amp;amp;hd=3[/vk]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:120%"&gt;&lt;b&gt;Темы занятия:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;1. Продолжение работы с проектом SimpleTicker: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;добавление SMA-индикатора; &lt;br /&gt;&lt;li&gt;работа с шортом и лонгом;&lt;br /&gt;&lt;li&gt;установление направления заявки, определение цены и создание;&lt;/ul&gt;&lt;br /&gt;2. Рассмотрение примера библиотеки StockSharp - Sample.&lt;br /&gt;3. Подключение к своей программе индикатора SMA, прописанного в StockSharp; тестирование.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:120%"&gt;&lt;b&gt;Домашнее задание:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;1. Дописать различные варианты тестов для проекта SimpleTicker&lt;br /&gt;2. Нарисовать иерархию классов под IIndicatorValue&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:120%"&gt;&lt;b&gt;Пример решения домашнего задания:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;ValueWinnerIndicatorTest.cs:&lt;br /&gt;&lt;div class='spoilertitle'&gt;&lt;input type='button' value='Показать спойлер' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_c9fad404dd8345dba8cf6eec2e183e95');" title='Показать спойлер' /&gt;&lt;/div&gt;&lt;div class='spoilerbox' id='spolier_c9fad404dd8345dba8cf6eec2e183e95' style='display:none'&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
using SimpleTicker;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using StockSharp.Algo.Indicators;
using StockSharp.Algo.Indicators.Trend;

namespace SimpleTickerTest
{
    [TestClass()]
    public class ValueWinnerIndicatorTest
    {
        private SimpleMovingAverage _sma1;
        private SimpleMovingAverage _sma2;
        private ValueWinnerIndicator/*&amp;lt;decimal, decimal&amp;gt;*/ _winner;

        #region Дополнительные атрибуты теста
        // 
        //При написании тестов можно использовать следующие дополнительные атрибуты:
        //
        //ClassInitialize используется для выполнения кода до запуска первого теста в классе
        //[ClassInitialize()]
        //public static void MyClassInitialize(TestContext testContext)
        //{
        //}
        //
        //ClassCleanup используется для выполнения кода после завершения работы всех тестов в классе
        //[ClassCleanup()]
        //public static void MyClassCleanup()
        //{
        //}
        //
        //TestInitialize используется для выполнения кода перед запуском каждого теста
        //[TestInitialize()]
        //public void MyTestInitialize()
        //{
        //}
        //
        //TestCleanup используется для выполнения кода после завершения каждого теста
        //[TestCleanup()]
        //public void MyTestCleanup()
        //{
        //}
        //
        #endregion

        //TestInitialize используется для выполнения кода перед запуском каждого теста
        [TestInitialize()]
        public void MyTestInitialize()
        {
            _sma1 = new SimpleMovingAverage { Length = 2 };
            _sma2 = new SimpleMovingAverage { Length = 3 };
            _winner = new ValueWinnerIndicator/*&amp;lt;decimal, decimal&amp;gt;*/(_sma1, _sma2);
        }

        [TestMethod()]
        public void IsFormedTest()
        {
            Assert.IsFalse(_winner.IsFormed);
            _winner.Process((DecimalIndicatorValue)1m);
            Assert.IsFalse(_winner.IsFormed);
            _winner.Process((DecimalIndicatorValue)2m);
            Assert.IsFalse(_winner.IsFormed);
            _winner.Process((DecimalIndicatorValue)3m);

            Assert.IsTrue(_winner.IsFormed);
        }

        [TestMethod()]
        public void ProcessWhileNotFormedTest()
        {
            IIndicatorValue biv = null;

            biv = _winner.Process((DecimalIndicatorValue)1m);
            Assert.IsFalse(biv.GetValue&amp;lt;bool&amp;gt;());
            biv = _winner.Process((DecimalIndicatorValue)2m);
            Assert.IsFalse(biv.GetValue&amp;lt;bool&amp;gt;());
            biv = _winner.Process((DecimalIndicatorValue)3m);
            Assert.IsFalse(biv.GetValue&amp;lt;bool&amp;gt;());
        }

        [TestMethod()]
        public void Process55012Test()
        {
            _winner.Process((DecimalIndicatorValue)5m);
            _winner.Process((DecimalIndicatorValue)5m);
            _winner.Process((DecimalIndicatorValue)0m);
            // Short = 2.5; Long = 3.3;

            bool firstWinWasCalled = false;
            bool secondWinWasCalled = false;
            bool? winnerChangedWasCalled = null;// Nullable&amp;lt;bool&amp;gt;
            _winner.FirstWin += () =&amp;gt; firstWinWasCalled = true;
            _winner.SecondWin += () =&amp;gt; secondWinWasCalled = true;
            _winner.WinnerChanged += isFirstWin =&amp;gt; winnerChangedWasCalled = isFirstWin;

            IIndicatorValue biv = null;
            biv = _winner.Process((DecimalIndicatorValue)12m);
            Assert.IsTrue(biv.GetValue&amp;lt;bool&amp;gt;());
            // Short = 6; Long = 17/3;

            Assert.IsTrue(firstWinWasCalled);
            Assert.IsFalse(secondWinWasCalled);
            Assert.IsNotNull(winnerChangedWasCalled);
            Assert.IsTrue(winnerChangedWasCalled.Value);
        }

        [TestMethod()]
        public void Process5550Test()
        {
            _winner.Process((DecimalIndicatorValue)5m);
            _winner.Process((DecimalIndicatorValue)5m);
            _winner.Process((DecimalIndicatorValue)5m);
            // Short = 5; Long = 5;

            bool firstWinWasCalled = false;
            bool secondWinWasCalled = false;
            bool? winnerChangedWasCalled = null;// Nullable&amp;lt;bool&amp;gt;
            _winner.FirstWin += () =&amp;gt; firstWinWasCalled = true;
            _winner.SecondWin += () =&amp;gt; secondWinWasCalled = true;
            _winner.WinnerChanged += isFirstWin =&amp;gt; winnerChangedWasCalled = isFirstWin;

            IIndicatorValue biv = null;
            biv = _winner.Process((DecimalIndicatorValue)0m);
            Assert.IsTrue(biv.GetValue&amp;lt;bool&amp;gt;());
            // Short = 2.5; Long = 3.333;

            Assert.IsFalse(firstWinWasCalled);
            Assert.IsTrue(secondWinWasCalled);
            Assert.IsNotNull(winnerChangedWasCalled);
            Assert.IsFalse(winnerChangedWasCalled.Value);
        }

        [TestMethod()]
        public void Process5555Test()
        {
            _winner.Process((DecimalIndicatorValue)5m);
            _winner.Process((DecimalIndicatorValue)5m);
            _winner.Process((DecimalIndicatorValue)5m);
            // Short = 5; Long = 5;

            bool firstWinWasCalled = false;
            bool secondWinWasCalled = false;
            bool? winnerChangedWasCalled = null;// Nullable&amp;lt;bool&amp;gt;
            _winner.FirstWin += () =&amp;gt; firstWinWasCalled = true;
            _winner.SecondWin += () =&amp;gt; secondWinWasCalled = true;
            _winner.WinnerChanged += isFirstWin =&amp;gt; winnerChangedWasCalled = isFirstWin;

            IIndicatorValue biv = null;
            biv = _winner.Process((DecimalIndicatorValue)5m);
            Assert.IsFalse(biv.GetValue&amp;lt;bool&amp;gt;());
            // Short = 5; Long = 5;

            Assert.IsFalse(firstWinWasCalled);
            Assert.IsFalse(secondWinWasCalled);
            Assert.IsNull(winnerChangedWasCalled);
        }
    }
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;SmaIndicatorTest.cs:&lt;br /&gt;&lt;div class='spoilertitle'&gt;&lt;input type='button' value='Показать спойлер' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_8e305d494626495592bcca86abac7003');" title='Показать спойлер' /&gt;&lt;/div&gt;&lt;div class='spoilerbox' id='spolier_8e305d494626495592bcca86abac7003' style='display:none'&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
using SimpleTicker;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;

namespace SimpleTickerTest
{
    [TestClass()]
    public class SmaIndicatorTest
    {
        #region Дополнительные атрибуты теста
        // 
        //При написании тестов можно использовать следующие дополнительные атрибуты:
        //
        //ClassInitialize используется для выполнения кода до запуска первого теста в классе
        //[ClassInitialize()]
        //public static void MyClassInitialize(TestContext testContext)
        //{
        //}
        //
        //ClassCleanup используется для выполнения кода после завершения работы всех тестов в классе
        //[ClassCleanup()]
        //public static void MyClassCleanup()
        //{
        //}
        //
        //TestInitialize используется для выполнения кода перед запуском каждого теста
        //[TestInitialize()]
        //public void MyTestInitialize()
        //{
        //}
        //
        //TestCleanup используется для выполнения кода после завершения каждого теста
        //[TestCleanup()]
        //public void MyTestCleanup()
        //{
        //}
        //
        #endregion

        [TestMethod()]
        public void AddTestLength2()
        {
            var ind = new SmaIndicator(2);

            Assert.IsFalse(ind.IsFormed);
            ind.Process(1);
            Assert.IsFalse(ind.IsFormed);
            ind.Process(2);

            Assert.IsTrue(ind.IsFormed);
            Assert.AreEqual(1.5m, ind.LastValue);

            ind.Process(5);

            Assert.IsTrue(ind.IsFormed);
            Assert.AreEqual(3.5m, ind.LastValue);
        }

        [TestMethod()]
        public void AddTestLength3()
        {
            var ind = new SmaIndicator(3);

            Assert.IsFalse(ind.IsFormed);
            ind.Process(2);
            Assert.IsFalse(ind.IsFormed);
            ind.Process(2);
            Assert.IsFalse(ind.IsFormed);
            ind.Process(5);

            Assert.IsTrue(ind.IsFormed);
            Assert.AreEqual(3m, ind.LastValue);

            ind.Process(8);

            Assert.IsTrue(ind.IsFormed);
            Assert.AreEqual(5m, ind.LastValue);
        }
    }
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size:120%"&gt;Вложения&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;a target="_blank" rel="nofollow" href="https://stocksharp.ru/away/?u=AQAAAAAAAADXjL5CL3VluFBlkphAxfOmgzHwBS6gmZ6H1CH1BJ_rN_4qYbIz0eRYJiis-L8IAwA" title="https://vk.com/doc-66674957_276915055"&gt;Исходные коды&lt;/a&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>