Автор |
Сообщение |
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
Вот занялся sigScaleIn SigScaleOut - может пояснишь - так и не понял что это за жуткие цифири и как их юзать
|
Сигналы sigScaleIn и SigScaleOut добавляют и сокращают размер позициипри этом не открывая новую позицию. Изменяется только размер открытой позиции и цена открытия. При этом позиция не закрывается даже если её размер равен 0.
Прстой пример двух систем с дабавлением и сокращением позиции
Код: |
///////// система 1 /////////
Buy1 = Cross(MACD(), Signal());
Sell1 = Cross(Signal(), MACD());
///////// система 2 /////////
Buy2 = Cross(StochK(), StochD());
Sell2 = Cross(StochD(), StochK());
///////// Объединяем системы /////////
SetPositionSize(1, 4); // торгуем одним лотом
Buy = Buy1*sigScaleIn + Buy2*sigScaleIn + Sell1*sigScaleOut + Sell2*sigScaleOut;
Sell = 0;
|
В настройках тестера необходимо установить Position Long
Недостаток такого подхода в том, что в итоге тестер покажет только одну сделку, которая на самом деле всевремя изменялась на протяжении всей истории. Если захочется посмотреть изменение позиции, то в настройках тестера на закладке Report нужно включить опцию Detailed Log.
На мой взгляд более удобный способ заключается в том, чтобы создать в базе несколько одниаковых инструментов с разными названиями.
Этот способ описан тут http://heaventrading.wordpress.com/2008/02/19/multisystem-backtester-part1/
В двух словах. Создаем да одинаковых инструмента с разными названиями в базе. Например SPFB.RTS и SPFB.RTS1 Далее делаем код типа
Код: |
SetPositionSize(1, 4); // торгуем одним лотом
///////// система 1 /////////
if(Name() == SPFB.RTS)
{
Buy = Cross(MACD(), Signal());
Sell = Cross(Signal(), MACD());
}
///////// система 2 /////////
if(Name() == SPFB.RTS1)
{
Buy2 = Cross(StochK(), StochD());
Sell2 = Cross(StochD(), StochK());
}
|
и прогоняем её на портфеле из этих "двух" бумаг. В результате одна система торгует на "первой" бумаге, а другая на "второй".
В итоге видо все сделки и общий результат работы этих систем. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
pitero
Зарегистрирован: 09.06.2008
Сообщения: 65
Откуда: Екатеринбург
|
000 писал(а): |
На мой взгляд более удобный способ заключается в том, чтобы создать в базе несколько одниаковых инструментов с разными названиями.
В результате одна система торгует на "первой" бумаге, а другая на "второй".
В итоге видо все сделки и общий результат работы этих систем. |
Идея! Попробую.
Но вот основной смысл "объединения" систем - это таки объединить х систем на разных таймфрэймах. Две системы-один фрэйм это упрощенная задача. Самый интерес - это "сокращение" сигналов или размера позиции (если стоим в позе по большому таймфрэйму и получаем противоположный). Ну и самое неприятное в решении с 2мя тикерами - это управление плечами. При тестировании на истории (в группе просто 4 фьюча RIхх , чтоб не склеивать) каждый новый фьюч начинает считаться с первоначального размера депо, хотя депо уже отнюдь не первоначального размера. В итоге если система с ММ и плечами - протестить можно очень приблизительно. Вплоть до получения в реалии сливной просадки. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
pitero
Зарегистрирован: 09.06.2008
Сообщения: 65
Откуда: Екатеринбург
|
000 писал(а): |
Buy = Buy1*sigScaleIn + Buy2*sigScaleIn + Sell1*sigScaleOut + Sell2*sigScaleOut;
Sell = 0;
В настройках тестера необходимо установить Position Long
|
Вдогонку - а реверсную систему с sigScale не написать что-ли? Принудительно закрыть сделку даже если размер=0 никак нельзя? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
pitero писал(а): |
Но вот основной смысл "объединения" систем - это таки объединить х систем на разных таймфрэймах. Две системы-один фрэйм это упрощенная задача. Самый интерес - это "сокращение" сигналов или размера позиции (если стоим в позе по большому таймфрэйму и получаем противоположный). Ну и самое неприятное в решении с 2мя тикерами - это управление плечами. При тестировании на истории (в группе просто 4 фьюча RIхх , чтоб не склеивать) каждый новый фьюч начинает считаться с первоначального размера депо, хотя депо уже отнюдь не первоначального размера. В итоге если система с ММ и плечами - протестить можно очень приблизительно. Вплоть до получения в реалии сливной просадки. |
Портфельный тестер Ами учитывает уже открытые позиции по "другим" инструментам. Он считает как общее число уже открытых позиций так и учитывает средства связанные уже открытыми позициями по другим инсрументам. Проблемма действительно есть с тестированием на разных фреймах, т.к. в настройках тестера придется указать минимальный тестируемый фрейм, а остальные системы делать через изменение фрейма в коде (но это проблемма только кодирования систем) |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
pitero писал(а): |
Вдогонку - а реверсную систему с sigScale не написать что-ли? Принудительно закрыть сделку даже если размер=0 никак нельзя? |
Необходимо иметь правила полного закрытия позиций. Sell = 1; Закрывает позиции полностью не зависимо от сайза. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Сергей
Зарегистрирован: 16.03.2008
Сообщения: 168
|
Олег подскажи вот у меня две разные системы для каждой бумаги своя, они колбасятся каждая в своем окне, но у каждой робот сделки пишет в один файл который для квика, подскажи может быть здесь конфликт? Или как это можно красивее сделать? |
Последний раз редактировалось: Сергей (Вт Ноя 18, 2008 10:28 pm), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Робот, как я понял этот http://www.russian-trader.ru/articles/automate.php
Все должно быть нормально. Возможен только один косяк. Не знаю как сработают коды если будет попытка одновременного открытия tri (если Ами такое сделает).
Но я бы сделал всеравно через АА. Только в коде записи системы надо её разделить на 2 в зависимости от символа. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Сергей
Зарегистрирован: 16.03.2008
Сообщения: 168
|
000 писал(а): |
Робот, как я понял этот http://www.russian-trader.ru/articles/automate.php
Все должно быть нормально. Возможен только один косяк. Не знаю как сработают коды если будет попытка одновременного открытия tri (если Ами такое сделает).
Но я бы сделал всеравно через АА. Только в коде записи системы надо её разделить на 2 в зависимости от символа. |
Да робот оттуда, а как через АА, только не ругайся не очень понимаю это, т.е. две системы в одном коде? Но котировки то разные? Системы в принципе похожи только параметры для каждой бумаги свои. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
а как через АА, только не ругайся не очень понимаю это
|
Вот так http://www.amisite.ru/afl/exp/0001.htm
АА это Автоматический Анализатор
Цитата: |
т.е. две системы в одном коде? Но котировки то разные?
|
Очень просто. Пишешь примерно так
Код: |
if (Name() == "RIZ8")
{
Правила системы или параметры для RIZ8
}
else if(Name() == "SPZ8")
{
Правила системы или параметры для SPZ8
}
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Сергей
Зарегистрирован: 16.03.2008
Сообщения: 168
|
000 писал(а): |
Цитата: |
а как через АА, только не ругайся не очень понимаю это
|
Вот так http://www.amisite.ru/afl/exp/0001.htm
АА это Автоматический Анализатор
Цитата: |
т.е. две системы в одном коде? Но котировки то разные?
|
Очень просто. Пишешь примерно так
Код: |
if (Name() == "RIZ8")
{
Правила системы или параметры для RIZ8
}
else if(Name() == "SPZ8")
{
Правила системы или параметры для SPZ8
}
|
|
А на экране два разных графика? И еще АА будет прогонять системы с периодичностью 1 сек или сделка будет писаться по факту поступления сигнала сигнала? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
А на экране два разных графика?
|
На экране что хочешь, не влияет, в том и фишка. Главное чтобы в Ами была открыта база в которой есть эти котировки.
Цитата: |
И еще АА будет прогонять системы с периодичностью 1 сек или сделка будет писаться по факту поступления сигнала сигнала?
|
С периодичностью в 1 сек он будет проверять поступление новых сигналов (это слишком редко)? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Сергей
Зарегистрирован: 16.03.2008
Сообщения: 168
|
000 писал(а): |
Цитата: |
А на экране два разных графика?
|
На экране что хочешь, не влияет, в том и фишка. Главное чтобы в Ами была открыта база в которой есть эти котировки.
Цитата: |
И еще АА будет прогонять системы с периодичностью 1 сек или сделка будет писаться по факту поступления сигнала сигнала?
|
С периодичностью в 1 сек он будет проверять поступление новых сигналов (это слишком редко)? |
Да не быстро)
Просто хотелось чтобы система в реалтайме по поступлению сигнала отправляла запись, так скажем по собственной инициативе, а не когда ее АА проверит. Я вот думаю есть ли такое средство чтобы в один код как бы подтягивало обе котировки в реалтайме, надеюсь понял что я хотел написать |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Фиг знает. Может можно и быстрее... Написать не 1sec? а 0,5sec я не пробовал...
Цитата: |
Я вот думаю есть ли такое средство чтобы в один код как бы подтягивало обе котировки в реалтайме
|
В принципе можно. Функция foreign() |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
Фиг знает. Может можно и быстрее... Написать не 1sec? а 0,5sec я не пробовал...
|
Попробовал. Быстрее не получается. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Сергей
Зарегистрирован: 16.03.2008
Сообщения: 168
|
000 писал(а): |
Фиг знает. Может можно и быстрее... Написать не 1sec? а 0,5sec я не пробовал...
Цитата: |
Я вот думаю есть ли такое средство чтобы в один код как бы подтягивало обе котировки в реалтайме
|
В принципе можно. Функция foreign() |
Во точно, пойду разбираться, спасибо Олег
if (Name() == "RIZ8")
{
Правила системы или параметры для RIZ8
}
else if(Name() == "SPZ8")
{
Правила системы или параметры для SPZ8
}
Я так понял что то типа этого тока Name по менять на foreign() |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|