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


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

СообщениеДобавлено: Вс Мар 07, 2010 2:24 pm Ответить с цитатой Вернуться к началу

Да так и пиши
Код:

Buy = CROSS(H, Ref(Y, -1)) OR (H > Ref(Y,-1) and Minute() == 35);

если фрейм достаточно мелкий.

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



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

СообщениеДобавлено: Вс Мар 07, 2010 7:05 pm Ответить с цитатой Вернуться к началу

Вот что у меня получилось
Код:
TimeFrameSet( inHourly );

BegDay = Day() != Ref(Day(), -1);
Hh1 = ValueWhen(BegDay, H);
Ll1 = ValueWhen(BegDay, L);

TimeFrameRestore();

Hh=TimeFrameExpand(Hh1,in15Minute);
Ll=TimeFrameExpand(Ll1,in15Minute);

Plot(Hh,"Hh60",11,1);
Plot(Ll,"Ll60",colorBlue,1);


Но всю работает только на часовых интервалах.
На 15 минутках вот такая картинка
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Teema



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

СообщениеДобавлено: Вс Мар 07, 2010 7:06 pm Ответить с цитатой Вернуться к началу

Сама картинка. В чем проблема может быть? Админ спасай!
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
000
Site Admin


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

СообщениеДобавлено: Вс Мар 07, 2010 7:22 pm Ответить с цитатой Вернуться к началу

Почти правильно.
Надо так
Код:

TimeFrameSet( inHourly );
   BegDay = Day() != Ref(Day(), -1);
   Hh1 = ValueWhen(BegDay, H);
   Ll1 = ValueWhen(BegDay, L);
TimeFrameRestore();

Hh = TimeFrameExpand(Hh1, inHourly);
Ll = TimeFrameExpand(Ll1, inHourly);

Plot(Hh,"Hh60",11,1);
Plot(Ll,"Ll60",colorBlue,1);

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



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

СообщениеДобавлено: Вс Мар 07, 2010 9:13 pm Ответить с цитатой Вернуться к началу

ипонский магнитофон! Embarassed
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Tim



Зарегистрирован: 12.02.2010
Сообщения: 245
Откуда: Дмитров

СообщениеДобавлено: Чт Мар 18, 2010 8:31 pm Ответить с цитатой Вернуться к началу

Вопрос про Barssince(Cross(Close,MA(x))

Какое значение выдаёт на выходе эта команда на свечке, закрытие которой пересекло MA(x)?
Ноль или единицу?

Выяснил - ноль.

_________________
УСПЕХ — это движение от неудачи к неудаче БЕЗ ПОТЕРИ ЭНТУЗИАЗМА.
- Уинстон Черчилль
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Амиброкеровец



Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия

СообщениеДобавлено: Вс Мар 28, 2010 1:36 pm Ответить с цитатой Вернуться к началу

Как следующий кусок кода - NRTR можно использовать на не-существующем индексе РТС/Курс_рубль_доллар?

Я думал сделать функцию типа этой, но не уверен что это возможно..
function HMA( input, per )
{
Hull = WMA( 2*WMA(input,int(Per/2))- WMA(input,Per),int(sqrt(Per)));
return Hull;
}

Код:

// Параметры
k = Param("K", 0.015, 0, 0.2, 0.001);

Trend[0] = 1;  // тренд вверх
Revers[0] = C[0] - C[0]*k;
PE[0] = C[0];

for(i = 1; i < BarCount; i++)
{
   if(Trend[i-1] == 1)               //Up Trend
   {
      if(C[i] > PE[i-1])            //Новый High
      {
         Trend[i] = 1;
         PE[i] = C[i];
         Revers[i] = C[i] - C[i]*k;
      }
      else
      {
         if(C[i] < Revers[i-1])      //Реверс
         {
            Trend[i] = -1;
            PE[i] = C[i];
            Revers[i] = C[i] + C[i]*k;
         }
         else                     //Нет нового high и реверса
         {
            Trend[i] = 1;
            PE[i] = PE[i-1];
            Revers[i] = Revers[i-1];
         }
      }
   }
//======================================
   else                           //Down Trend
   {
      if(C[i] < PE[i-1])            //Новый Low
      {
         Trend[i] = -1;
         PE[i] = C[i];
         Revers[i] = C[i] + C[i]*k;
      }
      else
      {
         if(C[i] > Revers[i-1])      //Реверс
         {
            Trend[i] = 1;
            PE[i] = C[i];
            Revers[i] = C[i] - C[i]*k;
         }
         else                     //Нет нового Low и реверса
         {
            Trend[i] = -1;
            PE[i] = PE[i-1];
            Revers[i] = Revers[i-1];
         }
      }
   }
}

Plot(Revers, "NRTR WATR", IIf(Trend == 1, 27, 4), 4);

_________________
Антон
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вс Мар 28, 2010 8:43 pm Ответить с цитатой Вернуться к началу

Как то так
Код:

// Параметры
function NRTR(P, k)
{
   Trend[0] = 1;  // тренд вверх
   Revers[0] = P[0] - P[0]*k;
   PE[0] = P[0];

   for(i = 1; i < BarCount; i++)
   {
      if(Trend[i-1] == 1)               //Up Trend
      {
         if(P[i] > PE[i-1])            //Новый High
         {
            Trend[i] = 1;
            PE[i] = P[i];
            Revers[i] = P[i] - P[i]*k;
         }
         else
         {
            if(P[i] < Revers[i-1])      //Реверс
            {
               Trend[i] = -1;
               PE[i] = P[i];
               Revers[i] = P[i] + P[i]*k;
            }
            else                     //Нет нового high и реверса
            {
               Trend[i] = 1;
               PE[i] = PE[i-1];
               Revers[i] = Revers[i-1];
            }
         }
      }
//======================================
      else                           //Down Trend
      {
         if(P[i] < PE[i-1])            //Новый Low
         {
            Trend[i] = -1;
            PE[i] = P[i];
            Revers[i] = P[i] + P[i]*k;
         }
         else
         {
            if(P[i] > Revers[i-1])      //Реверс
            {
               Trend[i] = 1;
               PE[i] = P[i];
               Revers[i] = P[i] - P[i]*k;
            }
            else                     //Нет нового Low и реверса
            {
               Trend[i] = -1;
               PE[i] = PE[i-1];
               Revers[i] = Revers[i-1];
            }
         }
      }
   }
   return Revers;
}

Plot(NRTR(C, 0.02), "NRTR WATR", 1, 4);

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



Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия

СообщениеДобавлено: Вс Мар 28, 2010 9:12 pm Ответить с цитатой Вернуться к началу

Странно, добавил это - но код не строит NRTR

Код:

RTSRU_close= Foreign("RTS","C")/Foreign("SPFB.Si","Close",1);
RTSRU_open= Foreign("RTS","O")/Foreign("SPFB.Si","Close",1);
RTSRU_low= Foreign("RTS","L")/Foreign("SPFB.Si","Close",1);
RTSRU_high= Foreign("RTS","H")/Foreign("SPFB.Si","Close",1);

PlotOHLC( RTSRU_open, RTSRU_high, RTSRU_low, RTSRU_close, "RTS- RUB", colorOrange, styleCandle );


function NRTR(P, k)
{
   Trend[0] = 1;  // тренд вверх
   Revers[0] = P[0] - P[0]*k;
   PE[0] = P[0];

   for(i = 1; i < BarCount; i++)
   {
      if(Trend[i-1] == 1)               //Up Trend
      {
         if(P[i] > PE[i-1])            //Новый High
         {
            Trend[i] = 1;
            PE[i] = P[i];
            Revers[i] = P[i] - P[i]*k;
         }
         else
         {
            if(P[i] < Revers[i-1])      //Реверс
            {
               Trend[i] = -1;
               PE[i] = P[i];
               Revers[i] = P[i] + P[i]*k;
            }
            else                     //Нет нового high и реверса
            {
               Trend[i] = 1;
               PE[i] = PE[i-1];
               Revers[i] = Revers[i-1];
            }
         }
      }
//======================================
      else                           //Down Trend
      {
         if(P[i] < PE[i-1])            //Новый Low
         {
            Trend[i] = -1;
            PE[i] = P[i];
            Revers[i] = P[i] + P[i]*k;
         }
         else
         {
            if(P[i] > Revers[i-1])      //Реверс
            {
               Trend[i] = 1;
               PE[i] = P[i];
               Revers[i] = P[i] - P[i]*k;
            }
            else                     //Нет нового Low и реверса
            {
               Trend[i] = -1;
               PE[i] = PE[i-1];
               Revers[i] = Revers[i-1];
            }
         }
      }
   }
   return Revers;
}
k = Param("K", 0.015, 0, 0.2, 0.001);
Plot(NRTR(RTSRU_close, k), "NRTR WATR", 1, 4);

_________________
Антон
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вс Мар 28, 2010 9:19 pm Ответить с цитатой Вернуться к началу

Попробуй в этой строке
Код:

   for(i = 1; i < BarCount; i++)

исправить на
Код:

   for(i = 2; i < BarCount; i++)

или больше чем 2

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



Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия

СообщениеДобавлено: Вс Мар 28, 2010 11:02 pm Ответить с цитатой Вернуться к началу

Спасибо! Эликсир помог Smile

_________________
Антон
Посмотреть профиль Отправить личное сообщение
Alexander_tr



Зарегистрирован: 01.04.2010
Сообщения: 60
Откуда: Москва

СообщениеДобавлено: Пт Апр 02, 2010 4:00 pm Ответить с цитатой Вернуться к началу

Всем привет, пишу свою первую стратегию на AFL

Написал следующий код:
Код:


BuyLevel = 2000;
DaylyL=1000000;
/*
i=1;
do
{   
   i--;       
   if (SelectedValue(Ref(Day(),i)) == SelectedValue(Ref(Day(),i-1)))
   {   
      if (DaylyL > SelectedValue(TimeFrameGetPrice( "L", in1Minute, i, expandFirst)))
         DaylyL = SelectedValue(TimeFrameGetPrice( "L", in1Minute, i, expandFirst));       
   }
} while (SelectedValue(Ref(Day(),i)) == SelectedValue(Ref(Day(),i-1)));

if (SelectedValue(Day()) != SelectedValue(Ref(Day(),-1)))
   {
      DaylyL = SelectedValue(C);
   }
*/
DaylyL = IIf(Day() != Ref(Day(),-1), C, IIf(DaylyL > L, L, SelectedValue(Ref(DaylyL,-1))));


BuyLevel = DaylyL + BuyLevel;

Buy = (H > Buylevel) AND (Day() == Ref(Day(),-1));
Sell = Day()!=Ref(Day(),1);

Plot(DaylyL, "DL", colorRed, styleLine);
Plot(BuyLevel, "BL", colorBlack, styleLine);
//Short = L <= Selllevel;
//Cover = IIf(Day()!=Ref(Day(),1),1,0);

Buy = ExRem( Buy, Sell );
Sell = ExRem( Sell, Buy );
 

Что хочу:
1. надо что бы внутри дня считался лой без учета первой минуты. В коде я попробовал это реализовать через IIF и цикл. Через цикл работает, а через IIF DaylyL на первой минуте равен close, а потом все время 0. Хочется без цикла, тормозит довольно сильно.

2. Когда считаешь DaylyL через цикл, то потом тестер мне почему то покупает на второй минуте, как будто мой уровень ниже H, когда рисую на графике, видно что мой уровень выше цены, а все равно заходит. Наверное я что то не понимаю в работе функции Buy

помогите пож разобраться
Посмотреть профиль Отправить личное сообщение
Alexander_tr



Зарегистрирован: 01.04.2010
Сообщения: 60
Откуда: Москва

СообщениеДобавлено: Сб Апр 03, 2010 2:42 am Ответить с цитатой Вернуться к началу

Удалось найти ответ на свой вопрос.

Как сделать без цикла вычисление лоу со второй минуты:

1. запоминаем индекс бара который первая минута дня
2. используем LLV() функцию


Код:

barind1 = ValueWhen(Day() != Ref(Day(),-1), BarIndex());
arr = IIf(Day() != Ref(Day(),-1), C, LLV(L,BarIndex() - barind1));


и все работает! надеюсь кому то поможет Smile

осталось разобраться с buy... если кто подскажет почему она может не работать буду благодарен.

Как я понял в AFl начинаются глюки когда сравниваешь переменную и элемент массива, возможно причина в этом
Посмотреть профиль Отправить личное сообщение
Teema



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

СообщениеДобавлено: Сб Апр 03, 2010 1:17 pm Ответить с цитатой Вернуться к началу

А Sell правильно Sell = Day()! == Ref(Day(),1);?
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Alexander_tr



Зарегистрирован: 01.04.2010
Сообщения: 60
Откуда: Москва

СообщениеДобавлено: Сб Апр 03, 2010 1:34 pm Ответить с цитатой Вернуться к началу

Teema писал(а):
А Sell правильно Sell = Day()! == Ref(Day(),1);?


да, в конце дня продает как и задумывалось

После того как я сделал в Buy проверку условия массив > массив, все заработало и все сделки отобразились корректно.

Господа профессионалы, подскажите пожалуйста можно ли сделать корректное сравнение переменной и массива, так что бы функции buy и sell правильно работали?
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen