Amibroker, NRTR_WATR, стрелки и сигналы

  • Автор темы sssruslan
  • Дата начала

sssruslan

New member
Посетив данный форум узнал о существовании такой замечательной программы как Amibroker :) Полностью перешел на нее. Очень нравится.

Вот переделал переделанный индикатор Копыркина, к-й тут выкладывали, в оригинальный :)

//////////////
K=Param("M",4,1,25,1,0);
M=Param("Lenght",15,2,100,5,0);
W=WMA(ATR(1),M);
HPrice[0]=C[0];
LPrice[0]=C[0];
Trend[0]=0;
Reverse[0]=C[0]+K*W[0];
for(i=1;i<BarCount;i++)
{
if (Trend[i-1] >=0)
{
if (C > HPrice[i-1])
HPrice = C;
else
HPrice = HPrice[i-1];
Reverse = HPrice-K*W;
if (C <= Reverse)
{
Trend = -1;
LPrice = C;
Reverse = LPrice+K*W;
}
else
{
Trend=Trend[i-1];
LPrice=LPrice[i-1];
}
}
else
{
if (C < LPrice[i-1])
LPrice = C;
else
LPrice = LPrice[i-1];
Reverse = LPrice+K*W;
if (C >= Reverse)
{
Trend = 1;
HPrice = C;
Reverse = HPrice-K*W;
}
else
{
Trend=Trend[i-1];
HPrice=HPrice[i-1];
{
}
}}}
Plot( Reverse,_DEFAULT_NAME(), ParamColor( "Color", colorCycle ), ParamStyle("Style") );
//////////////

Может кому и понадобиться :)

А теперь о том, что не смог сделать.
Не получилось создать систему, которая торговала бы по NRTR_WATR.
Куда только не повставлял эти буи и селлы, но что-то не те сделки совершаются при тестировании.
Не могли бы помочь, добрые люди? :)
И хотелось бы стрелочки видеть при появлении сигнала. Как в Метастоке при включенном Expert Advizor. Возможно такое?

И последнее. Читал что размером позиции в Амиброкере управлять можно? Какую функцию нужно применять?

Спасибо.

p.s. не подумайте, что я вас эксплуатирую :)) я всерьез и надолго!
сам готов помочь нуждающимся.
 

Petrovic

New member
Вот рабочий вариант системы.
Код:
K = Optimize("K",10,1,10,1);
HPrice[0]=H[0];
LPrice[0]=L[0];
Trend[0]=0;
Reverse[0]=0.99*C[0];
for(i=1;i<BarCount;i++)
{
 if (Trend[i-1] >=0)
  {
   if (H[i] > HPrice[i-1])
    HPrice[i] = H[i];
    else
     HPrice[i] = HPrice[i-1];
   Reverse[i] = HPrice[i]*(1 - K/100);
   if (L[i] <= Reverse[i])
    {
     Trend[i] = -1;
     LPrice[i] = L[i];
     Reverse[i] = LPrice[i]*(1 + K/100);
    }
    else
     {
      Trend[i]=Trend[i-1];
      LPrice[i]=LPrice[i-1];    
     }
  }
  else
   {
    if (L[i] < LPrice[i-1])
     LPrice[i] = L[i];
      else
       LPrice[i] = LPrice[i-1];
    Reverse[i] = LPrice[i]*(1 + K/100);
    if (H[i] >= Reverse[i])
     {
      Trend[i] = 1;
      HPrice[i] = H[i];
      Reverse[i] = HPrice[i]*(1 - K*.01);
     }
     else
      {
       Trend[i]=Trend[i-1];
       HPrice[i]=HPrice[i-1];
      {
   }
}}}
HS=Ref(Reverse,-1);
Buy=Cross(H,HS);
BuyPrice=Max(HS,O);
Sell=Cross(HS,L);
SellPrice=Min(O,HS);
У системы недостаток - если волатильность превышает значение отступа (здесь оно равно 10%), то возможен пропуск сигнала.

А вот результат теста системы на дневках:
http://petrovic.nm.ru/nrtr.PNG
 

sssruslan

New member
Вот рабочий вариант системы...
Спасибо большое, Петрович!!

Нашел ответ на один из своих же вопросов.
Может это кого-то тоже интересует, поэтому напишу.
Размер позиции устанавливается при помощи функции PositionSize.
Например, PositionSize=100.
Только не знаю что при этом будет, открытие позиции на 100 лот или на 100% капитала. Сейчас попробую только потестить.
 

sssruslan

New member
Поигрался с positionSize.
Выяснил, что он показывает сумму, на которую будут приобретаться бумаги.

Правда в АмиХелп написано "positionsize Позволяет контролировать количество денег в процентном соотношении к портфелю задействованных в торгах . "Tutorial: Backtesting your trading ideas")"

Поэтому сомнения в своей правоте.
 

sssruslan

New member
Помогите пожалуйста добавить стрелочки (желательно с указанием объема сделки) в систему.
а то по Репорту сложно оценить правильность входов/выходов. :(
 

sssruslan

New member
Нашел :)
/////////////////////////////////
Чтобы отобразить стрелочки сигналов, которые генерируем в коде, и чтобы они располагались прямо на уровне цены входа, пишем следующий код.
Code:

shape2 = (Cover>=1)*shapeHollowUpArrow + (Sell>=1)*shapeDownArrow;

PlotShapes( shape2, IIf(Cover>=1, colorGreen, colorRed ), 0, IIf( Cover>=1, CoverPrice, SellPrice ) );


shape = (Buy>=1)*shapeUpArrow + (Short>=1)*shapeHollowDownArrow;

PlotShapes( shape, IIf(Buy>=1, colorGreen, colorRed ), 0, IIf( Buy>=1, BuyPrice, ShortPrice ) );
///////////////////

Изменяя параметр можно смотреть то график со стрелочками или без, то эквити (если умеете её рисовать)
Частично, это продолжение темы про стрелочки над сделками.
Кстати, тут еще не все возможные значения.
Закрытие по времени через ApplyStop() тут не даст стрелочек (наверно)
Но я решил не пользоваться ApplyStop, поэтому кому надо - подправьте сами
Строки с BBL_ закомментируйте, кому не нада
Code:


SetChartOptions( 0, chartShowDates);


GraphZOrder = 1;


if ( "Price" == ParamList("Draw", "Price,Equity" ))

{

Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );

Plot( BBL_OrdersGetCoverStopArray(), "CoverStop", colorYellow, styleLine + styleThick);

Plot( BBL_OrdersGetSellStopArray(), "SellStop", colorRed, styleLine);


if ( "Yes" == ParamList("Draw Arrows", "Yes,No" ))

{

PlotShapes( (Buy == 1) * shapeUpArrow, colorBrightGreen, 0, L);

PlotShapes( (Buy == sigScaleIn) * shapeSmallUpTriangle, colorBrightGreen, 0, L);

PlotShapes( (Buy == sigScaleOut) * shapeHollowSmallDownTriangle, colorRed, 0, H);


PlotShapes( (Short == 1) * shapeDownArrow, colorRed, 0, H);

PlotShapes( (Short == sigScaleIn) * shapeSmallDownTriangle, colorRed, 0, H);

PlotShapes( (Short == sigScaleOut) * shapeHollowSmallUpTriangle, colorBrightGreen, 0, L);



PlotShapes( (Sell == 1) * shapeDownArrow, colorYellow, 0, H + 10 * TickSize);

PlotShapes( (Sell == 2) * shapeHollowDownArrow, colorYellow, 0, H + 10 * TickSize);// stop

PlotShapes( (Sell == 3) * shapeHollowDownArrow, colorYellow, 0, H + 10 * TickSize);// limit


PlotShapes( (Cover == 1) * shapeUpArrow, colorGreen, 0, L - 10 * TickSize);

PlotShapes( (Cover == 2) * shapeHollowUpArrow, colorGreen, 0, L - 10 * TickSize);// stop

PlotShapes( (Cover == 3) * shapeHollowUpArrow, colorGreen, 0, L - 10 * TickSize);// limit

}

}

else

{

Plot( BBL_GetBuyLotArray(), "bLot", ColorRGB( 225,225,255), styleArea + styleOwnScale, -10, 10);

Plot( BBL_GetSellLotArray(), "sLot", ColorRGB( 255,225,225), styleArea + styleOwnScale, -10, 10);

Plot( BBL_GetBalanceArray (), "Balance", colorRed, styleLine);

Plot( BBL_GetEquityArray(), "Equity", colorGreen, styleLine);

}
 

sssruslan

New member
Про PositionSize.
Если пишем положительное число, то система совершает сделку на указанную сумму, а если отрицательное, то процент от имеющегося капитала.
 
Your email address will not be publicly visible. We will only use it to contact you to confirm your post.
Сверху