Как в Амиброкере посчитать Евити?

Andres

New member
По нескольким бумагам просто, в установках бэктеста ставишь "use filter" выбираешь там какой нить watch list, копируешь туда нужные бумаги, в тексте системы добавляешь positionsize=-25 (для 4-х бумаг) и тестишь.
 
По нескольким бумагам просто, в установках бэктеста ставишь "use filter" выбираешь там какой нить watch list, копируешь туда нужные бумаги, в тексте системы добавляешь positionsize=-25 (для 4-х бумаг) и тестишь.
Дело в том, что систему я подстраиваю под каждую бумагу. А эта хрень, как я понял, одну систему гоняет на разных бумагах
 

Andres

New member
Для нескольких систем сложнее, но возможно.

Выполняем следующие манипуляции:
Допустим есть три системы

Прогоняем тест 1-й системы, в списке символом видим тикер ~~~EQUITY, щелкаем по нему правой кнопкой мыши, заходим в information, меняем имя например на ~EQ1_2007, меняем Group и Market, на отличный! от 253, например 251

Теперь перезапускаем! Ами, делаем то же для 2-й системы, создаем тикер ~EQ2_2007

Повтрояем для 3-й системы, создаем ~EQ3_2007

Добавляем индикатор:

eq1=Foreign( "~EQ1_2007", "C" );
dr1 = eq1 - Highest(eq1);
drpercent1 = ((eq1 - Highest(eq1))/(Highest(eq1)/100));
drlow1=Lowest(drpercent1);

z1=IsEmpty(eq1);
z2=IIf(z1<1,1,0);
z3=0;
z4=ExRem(z2,z3);

eqfirst1=LastValue( ValueWhen( z4, eq1 ) );
prof1=(eq1-eqfirst1)/(eqfirst1/100);
Plot(prof1,"Profit1%",colorRed, 4);


eq2=Foreign( "~EQ2_2007", "C" );
dr2 = eq2 - Highest(eq2);
drpercent2 = ((eq2 - Highest(eq2))/(Highest(eq2)/100));
drlow2=Lowest(drpercent2);
eqfirst2=LastValue( ValueWhen( z4, eq2 ) );
prof2=(eq2-eqfirst2)/(eqfirst2/100);
Plot(prof2,"Profit2%",colorWhite, 4);

eq3=Foreign( "~EQ3_2007", "C" );
dr3 = eq3 - Highest(eq3);
drpercent3 = ((eq3 - Highest(eq3))/(Highest(eq3)/100));
drlow3=Lowest(drpercent3);
eqfirst3=LastValue( ValueWhen( z4, eq3 ) );
prof3=(eq3-eqfirst3)/(eqfirst3/100);
Plot(prof3,"Profit3%",colorBlue, 4);

///////////////////////////////////////////////////////

g=(prof1+prof2+prof3)/3;

eq=(eq1+eq2+eq3)/3;
dr = eq - Highest(eq);
drpercent = ((eq - Highest(eq))/(Highest(eq)/100));
drlow=Lowest(drpercent);

Col=IIf(drpercent<0,19,27);

Plot(drpercent,"Drawdown%",colorDarkRed,styleArea);
Plot(drlow,"MaxDD%",colorGrey50,styleThick);
Plot(g,"Profit%",Col, styleArea);
///END///

Equity отображается в процентах. У меня версия Ами 4.5, возможно в более новых версиях это можно сделать проще.
 
Для нескольких систем сложнее, но возможно.

Выполняем следующие манипуляции:
Допустим есть три системы

Прогоняем тест 1-й системы, в списке символом видим тикер ~~~EQUITY, щелкаем по нему правой кнопкой мыши, заходим в information, меняем имя например на ~EQ1_2007, меняем Group и Market, на отличный! от 253, например 251

Теперь перезапускаем! Ами, делаем то же для 2-й системы, создаем тикер ~EQ2_2007

Повтрояем для 3-й системы, создаем ~EQ3_2007

Добавляем индикатор:

eq1=Foreign( "~EQ1_2007", "C" );
dr1 = eq1 - Highest(eq1);
drpercent1 = ((eq1 - Highest(eq1))/(Highest(eq1)/100));
drlow1=Lowest(drpercent1);

z1=IsEmpty(eq1);
z2=IIf(z1<1,1,0);
z3=0;
z4=ExRem(z2,z3);

eqfirst1=LastValue( ValueWhen( z4, eq1 ) );
prof1=(eq1-eqfirst1)/(eqfirst1/100);
Plot(prof1,"Profit1%",colorRed, 4);


eq2=Foreign( "~EQ2_2007", "C" );
dr2 = eq2 - Highest(eq2);
drpercent2 = ((eq2 - Highest(eq2))/(Highest(eq2)/100));
drlow2=Lowest(drpercent2);
eqfirst2=LastValue( ValueWhen( z4, eq2 ) );
prof2=(eq2-eqfirst2)/(eqfirst2/100);
Plot(prof2,"Profit2%",colorWhite, 4);

eq3=Foreign( "~EQ3_2007", "C" );
dr3 = eq3 - Highest(eq3);
drpercent3 = ((eq3 - Highest(eq3))/(Highest(eq3)/100));
drlow3=Lowest(drpercent3);
eqfirst3=LastValue( ValueWhen( z4, eq3 ) );
prof3=(eq3-eqfirst3)/(eqfirst3/100);
Plot(prof3,"Profit3%",colorBlue, 4);

///////////////////////////////////////////////////////

g=(prof1+prof2+prof3)/3;

eq=(eq1+eq2+eq3)/3;
dr = eq - Highest(eq);
drpercent = ((eq - Highest(eq))/(Highest(eq)/100));
drlow=Lowest(drpercent);

Col=IIf(drpercent<0,19,27);

Plot(drpercent,"Drawdown%",colorDarkRed,styleArea);
Plot(drlow,"MaxDD%",colorGrey50,styleThick);
Plot(g,"Profit%",Col, styleArea);
///END///

Equity отображается в процентах. У меня версия Ами 4.5, возможно в более новых версиях это можно сделать проще.
Ну это уже что-то. Спасибо.
 

Andres

New member
По нескольким бумагам просто, в установках бэктеста ставишь "use filter" выбираешь там какой нить watch list, копируешь туда нужные бумаги, в тексте системы добавляешь positionsize=-25 (для 4-х бумаг) и тестишь.
Дело в том, что систему я подстраиваю под каждую бумагу. А эта хрень, как я понял, одну систему гоняет на разных бумагах
А ясно, я просто не подгоняю системы под конкретные бумаги. Тогда используй другую хрень, смотри выше :)
 
По нескольким бумагам просто, в установках бэктеста ставишь "use filter" выбираешь там какой нить watch list, копируешь туда нужные бумаги, в тексте системы добавляешь positionsize=-25 (для 4-х бумаг) и тестишь.
Дело в том, что систему я подстраиваю под каждую бумагу. А эта хрень, как я понял, одну систему гоняет на разных бумагах
А ясно, я просто не подгоняю системы под конкретные бумаги. Тогда используй другую хрень, смотри выше :)
У меня почему-то не удается создать (взять существующую) систему, которая хорошо работает на всех бумагах. Если система не дает 100% в год(т.к. в реале будет ниже), то она мне не интересна. Посему вопрос. Вы берете готовые системы или мудрите свои?
 

SV

New member
Есть еще способ, пожалуй более "кашерный":
1) создаем 2 индикатора;
2) в первый пихаем такую вот формулу
*********************************
s1=1; s2=1; //выставляя "s" регулируем вес систем

perH1=40; perH2=80;
perL1=40; perL2=80;

if (Name()=="EESR_5"){ //ставим параметры в зависимости от текущего тикера
perH1=40; perH2=80;
perL1=40; perL2=80;
}
if (Name()=="LKOH_5"){
perH1=40; perH2=80;
perL1=40; perL2=80;
}
if (Name()=="SBER_5"){
perH1=40; perH2=80;
perL1=40; perL2=80;
}
_SECTION_BEGIN("Settings");
FromDate=ParamDate("From","01.01.2000"); //можно выбирать интервал отображения
ToDate=ParamDate("To","01.09.2007");
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} {{VALUES}}", SelectedValue( ROC( C, 1 ) ) ));
_SECTION_END();

_SECTION_BEGIN("System 1"); //системы Механизатора(хорошие системы:)))
Long_enter1=Ref(HHV(H,perH1),-1);
Long_stop1=Ref(LLV(L,perL1),-1);

Buy=H>Long_enter1;
BuyPrice=Long_enter1;
Sell=Long_stop1>L;
SellPrice=Long_stop1;

AddToComposite(Equity(),"~1_"+Name(),"C");

eq1 = Equity(0,3,FromDate,ToDate)/100000*100;
if( ParamToggle("System 1?", "No|Yes", 1 ) )
{
Plot(eq1, "Portfolio Equity 1", colorRed, styleLine );
}
else {}
dd1=(eq1*100/Highest(eq1)-100);
if( ParamToggle("Show Drawdown", "No|Yes", 1 ) )
{
Plot(dd1, "Drawdown", colorRed, styleThick );
Plot(Lowest(dd1),"", colorRed, styleDashed);
}
_SECTION_END();


_SECTION_BEGIN("System 2");
Long_enter2=Ref(HHV(H,perH2),-1);
Long_stop2=Ref(LLV(L,perL2),-1);

Buy=H>Long_enter2;
BuyPrice=Long_enter2;
Sell=Long_stop2>L;
SellPrice=Long_stop2;

AddToComposite(Equity(),"~2_"+Name(),"C");

eq2 = Equity(0,3,FromDate,ToDate)/100000*100;
if( ParamToggle("System 2?", "No|Yes", 1 ) )
{
Plot(eq2, "Portfolio Equity 1", colorBlue, styleLine );
}
else {}
dd2=eq2*100/Highest(eq2)-100;
if( ParamToggle("Show Drawdown", "No|Yes", 1 ) )
{
Plot(dd2, "Drawdown", colorBlue, styleThick );
Plot(Lowest(dd2),"", colorBlue, styleDashed);
}
_SECTION_END();


_SECTION_BEGIN("Buy-and-Hold");
if( ParamToggle("Show Buy-and-Hold?", "No|Yes", 1 ) )
{
Short=Cover=0;
Buy=1;
Sell=0;

AddToComposite(Equity(),"~BH_"+Name(),"C");

eqBH = Equity(0,3,FromDate,ToDate)/100000*100;
Plot(eqBH, "Buy&Hold", colorBlack);
//Plot( Equity( 0, -2 ), "Buy&Hold", -9 );
ddBH=eqBH*100/Highest(eqBH)-100;
if( ParamToggle("Show Drawdown BH", "No|Yes", 1 ) )
{
Plot(ddBH, "Drawdown", colorBlack, styleLine );
Plot(Lowest(ddBH),"", colorBlack, styleDashed);
}
}
_SECTION_END();


_SECTION_BEGIN("Composit");
eq_composit=(eq1*s1+eq2*s2)/(s1+s2);
AddToComposite(eq_composit,"~comp_"+Name(),"C");
if( ParamToggle("Show composit?", "No|Yes", 1 ) )
{
Plot(eq_composit, "Composit", colorBrown, styleThick);

dd_composit=eq_composit*100/Highest(eq_composit)-100;
if( ParamToggle("Show Drawdown", "No|Yes", 1 ) )
{
Plot(dd_composit, "Drawdown", colorBrown, styleThick );
Plot(Lowest(dd_composit),"", colorBrown, styleDashed);
}

}
_SECTION_END();
******************************************************
3) Потом эту формулу скармливаем анализатору и делаем "Scan" для каждой нужной бумажки. В результате у нас появляются в списке тикеров куча нужных нам тикеров-эквити.
Ключевым для формирования эквити является AddToComposite. Он создает нужные нам тикеры-эквити для нужных систем.
(Эта же формула удобна для подбора параметров и визуального анализа)

4) во второй индикатор пихаем:
*****************************************************
k1=1; g1=Foreign("~comp_EESR_5","c")*k1; bh1=Foreign("~BH_EESR_5","c")*k1; //выставляя k, можно регулирвать соотношение разных систем
k2=1; g2=Foreign("~comp_LKOH_5","c")*k2; bh2=Foreign("~BH_LKOH_5","c")*k2;
k3=1; g3=Foreign("~comp_SBER_5","c")*k3; bh3=Foreign("~BH_SBER_5","c")*k3;
n=k1+k2+k3;

_N(Title = StrFormat("{{INTERVAL}} {{DATE}} {{VALUES}}", SelectedValue( ROC( C, 1 ) ) ));
Comp_BH=(bh1+bh2+bh3)/(1000*n); //состовная эквити "Buy&Hold"
Comp_eq=(g1+g2+g3)/(n); //состовная эквити систем

Plot(g1,"EESR",colorRed);
Plot(g2,"LKOH",colorGreen);
Plot(g3,"SBER",colorBlue);
Plot(Comp_eq,"Composit equity sys",colorBrown);
Plot(Comp_BH,"Composit equity",colorBlack);

Comp_eq_dd=(Comp_eq*100/Highest(Comp_eq)-100);
if( ParamToggle("Show Drawdown", "No|Yes", 1 ) )
{
Plot(Comp_eq_dd, "Drawdown", colorBrown, styleThick );
Plot(Lowest(Comp_eq_dd),"", colorBrown, styleDashed);
}
Comp_BH_dd=(Comp_BH*100/Highest(Comp_BH)-100);
if( ParamToggle("Show Drawdown BH", "No|Yes", 1 ) )
{
Plot(Comp_BH_dd, "Drawdown", colorBlack, styleThick );
Plot(Lowest(Comp_BH_dd),"", colorBlack, styleDashed);
}
*****************************************************
5) тут ключевым является Foreign. О нем Andres уже писал.
6) ну и кидаем этот индикатор на любой график:))

P.S: шоб все значения были правильно в процентах нужно выставить "Initial equity"=100000. (настройки анализатора)
 

Andres

New member
Любопытно, а я что то с этим AddToComposite разбирался, но только запутался
SV, а у тебя какая версия АМИ?
Что то у меня операторы типа _SECTION_BEGIN("Settings"); не проходят
 

SV

New member
Любопытно, а я что то с этим AddToComposite разбирался, но только запутался
SV, а у тебя какая версия АМИ?
Что то у меня операторы типа _SECTION_BEGIN("Settings"); не проходят
версия 4.8
_SECTION_BEGIN и _SECTION_END можно поубирать.
как я понял они на функционал ника не влияют. Это для удобства отображения, когда заходиш по правому клику в параметры индикатора
 

SV

New member
Your email address will not be publicly visible. We will only use it to contact you to confirm your post.
Сверху