TS Research Group


 по русски | in english  

КомпанияПрограмные ПродуктыУслугиУправление капиталомПубликацииКонтактыПоискSupport Forum

   Описание   Исследования   Download   Заказ




eSignal Solutions:
· Wavelet Transform for eSignal

Rocket Science Trading Tools:
· Genetic Optimizer for TradeStation

Portfolio Money Management:
· Real Time Portfolio Analyzer

Исследования:
Пробой Волатильности

Процент Риска

Оптимизация параметров стратегии со случайными выходами.



System Trading Tools:
· Wavelet Transform
· TS Link Dll

Исследования:
Использование TS Link. Пример вычисления оптимального F в TradeStation с использованием Excel.


Automatic System Trading:
· TS Automatic Trader DDE Version

RealTime tools:
· OnDemand Server
· Meta Server RT

Historical tools:
· HistoryCentre for OMZ
· HistoryCentre for XPO
· QLoader for QCharts

Utilities:
. Quotes Genereator DDE Version

Support:
. Как купить
. Customer support
· Online help
. Скачать демо
. Задать вопрос
. F.A.Q.



Использование TS Link. Пример вычисления оптимального F в TradeStation с использованием Excel.

Пример основан на методе управления капиталом «оптимальное f». Напомню, задача описываемого метода состоит в нахождении такого значения fопт, при котором расчётный капитал (TWR) становится максимальным. Следовательно, при получении результата очередного трейда необходимо заново решать задачу оптимизации. Это нетрудно делать и вручную, если система делает один трейд в день. Но если количество трейдов ежедневно большое, и обсчитывается не одна бумага, то уже после пары торговых дней за голову можно схватиться. В этом случае появляется необходимость в автоматизации этой рутинной операции.

Выполнять такую оптимизацию в рамках стратегии довольно сложно, хотя возможно. Но замечу, что обычно непростые, с точки зрения алгоритма, вычислительные задачи довольно легко решаются в специализированном пакете MS Excel tm. В нём есть и мощный «математический аппарат», и удобный/гибкий VB. Отсюда напрашивается вывод: зачем делать «мартышкин труд» по разработке подобных оптимальному f методов, основываясь на непредназначенных для этого инструментах. С помощью библиотеки TSLink.dll можно делать на Excel‘e всю «математику», а стратегию, использующую эту математику, строить на Omega ProSuite – и это хорошо J

Ниже описывается пример использования именно такой связки Omega<–>TSLink<–>Excel для системы, максимизирующей f. Необходимые формулы и собственно методика расчётов были взяты из статьи Дмитрия Толстоногова Основы Money Management III

Торговая система состоит из двух частей. В первой части происходит генерация сигналов на вход в позицию. Алгоритм прост – система реверсивная, т.е. сигналом на выход из короткой позиции служит сигнал на вход в длинную, и наоборот. Для открытия длинной позиции необходимо увеличение TypicalPrice выше порогового значения PToChange, и наоборот уменьшение ниже – для открытия короткой позиции.

Во втором блоке торговой системы происходит, собственно, обмен с Excel’ем. В момент сигнала открытия новой позиции происходит вычисление профита позиции, его передача в Excel и последующая оптимизация f.

Профит вычисляется по формуле PositionProfit(1)/(EntryPrice(1)*MaxContracts(1)). Результирующее значение в процентах (от 0 до 100 %%) получается отрицательным в случае убытка и положительным в случае получения прибыли. Далее, профит и необходимые формулы передаются в очередную строку рабочего листа Excel. При условии, что количество трейдов больше минимально необходимого для корректной оптимизации (это поле MinTradeToOpt сигнала F_optF), происходит запись единицы в поле H2 таблицы Excel. При обнаружении 1-ы в этой ячейке выполняется Excel’евский макрос, который и производит оптимизацию f.

{Сигнал F_optF – стратегия, передача полученного профита и оптимизация.}

Input:

Price((H+L+C)/3),

PToChange(4.), {Max correction to change trend}

InitCapital(100000), {Initial capital to trade}

TSLink(0), {0 - dont work TSLink.dll 1 - work}

MinTradeToOpt(10), {Minimum amount an trades for beginning of optimization}

Path(""), {Path to Excel file with obligatory sign \ on end}

NameFile(""); {name of Excel file}

Var:

Trend(0), LL(99999), HH(0), MP(0), Trades(0),

Str(""), Tr2(""), Tr3(""), Kap(""), PProf(0);

{Declaration TSLink.dll functions}

defineDLLFunc: "tslink.dll", int, "TS_StartExcel",LPSTR,LPSTR; {initalisation excel file 1 - Short BookName, 2 - full path bookname}

defineDLLFunc: "tslink.dll", int, "TS_SetValue",float,int,int,int,int; {value, sh num, row, column, spleep milisekonds}

defineDLLFunc: "tslink.dll", float, "TS_GetValue",int,int,int,int; {sh num, row, column, spleep milisekonds}

defineDLLFunc: "tslink.dll", int, "TS_SetString",lpstr,int,int,int,int; {text, sh num, row, column, spleep milisekonds}

defineDLLFunc: "tslink.dll", lpstr, "TS_GetString",int,int,int,int; {sh num, row, column, spleep milisekonds}

{End declaration}

MP = MarketPosition;

Trades = totaltrades;

Tr2 = numtostr(trades+2,0);

Tr3 = numtostr(trades+3,0);

Kap = numtostr(InitCapital,0);

{****************** Generate trend signal *******************}

if MP <= 0 then

begin

if Price < LL then LL = Price;

if Price cross above LL*(1 + PToChange*.01) then

begin

Trend = 1;

{растущий тренд}

HH = Price;

end;

end;

if MP >= 0 then

begin

if Price > HH then HH = Price;

if Price cross below HH*(1 - PToChange*.01) then

begin

Trend = -1;

{падающий тренд}

LL = Price;

end;

end;

{Generate entries}

if trend = 1 and trend[1] <> 1 then buy("OpenLong") at market;

if trend = -1 and trend[1] <> -1 then sell("OpelShort") at market;

{******************** End of ***********************}

{***************** Interface with Excel ***************}

if (TSLink=1) and (Path<>"") and (NameFile <> "") then

begin

{****** если первый бар, то открывается Excel файл, происходит очистка рабочей области Excel файла и запись размера InitCapital в Excel *******}

if currentbar = 1 then

begin

Value22 = TS_StartExcel(NameFile,Path+NameFile);

{Begin clear workspace}

TS_SetValue(1,1,1,8,0);

{Write InitCapital in to workspace}

TS_SetValue(InitCapital,1,2,1,0);

end;

{*************************************}

{********** Запись текущего количества трейдов, профита, формулы HPR, в зависимости от того первая или нет сделка запись формулы для TWR и Equity }

if trades <> trades[1] then

begin

{Writing an amount of trades}

TS_SetValue(trades,1,2,4,0);

{Writing an profit of trades}

TS_SetValue(round(positionProfit(1)/(EntryPrice(1)*MaxContracts(1)),3),1,trades+3,1,0);

{Write HPR}

TS_SetString("=1-C$2*A"+Tr3+"/B$2",1,trades+3,2,0);

if Trades=1 then

begin

TS_SetString("=B4",1,trades+3,3,0);

TS_SetString("=A$2*C4",1,trades+3,4,0);

end

else

begin

TS_SetString("=C"+Tr2+"*B"+Tr3,1,trades+3,3,0);

TS_SetString("=A$2*C"+Tr3,1,trades+3,4,0);

end;

{***************** }

{Begin optimization}

if trades>MinTradeToOpt then TS_SetValue(1,1,2,8,0);

end;

end;

Метод Change в файле OptF.xls, Лист1

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("H4").Value = 1 Then

Range("H4").Value = 0

Rows("5:5").Select

Selection.Delete Shift:=xlUp

End If

If Range("H1").Value = 1 Then

Range("H1").Value = 0

Range("A4:E1009").Select

Selection.ClearContents

EnableCalculation = False

' Worksheets(1).Calculate

End If

If Range("H2").Value = 1 Then

Range("H2").Value = 0

EnableCalculation = True

Dim pr

pr = "$C$" + Range("E2").Text

SOLVER.SolverReset

SOLVER.SolverAdd CellRef:="$C$2", Relation:=1, FormulaText:="1"

SOLVER.SolverAdd CellRef:="$C$2", Relation:=3, FormulaText:="0"

SOLVER.SolverOk SetCell:=pr, MaxMinVal:=1, ValueOf:="0", ByChange:="$C$2"

' "$C$" + Str(Range("D2").Value + 3)

' "$C$109"

SOLVER.SolverSolve UserFinish:=True

EnableCalculation = False

End If

If Range("H3").Value = 1 Then

Range("H3").Value = 0

Worksheets(1).Calculate

End If

End Sub

Настройки стратегии F_optF:

  • Commission – amount 50$ Per Transaction (если в одной сделке оперировать капиталом 100000$ это будет означать 0,05% комиссии)
  • Generate order for next bar – установлена.

Входные параметры стратегии, в основном, по умолчанию, лишь LotSize зависит именно от вашей бумаги, а Path и NameFile от местоположения и названия экселевского файла (в данном случае C:\ и OptF.xls)

В исходных текстах приведены комментарии к основным участкам кода. Для просмотра и редактирования макроса в экселевском файле, необходимо в Excel -> меню Сервис -> подменю Макрос выбрать пункт Редактор Visual Basic. Потом на объекте Лист1 сделать просмотр кода (меню View, Code).

Замечу, что изначально не ставилась задача как либо улучшить или комментировать эффект от применения метода оптимального f. Для этого стоит рассматривать так называемые производные методы: безопасное f, оптимальное f с учётом волатильности и т.п.

Приведённый пример – это механическая реализация возможности использовать VB и математический аппарат, встроенный в Excel, не более того. Основная цель – показать эффективность взаимодействия Excel’я и Omega Trade Station для решения сложных математических задач.

В следующей статье я покажу возможности автоматизации работы с заявками на примере широко распространенной торговой системы Quik в связке с Omega Trade Station.


|Скачать демо| TS Link Optimal F Tools| Как купить| Задать вопрос| F.A.Q.| Online Help|

Алексей Фролов (FAV)
dlfav@newmail.ru



 В начало  | Контакты  | Карта сайта  | Disclaimer  | Privacy Statement 
Copyright © TS Research Group 2002, e-mail: info@tsresearchgroup.com.  Developed by webdesign.tria.lv