Автор |
Сообщение |
rcoma
Зарегистрирован: 19.10.2009
Сообщения: 21
|
Продолжаю разбираться в тестере..
теперь волнует тестирование арбитражных стратегий.
а именно:
в момент сигнала нужно купить одну бумагу, продать другую. для простоты это сделать, скажем, по клоузу дня. |
_________________ Мой сайт: http://earlytrade.livejournal.com/ |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А в чем проблема то? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
rcoma
Зарегистрирован: 19.10.2009
Сообщения: 21
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ну давай научу.
Во первых. Нам надо в одном коде использовать данные нескольких бумаг одновременно. Это делается функцией Foreign()
Для примера возьму фьючи газа и сбера
Код: |
Gaz = Foreign("SPFB.GAZR", "Close");
Sber = Foreign("SPFB.SBER", "Close");
|
Надо какой никакой метод для примера. Возьмем % моментум обеих бумаг и если разница больше некоторого порогового значения, то одну покупаем другую продаем. Когда выровняется закрываем обе сделки.
Моментумы.
Код: |
per = 10;
MomGaz = (Gaz - Ref(Gaz, - per))/Ref(Gaz, - per);
MomSber = (Sber - Ref(Sber, - per))/Ref(Sber, - per);
|
Далее нам нужен код который определяет какая именно бумага сейчас тестируется и применяет к ней правила Buy/Sell/Short/Cover
Причем правила должны быть зеркальными для разных бумаг
Еще один момент. Надо сайзы выровнять. Ну будем считать, что Газ в среднем в 4 раза дороже сбера, поэтому покупаем 1 газ продаем 4 сбера и наоборот. Это дело регулируем функцией SetPositionSize
Цитата: |
if(Name() == "SPFB.GAZR")
{
SetPositionSize(1, 4);
Buy = Cross(MomGaz - MomSber, 0.02);
Sell = Cross(0, MomGaz - MomSber);
Short = Cross(-0.02, MomGaz - MomSber);
Cover = Cross(MomGaz - MomSber, 0);
}
if(Name() == "SPFB.SBER")
{
SetPositionSize(4, 4);
Short = Cross(MomGaz - MomSber, 0.02);
Cover = Cross(0, MomGaz - MomSber);
Buy = Cross(-0.02, MomGaz - MomSber);
Sell = Cross(MomGaz - MomSber, 0);
}
|
Итого готовый код
Код: |
per = 10;
Gaz = Foreign("SPFB.GAZR", "Close");
Sber = Foreign("SPFB.SBER", "Close");
MomGaz = (Gaz - Ref(Gaz, - per))/Ref(Gaz, - per);
MomSber = (Sber - Ref(Sber, - per))/Ref(Sber, - per);
if(Name() == "SPFB.GAZR")
{
SetPositionSize(1, 4);
Buy = Cross(MomGaz - MomSber, 0.02);
Sell = Cross(0, MomGaz - MomSber);
Short = Cross(-0.02, MomGaz - MomSber);
Cover = Cross(MomGaz - MomSber, 0);
}
if(Name() == "SPFB.SBER")
{
SetPositionSize(4, 4);
Short = Cross(MomGaz - MomSber, 0.02);
Cover = Cross(0, MomGaz - MomSber);
Buy = Cross(-0.02, MomGaz - MomSber);
Sell = Cross(MomGaz - MomSber, 0);
}
|
Далее тестируем на этих двух бумагах. Получаем примерно так. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
rcoma
Зарегистрирован: 19.10.2009
Сообщения: 21
|
000 писал(а): |
Ну давай научу.
...
|
Спасибо большое!
гораздо проще чем я себе думал получается. Просто дополнительное условие по тикеру вставить и зеркальный вход для второй половины добавить. |
_________________ Мой сайт: http://earlytrade.livejournal.com/ |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
kyiv.maxim
Зарегистрирован: 26.03.2010
Сообщения: 23
|
|
Посмотреть профиль Отправить личное сообщение |
|
|