Автор |
Сообщение |
pylyp
Зарегистрирован: 21.09.2012
Сообщения: 80
|
Приветствую!
Я не могу найти опцию в Ami, где можно нарисовать импортировать все кривую капитала (включая те дни, в которых система была вне рынка).
Пример:
Стратегия основана на пересечении кривых капитала двух стратегий.
Банальный пример: берем стратегию пересечения средних смотрим, как изменяется кривая капитала. Строим график кривой капитала
Берем вторую стратегию - Стохастик. Тестируем. Рисуем и там кривую капитала.
Дальше накладываем две кривые капитала одну на другую.
Как видно одна будет работат хорошо в тренде вторая во флете.
И дальше начинаем торговать. Соответственно, торгуем по первой стратегии, а когда пересекаются кривая капитала опускается ниже второй кривой мы торгуем по второй стратегии.
Мне нужно эту идею протестировать на исторических данных.
Вопрос №1: Можно ли забить то что я описал в код AFL?
Вопрос №2: Можно ли хотя бы экспортировать в Excel сделки по днях, в том числе с учетом тех дней, в которых система была вне рынка (см. рис ниже, взял его с MetaStock, закладка Equity)? Тогда можно бы было наложить две кривые капитала одну на другую.
Заранее благодарю. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Mechanic
Зарегистрирован: 10.06.2008
Сообщения: 359
|
Портфельный тестер создаёт новый инструмент "~~~EQUITY", в котором, собственно, эквити и находится. Прогоните тест первой системы, переименуйте созданную "~~~EQUITY" в "Stoch_Equity" (только напрямую символ переименовать нельзя, а создайте новый символ с нужным именем и скопируйте в него данные из "~~~EQUITY" через Symbol->Merge), потом то же самое сделайте со второй системой. Получите два символа с эквити ваших систем, к которым можно обращаться из кода через Foreign() - отображать на графике, тестировать пересечение и т.д. Их же и в текстовик можно скриптом перегнать, как любой другой символ. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Можно и по другому.
Код: |
// Система 1
Buy = Buy1 = ...;
Sell = Sell1 = ...;
Eq1 = Equity(1);
Buy = 0;
Sell = 0;
// Система 2
Buy = Buy2 = ...;
Sell = Sell2 =...;
Eq2 = Equity(1);
Buy = 0;
Sell = 0;
// Система по эквити
Buy = ...Eq1...Eq2...Buy1...Buy2;
Sell = ...Eq1...Eq2...Sell1...Sell2; |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег.
Последний раз редактировалось: 000 (Вт Сен 25, 2012 10:56 am), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Mechanic
Зарегистрирован: 10.06.2008
Сообщения: 359
|
000 писал(а): |
Можно и по другому. |
Так удобнее, конечно, но работать будет только если тестируется один инструмент. Если речь о тесте портфеля, то только танцы с бубном через ~~~Equity.
Кстати, зачем в твоём примере Equity(2)? Опечатка поди? |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
С замечанием согласен.
Точно опечатка. Исправил. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
pylyp
Зарегистрирован: 21.09.2012
Сообщения: 80
|
Спасибо за совет.
Только не совсем понятно что вписать после //Система по Equity?
/ Система по Equity
Buy = Eq1; Eq2; Buy1; Buy2;
Sell = ...Eq1...Eq2...Sell1...Sell2;[/code]
Сейчас код выгладит так:
Код: |
// Trix 1
period1=Optimize("period1",3,3,30,5);
period2=Optimize("period2",15,30,60,5);
Buy = buy1= Cross(Trix(period1), Trix(period2)) AND Trix(period1)>Trix(60);
ApplyStop(stopTypeLoss,stopModePoint,2*ATR(10),True );
Sell= sell1 = Cross(Trix(period2),Trix(period1)) AND Trix(period1)>Trix(60);
Eq1 = Equity(1);
Buy = 0;
Sell = 0;
// Stoch 2
period1= Optimize("period1",90,70,100,2);
period2= Optimize("period2",7,1,30,2);
Buy = Ref(StochD(14,3),-1)<period1 AND StochD(14,3)>period1;
ApplyStop(stopTypeLoss,stopModePoint,2*ATR(14),1);
Sell = Cross(StochD(14,3),period1)OR Cross(StochD(14,3),period2);
Short = Ref(StochD(14,3),-1)> period2 AND (StochD(14,3)<period2);
ApplyStop(stopTypeLoss,stopModePoint,2*ATR(14),1);
Cover = Cross(StochD(14,3),period2)OR Cross(StochD(14,3),period1);
Eq2 = Equity(2);
Buy = 0;
Sell = 0;
// Система по Equity
Buy = Eq1; Eq2; Buy1; Buy2;
Sell = ...Eq1...Eq2...Sell1...Sell2; |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Хм. ApplyStop(stopTypeLoss,stopModePoint,2*ATR(14),1);...
Откровенно говоря не знаю как анулировать эту функцию.
У тебя есть ошибка.
Во второй системе пиши period3 и period4
А в конце типа так
Код: |
Buy = IIf(Eq1 > Eq2, Buy1, Buy2); |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
По поводу анулирования стопов предыдущей системы.
Попробуй там где
Еще добавить
Код: |
ApplyStop(stopTypeLoss,stopModeDisable,2*ATR(14),1); |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
pylyp
Зарегистрирован: 21.09.2012
Сообщения: 80
|
Супер, заработало!!!!
Спасибо!
Только хотелось бы еще проверить:
1. Был ли выход по стопу и когда на графике (ApplyStop)
2. Когда работала первая система, а когда вторая?
Можно ли это отобразить на графике? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
pylyp
Зарегистрирован: 21.09.2012
Сообщения: 80
|
Да, что-то мне кажется, что ApplyStop она не захватила. См. рисунок...
Хотя я ApplyStop и прописал. Сейчас код выглядит вот так:
Код: |
// Trix 1
period1=Optimize("period1",3,3,30,5);
period2=Optimize("period2",15,30,60,5);
Buy = buy1= Cross(Trix(period1), Trix(period2)) AND Trix(period1)>Trix(60);
ApplyStop(stopTypeLoss,stopModePoint,2*ATR(10),True );
Sell= sell1 = Cross(Trix(period2),Trix(period1)) AND Trix(period1)>Trix(60);
Eq1 = Equity(1);
Buy = 0;
Sell = 0;
ApplyStop(stopTypeLoss,stopModeDisable,2*ATR(14),1);
// Stoch 2
period1= Optimize("period1",90,70,100,2);
period2= Optimize("period2",7,1,30,2);
Buy = Buy2 = Ref(StochD(14,3),-1)<period1 AND StochD(14,3)>period1;
ApplyStop(stopTypeLoss,stopModePoint,2*ATR(14),1);
Sell = Sell2 = Cross(StochD(14,3),period1)OR Cross(StochD(14,3),period2);
Short = Ref(StochD(14,3),-1)> period2 AND (StochD(14,3)<period2);
ApplyStop(stopTypeLoss,stopModePoint,2*ATR(14),1);
Cover = Cross(StochD(14,3),period2)OR Cross(StochD(14,3),period1);
Eq2 = Equity(2);
Buy = 0;
Sell = 0;
ApplyStop(stopTypeLoss,stopModeDisable,2*ATR(14),1);
// Система по Equity
Buy = IIf(Eq1>Eq2, Buy1, Buy2);
Sell = IIf(Eq1 > Eq2, Sell1, Sell2); |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
в данном место должен был сработать следящий стоп. А он не сработал.
|
А у тебя в коде вроде нет трейлинга....
Для того, чтобы смотреть где какая система работает надо написать специальный индикатор.... Его не сложно сделать из этой системы. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
pylyp
Зарегистрирован: 21.09.2012
Сообщения: 80
|
Так..
Поменял ApplyStop. Теперь он выглядит так:
ApplyStop(stopTypeTrailing,stopModePoint,2*ATR(10),True );
Все равно не срабатывает.
Формула трелинга должна выглядеть так:
1. (Цена покупки-2*ATR)="стоп лосс". Фиксируем эту разницу. Этот стоп лосс остается постоянным на протяжении всей сделки.
2. Далее, начиная со следующего бара от максимума отнимаем "стоп лосс" (СЛ).
3. Если цена идет вверх - подтягиваем СЛ. Если цена идет вниз или остается на месте - СЛ не изменяем. Когда цена пересекает СЛ - закрываем позицию.
Где косяк в формуле? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Если фиксируем, то должно быть Volatile = FALSE |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
pylyp
Зарегистрирован: 21.09.2012
Сообщения: 80
|
000 писал(а): |
Если фиксируем, то должно быть Volatile = FALSE |
Ок. подставил - пошло.
Все супер спасибо. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|