Меняем размер позиции в зависимости от волатильности

43651РЕДАКТОР КОДА РАЗМЕР ПОЗИЦИИ ФУНКЦИЯ В СКРИПТЕ CALCULATEPOSITIONSIZE ATR ВОЛАТИЛЬНОСТЬ FIXEDSHARE

Следущий код можно использовать для динамического размера позиции в зависимости от волатильности

// Изменение размера позиции в зависимости от волатильности (для фьючерса на индекс РТС)
// В свойствах стратегии размер позиции установить - Функция в скрипте
using System;
using TradeMatic;
using TradeMatic.Indicators;

namespace ScriptNamespace
{
class MyScript : Script
{
private StrategyParameter P1;
private StrategyParameter P2;
private StrategyParameter P3;

public MyScript()
{
P1 = CreateParameter("Период ATR", 20, 10, 100, 10);
P2 = CreateParameter("Коэффициент", 10, 1, 10, 1);
P3 = CreateParameter("Максимальная позиция", 200, 1, 100, 1);
}

// Изменение размера позиции в зависимости от волатильности и суммы кэша
// работает, когда размер позиции - функция в скрипте
public override PositionSize CalculatePositionSize(Position p, double cash, double equity)
{
double close = p.Symbol.Close[p.EntryBar]; // цена закрытия на момент входа в позицию
double atr = ATR.Value(p.EntryBar, p.Symbol.High, p.Symbol.Low, p.Symbol.Close, P1.ValueInt); 
double sma = SMA.Value(p.EntryBar, Close, P1.ValueInt); 
double K = P2.ValueInt; if (K < 0) K = 0; 
double max_cash = 5000000; // максимальный активный кэш
double use_cash = (cash < max_cash) ? cash : max_cash; // ограничение суммы кэша
double risk = (atr == 0 || sma == 0) ? 1 : 1/(2*atr/sma*100); // величина риска
double size = (K == 0) ? use_cash/close : Math.Min(use_cash/close*K, use_cash/close*risk); 
if (size > P3.ValueInt) size = P3.ValueInt; // ограничение размера позиции
return new PositionSize(PositionSizeMode.FixedShare, size); // размер позиции в контрактах
}

public override void Execute()
{
}
}
}
background

Tradematic Support Center

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

This website uses cookies. By continuing to use this website, you consent to our Privacy Policy. OK