Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Вопросы по AFL |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 След. |
Автор |
Сообщение |
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Да так и пиши
Код: |
Buy = CROSS(H, Ref(Y, -1)) OR (H > Ref(Y,-1) and Minute() == 35);
|
если фрейм достаточно мелкий. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Teema
Зарегистрирован: 01.04.2009
Сообщения: 184
|
Вот что у меня получилось
Код: |
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
|
Сама картинка. В чем проблема может быть? Админ спасай! |
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Почти правильно.
Надо так
Код: |
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
|
ипонский магнитофон! |
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Tim
Зарегистрирован: 12.02.2010
Сообщения: 245
Откуда: Дмитров
|
Вопрос про Barssince(Cross(Close,MA(x))
Какое значение выдаёт на выходе эта команда на свечке, закрытие которой пересекло MA(x)?
Ноль или единицу?
Выяснил - ноль. |
_________________ УСПЕХ — это движение от неудачи к неудаче БЕЗ ПОТЕРИ ЭНТУЗИАЗМА.
- Уинстон Черчилль |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
Как следующий кусок кода - 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
|
Как то так
Код: |
// Параметры
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
Откуда: Воображляндия
|
Странно, добавил это - но код не строит 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
|
Попробуй в этой строке
Код: |
for(i = 1; i < BarCount; i++)
|
исправить на
Код: |
for(i = 2; i < BarCount; i++)
|
или больше чем 2 |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
Спасибо! Эликсир помог |
_________________ Антон |
|
Посмотреть профиль Отправить личное сообщение |
|
Alexander_tr
Зарегистрирован: 01.04.2010
Сообщения: 60
Откуда: Москва
|
Всем привет, пишу свою первую стратегию на 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
Откуда: Москва
|
Удалось найти ответ на свой вопрос.
Как сделать без цикла вычисление лоу со второй минуты:
1. запоминаем индекс бара который первая минута дня
2. используем LLV() функцию
Код: |
barind1 = ValueWhen(Day() != Ref(Day(),-1), BarIndex());
arr = IIf(Day() != Ref(Day(),-1), C, LLV(L,BarIndex() - barind1));
|
и все работает! надеюсь кому то поможет
осталось разобраться с buy... если кто подскажет почему она может не работать буду благодарен.
Как я понял в AFl начинаются глюки когда сравниваешь переменную и элемент массива, возможно причина в этом |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Teema
Зарегистрирован: 01.04.2009
Сообщения: 184
|
А Sell правильно Sell = Day()! == Ref(Day(),1);? |
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Alexander_tr
Зарегистрирован: 01.04.2010
Сообщения: 60
Откуда: Москва
|
Teema писал(а): |
А Sell правильно Sell = Day()! == Ref(Day(),1);? |
да, в конце дня продает как и задумывалось
После того как я сделал в Buy проверку условия массив > массив, все заработало и все сделки отобразились корректно.
Господа профессионалы, подскажите пожалуйста можно ли сделать корректное сравнение переменной и массива, так что бы функции buy и sell правильно работали? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Вопросы по AFL |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 След. |
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|