Автор |
Сообщение |
krest
Зарегистрирован: 06.04.2015
Сообщения: 3
Откуда: Ростов на Дону
|
Здравствуйте, уважаемые!
Нашел тут: 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
|
Эта фигня работает просто как индикатор. Параметром Chart Type можно менять тип графика.
Т.е. в тестер это пихать не надо. Это просто "индикатор". Суть исследуемых стратегий типа такая. Берем две бумаги. Считаем спред и если он + то продаем одну а вторую покупаем, а если - то наоборот.
Но это не точно. Я подробно не вникал. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
krest
Зарегистрирован: 06.04.2015
Сообщения: 3
Откуда: Ростов на Дону
|
000 писал(а): |
Эта фигня работает просто как индикатор. Параметром Chart Type можно менять тип графика.
Т.е. в тестер это пихать не надо. Это просто "индикатор". Суть исследуемых стратегий типа такая. Берем две бумаги. Считаем спред и если он + то продаем одну а вторую покупаем, а если - то наоборот.
Но это не точно. Я подробно не вникал. |
Приветствую, Олег! Спасибо за ответ!
На сайте автора, ссылку на который я приводил в первом посте, достаточно подробно разбирается суть этого метода. Смысл в том что акции, а тем более синтетики скоррелированных инструментов склонны к частым разнонаправленным движениям, за счет этого прибыль от покупки после падения и продажи после роста должна быть в итоге больше чем убыток. У него все расписано с формулами и примерами, выглядит интересно. По его словам такую методу используют многие хедж-фонды. Решил пощупать этот подход, взял приведенный выше код и стал пробовать.
Пробовал я его и как индикатор применять, ничего не получается, причина скорее всего в моем слабом знании Ами. И на график кидал, и под график, не работает...
Если не затруднит объясни на пальцах, как его заставить функционировать? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Даже не знаю что сказать. У меня работает. В базе обязательно должны быть 4 бумаги
LKOH, GAZP, SBER, VTBR
И называться они должны именно так. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
krest
Зарегистрирован: 06.04.2015
Сообщения: 3
Откуда: Ростов на Дону
|
000 писал(а): |
Даже не знаю что сказать. У меня работает. В базе обязательно должны быть 4 бумаги
LKOH, GAZP, SBER, VTBR
И называться они должны именно так. |
Спасибо, Олег! Все заработало! ))
Не знаю в чем была причина. Сделал все заново, удалил индикатор, еще раз скопировал его с сайта, название написал латинским алфавитом. Теперь работает.
С уважением, Алексей. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|