Вызов одной стратегии из другой

8/20/2010 9:15:02 PM
Gravatar
Total Posts 1

Вызов одной стратегии из другой

Здравствуйте. Как в WL можно вызвать одну стратегию из другой?

8/20/2010 10:11:06 PM
Gravatar
Total Posts 115

RE:Вызов одной стратегии из другой

Легче всего сделать это, создав новый класс с методом, принимающим на вход объект типа WealthScript (где будет реализована вызываемая стратегия), и вызывать его из метода Execute() исходной стратегии, передавая this в качестве аргумента.

8/27/2010 12:26:11 AM
Gravatar
Total Posts 14

RE:Вызов одной стратегии из другой

Скажите, если подразумевается использование нескольких стратегий одновременно, то как "логически" и в коде отделить их друг от друга? Есть ли что-то вроде "context" для стратегии?

8/27/2010 5:15:42 PM
Gravatar
Total Posts 115

RE:Вызов одной стратегии из другой

Активных стратегий может быть несколько, они могут работать на разных таймфреймах, бумагах, счетах пользователя. Таким образом, все заявки должны иметь следующие признаки:

•Имя стратегии

•Таймфрейм

•Бумага

•Счет

Имея эти данные, стратегия загружает историю своих сделок и имеет данные о текущей позиции на рынке. Остальные стратегии загружают только свои сделки и позиции не смешиваются.

Также Вы можете использовать метод SetContext(), который, кроме базовой функциональности, вызывает загрузку сделок стратегии по заданной бумаге.

8/27/2010 7:06:57 PM
Gravatar
Total Posts 142

RE:Вызов одной стратегии из другой

Скажите, пожалуйста, как смешать анализ на разных таймфреймах?

Скажем, я работаю на 15минутках, но мне нужно, к примеру, смотреть, что происходит в текущей 15минутке на 7 минуте. Как к этой 7й минуте получить доступ?

Как тогда должен выглядеть код? Примерный код для предыдущего или любого прошедшего бара я знаю, например:

//...

SetScaleCompressed(15);

int minuteIndex = 0;

For (int fifteenIndex=0; fifteenIndex <= Bars.Count - 1; fifteenIndex++)

{

SetScaleCompressed(1);

minuteIndex = (fifteenIndex - 1) / 15;//считаем индекс предыдущего бара

int closeValue = Bars.Close[minuteIndex + 7];//обращаемся к 7 минуте предыдущего 15минутного

X бара

}

//...

Есть ли какой-то более правильный и удобный способ?

8/27/2010 8:18:36 PM
Gravatar
Total Posts 115

RE:Вызов одной стратегии из другой

Чтобы получать доступ к 7-ой минуте 15-минутного бара нужно запускать стратегию на минутных барах и использовать SetScaleCompressed(15) перед выставлением заявок.

7-ую минуту можно определять, скажем, следующим способом:

[CODE]DateTime CurrentDate = Bars.Date[0];

for (int bar = 0; bar < Bars.Count; bar++)

{

//Если перешли на следующий день, меняем время, от которого отсчитываем 7-минутные интервалы

if (Bars.Date[bar].Date > CurrentDate.Date)

CurrentDate = Bars.Date[bar];

if ((Bars.Date[bar] - CurrentDate).TotalMinutes % 7 == 0)

//Здесь операции с 7-ым баром

}

}[/CODE]

8/27/2010 8:46:31 PM
Gravatar
Total Posts 142

RE:Вызов одной стратегии из другой

[QUOTE]WL Support пишет:

Чтобы получать доступ к 7-ой минуте 15-минутного бара нужно запускать стратегию на минутных барах и использовать SetScaleCompressed(15) перед выставлением заявок.

7-ую минуту можно определять, скажем, следующим способом:

[CODE]DateTime CurrentDate = Bars.Date[0];

         for (int bar = 0; bar < Bars.Count; bar++)

         {

//Если перешли на следующий день, меняем время, от которого отсчитываем 7-минутные интервалы

            if (Bars.Date[bar].Date > CurrentDate.Date)

               CurrentDate = Bars.Date[bar];

            

            if ((Bars.Date[bar] - CurrentDate).TotalMinutes % 7 == 0)

               //Здесь операции с 7-ым баром

         }

}[/CODE][/QUOTE]

Собственно, это был один из 2 рабочих способов, который я использовал - работа на минутках и затем проверка каждых 7х, 15х, 8х, делением на соответствующее число и проверкой на остаток. Думал, есть какие-то стандартные средства.

За помощь всё равно большое спасибо!

8/27/2010 8:58:52 PM
Gravatar
Total Posts 115

RE:Вызов одной стратегии из другой

Обратите внимание на то, что это намного "более правильный" способ. Он не приводит к недоразумениям в тех случаях, когда 15-минутный бар составлен не из 15-ти баров по 1 мин, а из меньшего их числа. Обращение к 7-ому бару с помощью Bars.Close[minuteIndex + 7] в таком случае не приводит к желаемому результату, а явная проверка на равенство нулю остатка от деления на 7 количества минут, прошедших с начала дня, - приводит.