Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Помогите разобраться: Бэктестинг Бета-нейтрального подхода. Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
krest



Зарегистрирован: 06.04.2015
Сообщения: 3
Откуда: Ростов на Дону

СообщениеДобавлено: Сб Ноя 26, 2016 6:30 pm Ответить с цитатой Вернуться к началу

Здравствуйте, уважаемые!

Нашел тут: http://y-dav.livejournal.com/tag/%D0%A0%D1%8B%D0%BD%D0%BE%D1%87%D0%BD%D0%BE-%D0%BD%D0%B5%D0%B9%D1%82%D1%80%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%20%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%B5%D0%B3%D0%B8%D0%B8#post-y_dav-8289

код для тестирования. Заинтересовался, решил попробовать. Ами знаю слабо, программировать не умею, поэтому наверняка мой вопрос покажется вам наивным...
В общем, ничего у меня проверить не получилось. Пробовал и сканировать и тестировать- никакого результата... Если тестирую выдается ошибка о том что в коде нет приказов на покупку и продажу:
Error 701. Missing buy/sell variable assignments.

Полагаю, что делаю что-то неправильно... Подскажите, как добиться результата от этого кода?

////// Общие Настройки //////
SetBarsRequired( sbrAll );
ChartType=ParamList("Chart Type","Net Profit|Potential Profit|Potential Loss|Postion Value|Deviation");
PriceType=ParamList("Price Type","Deal|Bid-Ask");
if(PriceType=="Deal"){
Price_LKOH=Foreign("LKOH","C");
Price_GAZP=Foreign("GAZP","C");
Price_SBER=Foreign("SBER","C");
Price_VTBR=Foreign("VTBR","C");
// Price_XXXX=Foreign("XXXX","C"); // Добавляем нужные бумаги
// Price_YYYY=Foreign("YYYY","C"); // Добавляем нужные бумаги
}
if(PriceType=="Bid-Ask"){
Price_LKOH=(Foreign("LKOH_bid","C")+Foreign("LKOH_ask","C"))/2;
Price_GAZP=(Foreign("GAZP_bid","C")+Foreign("GAZP_ask","C"))/2;
Price_SBER=(Foreign("SBER_bid","C")+Foreign("SBER_ask","C"))/2;
Price_VTBR=(Foreign("VTBR_bid","C")+Foreign("VTBR_ask","C"))/2;
// Price_XXXX=(Foreign("XXXX_bid","C")+Foreign("..._ask","C"))/2; // Добавляем нужные бумаги
// Price_YYYY=(Foreign("YYYY_bid","C")+Foreign("..._ask","C"))/2; // Добавляем нужные бумаги
}
////// Настройки Стратегии_1 //////
Amount_LKOH_1 = 10; // Задаем количество бумаг, (+) для Рабочих инструментов, (-) для Базисных
инструментов
Amount_GAZP_1 = -100; // Задаем количество бумаг, (+) для Рабочих инструментов, (-) для Базисных
инструментов
Step_1 = 200; // Задаем шаг котирования
FairSpread_1 = 0; // Задаем значение справедливого спреда
Spread_1=(Price_LKOH*Amount_LKOH_1)+(Price_GAZP*Amount_GAZP_1); // Суммируем
произведения цены и количества всех инструментов данной стратегии
Value_1=abs(Price_LKOH*Amount_LKOH_1)+abs(Price_GAZP*Amount_GAZP_1); // Суммируем
абсолютные произведения цены и количества всех инструментов данной стратегии
Round_1=round(Spread_1/Step_1)*Step_1;
RoundF_1=floor(Spread_1/Step_1)*Step_1;
RoundC_1=ceil(Spread_1/Step_1)*Step_1;
////// Настройки Стратегии_2 //////
Amount_SBER_2 = 200; // Задаем количество бумаг, (+) для Рабочих инструментов, (-) для Базисных
инструментов
Amount_VTBR_2 = -200000; // Задаем количество бумаг, (+) для Рабочих инструментов, (-) для
Базисных инструментов
Step_2 = 200; // Задаем шаг котирования
FairSpread_2 = 0; // Задаем значение справедливого спреда
Spread_2=(Price_SBER*Amount_SBER_2)+(Price_VTBR*Amount_VTBR_2); // Суммируем произведения
цены и количества всех инструментов данной стратегии
Value_2=abs(Price_SBER*Amount_SBER_2)+abs(Price_VTBR*Amount_VTBR_2); // Суммируем
абсолютные произведения цены и количества всех инструментов данной стратегии
Round_2=round(Spread_2/Step_2)*Step_2;
RoundF_2=floor(Spread_2/Step_2)*Step_2;
RoundC_2=ceil(Spread_2/Step_2)*Step_2;
/*
////// Настройки Стратегии_N //////
Amount_XXXX_N = 100; // Задаем количество бумаг, (+) для Рабочих инструментов, (-) для Базисных
инструментов
Amount_YYYY_N = -100; // Задаем количество бумаг, (+) для Рабочих инструментов, (-) для Базисных
инструментов
Step_N = 100; // Задаем шаг котирования
FairSpread_N = 0; // Задаем значение справедливого спреда
Spread_N=(Price_XXXX*Amount_XXXX_N)+(Price_YYYY*Amount_YYYY_N); // Суммируем
произведения цены и количества всех инструментов данной стратегии
Value_N=abs(Price_XXXX*Amount_XXXX_N)+abs(Price_YYYY*Amount_YYYY_N); // Суммируем
абсолютные произведения цены и количества всех инструментов данной стратегии
Round_N=round(Spread_N/Step_N)*Step_N;
RoundF_N=floor(Spread_N/Step_N)*Step_N;
RoundC_N=ceil(Spread_N/Step_N)*Step_N;
*/
////// Алгоритмы //////
for(i=0;i<1;i++)
{
CumMove_1[i]=0;
CumMove_2[i]=0;
// CumMove_N[i]=0; // Добавляем переменную CumMove_N для каждой новой Стратегии_N
}
for(i=1;i<BarCount;i++)
{
////// Алгоритм Стратегии_1 //////
if(Spread_1[i]>Round_1[i-1]) Round_1[i]=RoundF_1[i];
else Round_1[i]=RoundC_1[i];
Deviation_1[i]=Round_1[i]-FairSpread_1[i];
CumMove_1[i]=abs(Round_1[i]-Round_1[i-1])+CumMove_1[i-1];
PotentialProfit_1[i]=(CumMove_1[i]-abs(Deviation_1[i])+abs(Round_1[0]-FairSpread_1[0]))/2;
PotentialLoss_1[i]=(Step_1[i]*abs(Deviation_1[i])-(Deviation_1[i])^2)/(2*Step_1[i]);
NetProfit_1[i]=PotentialProfit_1[i]+PotentialLoss_1[i]-PotentialLoss_1[1];
PositionValue_1[i]=Value_1[i]*abs(Deviation_1[i])/Step_1[i];
////// Алгоритм Стратегии_2 //////
if(Spread_2[i]>Round_2[i-1]) Round_2[i]=RoundF_2[i];
else Round_2[i]=RoundC_2[i];
Deviation_2[i]=Round_2[i]-FairSpread_2[i];
CumMove_2[i]=abs(Round_2[i]-Round_2[i-1])+CumMove_2[i-1];
PotentialProfit_2[i]=(CumMove_2[i]-abs(Deviation_2[i])+abs(Round_2[0]-FairSpread_2[0]))/2;
PotentialLoss_2[i]=(Step_2[i]*abs(Deviation_2[i])-(Deviation_2[i])^2)/(2*Step_2[i]);
NetProfit_2[i]=PotentialProfit_2[i]+PotentialLoss_2[i]-PotentialLoss_2[1];
PositionValue_2[i]=Value_2[i]*abs(Deviation_2[i])/Step_2[i];
/*
////// Алгоритм Стратегии_N //////
if(Spread_N[i]>Round_N[i-1]) Round_N[i]=RoundF_N[i];
else Round_N[i]=RoundC_N[i];
Deviation_N[i]=Round_N[i]-FairSpread_N[i];
CumMove_N[i]=abs(Round_N[i]-Round_N[i-1])+CumMove_N[i-1];
PotentialProfit_N[i]=(CumMove_N[i]-abs(Deviation_N[i])+abs(Round_N[0]-FairSpread_N[0]))/2;
PotentialLoss_N[i]=(Step_N[i]*abs(Deviation_N[i])-(Deviation_N[i])^2)/(2*Step_N[i]);
NetProfit_N[i]=PotentialProfit_N[i]+PotentialLoss_N[i]-PotentialLoss_N[1];
PositionValue_N[i]=Value_N[i]*abs(Deviation_N[i])/Step_N[i];
*/
PotentialProfit[i]=PotentialProfit_1[i]+PotentialProfit_2[i]; // Суммируем переменные PotentialProfit_N всех
стратегий
PotentialLoss[i]=PotentialLoss_1[i]+PotentialLoss_2[i]; // Суммируем переменные PotentialLoss_N всех
стратегий
NetProfit[i]=NetProfit_1[i]+NetProfit_2[i]; // Суммируем переменные NetProfit_N всех стратегий
PositionValue[i]=PositionValue_1[i]+PositionValue_2[i]; // Суммируем переменные PositionValue_N всех
стратегий
}
////// Графики //////
if (ChartType=="Net Profit"){
Plot(NetProfit_1,"NetProfit_1",colorBlue,style=1);
Plot(NetProfit_2,"NetProfit_2",colorRed,style=1);
//Plot(NetProfit_N,"NetProfit_N",colorGreen,style=1); // Добавляем график NetProfit_N для каждой новой
Стратегии_N
Plot(NetProfit,"NetProfit",colorLightBlue,style=16384);}
if (ChartType=="Potential Profit"){
Plot(PotentialProfit_1,"PotentialProfit_1",colorBlue,style=1);
Plot(PotentialProfit_2,"PotentialProfit_2",colorRed,style=1);
//Plot(PotentialProfit_N,"PotentialProfit_N",colorGreen,style=1); // Добавляем график PotentialProfit_N для
каждой новой Стратегии_N
Plot(PotentialProfit,"PotentialProfit",colorLightBlue,style=16384);}
if (ChartType=="Potential Loss"){
Plot(PotentialLoss_1,"PotentialLoss_1",colorBlue,style=1);
Plot(PotentialLoss_2,"PotentialLoss_2",colorRed,style=1);
//Plot(PotentialLoss_N,"PotentialLoss_N",colorGreen,style=1); // Добавляем график PotentialLoss_N для
каждой новой Стратегии_N
Plot(PotentialLoss,"PotentialLoss",colorPink,style=16384);}
if (ChartType=="Postion Value"){
Plot(PositionValue_1,"PositionValue_1",colorBlue,style=1);
Plot(PositionValue_2,"PositionValue2",colorRed,style=1);
//Plot(PositionValue_N,"PositionValue_N",colorGreen,style=1); // Добавляем график PositionValue_N для
каждой новой Стратегии_N
Plot(PositionValue,"PositionValue",colorLightGrey,style=16384);}

if (ChartType=="Deviation"){ Plot(0,"ZeroLevel",colorBlack,style=1);
Plot(Deviation_1,"Deviation_1",colorBlue,style=1);
Plot(Deviation_2,"Deviation_2",colorRed,style=1);
//Plot(Deviation_N,"Deviation_N",colorGreen,style=1); // Добавляем график Deviation_N для каждой
новой стратегии
}
// yDAV (c) 2012, http://y-dav.livejournal.com
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Сб Ноя 26, 2016 9:52 pm Ответить с цитатой Вернуться к началу

Эта фигня работает просто как индикатор. Параметром Chart Type можно менять тип графика.
Т.е. в тестер это пихать не надо. Это просто "индикатор". Суть исследуемых стратегий типа такая. Берем две бумаги. Считаем спред и если он + то продаем одну а вторую покупаем, а если - то наоборот.
Но это не точно. Я подробно не вникал.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
krest



Зарегистрирован: 06.04.2015
Сообщения: 3
Откуда: Ростов на Дону

СообщениеДобавлено: Вс Ноя 27, 2016 2:30 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Эта фигня работает просто как индикатор. Параметром Chart Type можно менять тип графика.
Т.е. в тестер это пихать не надо. Это просто "индикатор". Суть исследуемых стратегий типа такая. Берем две бумаги. Считаем спред и если он + то продаем одну а вторую покупаем, а если - то наоборот.
Но это не точно. Я подробно не вникал.


Приветствую, Олег! Спасибо за ответ!
На сайте автора, ссылку на который я приводил в первом посте, достаточно подробно разбирается суть этого метода. Смысл в том что акции, а тем более синтетики скоррелированных инструментов склонны к частым разнонаправленным движениям, за счет этого прибыль от покупки после падения и продажи после роста должна быть в итоге больше чем убыток. У него все расписано с формулами и примерами, выглядит интересно. По его словам такую методу используют многие хедж-фонды. Решил пощупать этот подход, взял приведенный выше код и стал пробовать.
Пробовал я его и как индикатор применять, ничего не получается, причина скорее всего в моем слабом знании Ами. И на график кидал, и под график, не работает...
Если не затруднит объясни на пальцах, как его заставить функционировать?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вс Ноя 27, 2016 5:23 pm Ответить с цитатой Вернуться к началу

Даже не знаю что сказать. У меня работает. В базе обязательно должны быть 4 бумаги
LKOH, GAZP, SBER, VTBR

И называться они должны именно так.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
krest



Зарегистрирован: 06.04.2015
Сообщения: 3
Откуда: Ростов на Дону

СообщениеДобавлено: Пн Ноя 28, 2016 7:53 am Ответить с цитатой Вернуться к началу

000 писал(а):
Даже не знаю что сказать. У меня работает. В базе обязательно должны быть 4 бумаги
LKOH, GAZP, SBER, VTBR

И называться они должны именно так.


Спасибо, Олег! Все заработало! ))
Не знаю в чем была причина. Сделал все заново, удалил индикатор, еще раз скопировал его с сайта, название написал латинским алфавитом. Теперь работает.

С уважением, Алексей.
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen