6 семинар


Запись урока:

Часть 1

[vk]http://vk.com/video_ext.php?oid=-66674957&id=167888006&hash=825d8ae1bd796058&hd=3[/vk]

Часть 2

[vk]http://vk.com/video_ext.php?oid=-66674957&id=167888010&hash=04c36384a310b279&hd=3[/vk]

Темы занятия:

  1. Продолжение работы с проектом SimpleTicker:
  • добавление SMA-индикатора;
  • работа с шортом и лонгом;
  • установление направления заявки, определение цены и создание;
  1. Рассмотрение примера библиотеки StockSharp - Sample.
  2. Подключение к своей программе индикатора SMA, прописанного в StockSharp; тестирование.

Домашнее задание:

  1. Дописать различные варианты тестов для проекта SimpleTicker
  2. Нарисовать иерархию классов под IIndicatorValue

Пример решения домашнего задания: ValueWinnerIndicatorTest.cs:

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/*<decimal, decimal>*/ _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/*<decimal, decimal>*/(_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<bool>());
            biv = _winner.Process((DecimalIndicatorValue)2m);
            Assert.IsFalse(biv.GetValue<bool>());
            biv = _winner.Process((DecimalIndicatorValue)3m);
            Assert.IsFalse(biv.GetValue<bool>());
        }

        [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<bool>
            _winner.FirstWin += () => firstWinWasCalled = true;
            _winner.SecondWin += () => secondWinWasCalled = true;
            _winner.WinnerChanged += isFirstWin => winnerChangedWasCalled = isFirstWin;

            IIndicatorValue biv = null;
            biv = _winner.Process((DecimalIndicatorValue)12m);
            Assert.IsTrue(biv.GetValue<bool>());
            // 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<bool>
            _winner.FirstWin += () => firstWinWasCalled = true;
            _winner.SecondWin += () => secondWinWasCalled = true;
            _winner.WinnerChanged += isFirstWin => winnerChangedWasCalled = isFirstWin;

            IIndicatorValue biv = null;
            biv = _winner.Process((DecimalIndicatorValue)0m);
            Assert.IsTrue(biv.GetValue<bool>());
            // 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<bool>
            _winner.FirstWin += () => firstWinWasCalled = true;
            _winner.SecondWin += () => secondWinWasCalled = true;
            _winner.WinnerChanged += isFirstWin => winnerChangedWasCalled = isFirstWin;

            IIndicatorValue biv = null;
            biv = _winner.Process((DecimalIndicatorValue)5m);
            Assert.IsFalse(biv.GetValue<bool>());
            // Short = 5; Long = 5;

            Assert.IsFalse(firstWinWasCalled);
            Assert.IsFalse(secondWinWasCalled);
            Assert.IsNull(winnerChangedWasCalled);
        }
    }
}

SmaIndicatorTest.cs:

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);
        }
    }
}

Вложения Исходные коды


Теги:


Спасибо:




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

loading
clippy