background

Tradematic Support Center

Guides, articles, videos and links for Tradematic users and developers.

Разные параметры для разных инструментов

75821СТАТЬЯ РЕДАКТОР КОДА ПРИМЕР РАЗНЫЕ УСЛОВИЯ РАЗНЫЕ ПРАВИЛА РАЗНЫЕ ИНСТРУМЕНТЫ SYMBOL SYMBOLNAME ISLASTPOSITIONACTIVE

Задача - для первого инструмента использовать одну пару скользящих средних, для второго - другую.
В качестве основы мы снова возьмем нашу любимую стратегию SMA-9.

После первой пары добавим вторую пару параметров:

// Для Газпрома
private StrategyParameter parameter0;
private StrategyParameter parameter1;

// Для Сбербанка
private StrategyParameter parameter2;
private StrategyParameter parameter3;

В конструкторе нужно инициализировать новые переменные:

public MyScript()
{
   // Для Газпрома
   parameter0 = CreateParameter("Период SMA", 9, 0, 100, 1);
   parameter1 = CreateParameter("Период SMA", 9, 0, 100, 1);

   // Для Сбербанка
   parameter2 = CreateParameter("Период SMA", 18, 0, 100, 1);
   parameter3 = CreateParameter("Период SMA", 18, 0, 100, 1);
}

Самое интересное - в функции Execute().
Мы модифицируем код для выхода из позиции - разделяем на два условия в зависимости от названия инструмента, и, соответственно, применяем разные параметры:

if (IsLastPositionActive)
{
   if(Symbol.SymbolName == "ГАЗПРОМ ао")
   {
      if (CrossUnder(bar, Close, SMA.Series(Close, parameter1.ValueInt)))
      {
         SellAtClose(bar, LastPosition, "");
      }
   }
   else if(Symbol.SymbolName == "Сбербанк")
   {
      if (CrossUnder(bar, Close, SMA.Series(Close, parameter3.ValueInt)))
      {
         SellAtClose(bar, LastPosition, "");
      }
   }
}

Аналогично - условие на вход.

Итоговый код должен получиться таким:

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using TradeMatic;
using TradeMatic.Indicators;

namespace ScriptNamespace
{
   class MyScript : Script
   {
      // Для Газпрома
      private StrategyParameter parameter0;
      private StrategyParameter parameter1;

      // Для Сбербанка
      private StrategyParameter parameter2;
      private StrategyParameter parameter3;
      
      public MyScript()
      {
         // Для Газпрома
         parameter0 = CreateParameter("Период SMA", 9, 0, 100, 1);
         parameter1 = CreateParameter("Период SMA", 9, 0, 100, 1);

         // Для Сбербанка
         parameter2 = CreateParameter("Период SMA", 18, 0, 100, 1);
         parameter3 = CreateParameter("Период SMA", 18, 0, 100, 1);
      }

      public override void Execute()
      {
         // Отрисовка
         // Для Газпрома
         PlotSeries(PricePane, SMA.Series(Close, parameter0.ValueInt), Color.Red, LineStyle.Solid, 1);
         PlotSeries(PricePane, SMA.Series(Close, parameter1.ValueInt), Color.Red, LineStyle.Solid, 1);

         // Для Сбербанка
         PlotSeries(PricePane, SMA.Series(Close, parameter2.ValueInt), Color.Green, LineStyle.Solid, 1);
         PlotSeries(PricePane, SMA.Series(Close, parameter3.ValueInt), Color.Green, LineStyle.Solid, 1);

         // Инициализация

         // Основной цикл
         for (int bar = 9; bar < Symbol.Count; bar++)
         {
            if (IsLastPositionActive)
            {
               if(Symbol.SymbolName == "ГАЗПРОМ ао")
               {
                  if (CrossUnder(bar, Close, SMA.Series(Close, parameter1.ValueInt)))
                  {
                     SellAtClose(bar, LastPosition, "");
                  }
               }
               else if(Symbol.SymbolName == "Сбербанк")
               {
                  if (CrossUnder(bar, Close, SMA.Series(Close, parameter3.ValueInt)))
                  {
                     SellAtClose(bar, LastPosition, "");
                  }
               }
            }
            else
            {
               if(Symbol.SymbolName == "ГАЗПРОМ ао")
               {
                  if (CrossOver(bar, Close, SMA.Series(Close, parameter0.ValueInt)))
                  {
                     BuyAtClose(bar, "");
                  }
               }
               else if(Symbol.SymbolName == "Сбербанк")
               {
                  if (CrossUnder(bar, Close, SMA.Series(Close, parameter2.ValueInt)))
                  {
                     BuyAtClose(bar, "");
                  }
               }
            }
         }
      }
   }
}
This website uses cookies. By continuing to use this website, you consent to our Privacy Policy. OK