Автор |
Сообщение |
Alexander_tr
Зарегистрирован: 01.04.2010
Сообщения: 60
Откуда: Москва
|
Олег здравствуйте,
неделю бьюсь пытаюсь сделать свою первую программы на AFL, пока безуспешно.
Написал следующий код:
Код: |
BuyLevel = 2000;
DaylyL=0;
/*
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. возможно ли обойтись без цикла, а то притормаживает программа.
2. Хочу расчитывать лоу дня, без учета первой минуты.
Пробовал считать с циклом и через IIF, получается что на первой минуте DaylyL = Close, а на всех следующих = 0. Подскажите пож как быть? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Alexander_tr
Зарегистрирован: 01.04.2010
Сообщения: 60
Откуда: Москва
|
Блин, вот так всегда. Цикл получилось заставить работать.
Надо было написать вначале кода DaylyL = 1000000;
Но возникла другая проблема, почти каждый день он мне покупает на второй минуте, хотя уровень покупки выше h минуты |
|
|
Посмотреть профиль Отправить личное сообщение |
|
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 начинаются глюки когда сравниваешь переменную и элемент массива, возможно причина в этом |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Alexander_tr
Зарегистрирован: 01.04.2010
Сообщения: 60
Откуда: Москва
|
После того как я сделал в Buy проверку условия массив > массив, все заработало и все сделки отобразились корректно.
Господа профессионалы, подскажите пожалуйста можно ли сделать корректное сравнение переменной и массива, так что бы функции buy и sell корректно работали? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
Господа профессионалы, подскажите пожалуйста можно ли сделать корректное сравнение переменной и массива, так что бы функции buy и sell корректно работали?
|
Честно говоря я запутался в вопросах.
Вообще сравнивать массив и переменную проблем нет. Спроси плиз так, чтобы я понял в чем проблема и смог ответить. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Alexander_tr
Зарегистрирован: 01.04.2010
Сообщения: 60
Откуда: Москва
|
Остался 1 вопрос:
Когда я вычислял DaylyL циклом, потом вычислял уровень захода в лонг, и писал
Buy = (H > Buylevel) AND (Day() == Ref(Day(),-1));
то при просмотре сгенерированных сделок, получалось, что они происходили на второй минуте, хотя хай этой минуты был ниже моего уровня.
После того как я вычислил DaylyL как массив (через IIF), и соответственно buylevel у меня стал массивом, то условие на buy которое я написал выше отработало корректно, и сделки нарисовались как надо.
Поэтому вопрос такой, как можно сравнить переменную и массив в buy, что бы все сработало как надо. Просто я пока не силен в AFL и видимо не знаю какой то волшебной функции, или неправильно понял принцип работы языка.
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Я не могу понять что надо и не могу понять вопрос.
Напиши по русски правила системы. Я напишу код.
Никаких проблем в сравнении массива и переменной нет. Переменная в AFL это практически массив у которого все элементы одинаковые. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
По моему вот это
Код: |
barind1 = ValueWhen(Day() != Ref(Day(),-1), BarIndex());
arr = IIf(Day() != Ref(Day(),-1), C, LLV(L,BarIndex() - barind1));
|
Проще так
Код: |
barind = BarsSince(Day() != Ref(Day(),-1));
DaylyL = LLV(L, barind);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Alexander_tr
Зарегистрирован: 01.04.2010
Сообщения: 60
Откуда: Москва
|
вот код:
Код: |
BuyLevel = 2000;
DaylyL=0;
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);
}
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 );
|
Работает не верно, на второй минуте совершает покупки хотя уровень выше чем H второй минуты, это не логично, почему не работает? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вот трудно по русски написать?
Ну откуда мне знать, что ты хотел. Допустим я разберусь в коде. Хотя мне сразу непонятно зачем в коде системы (типа собираешься тестировать) использовать SelectedValue...
Тем более раз не работает значит ты не так записал свои мысли. В результате я заставлю код не покупать тогда то, но это же не будет обозначать, что он правильно описывает алгоритм... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Alexander_tr
Зарегистрирован: 01.04.2010
Сообщения: 60
Откуда: Москва
|
000 писал(а): |
Вот трудно по русски написать?
Ну откуда мне знать, что ты хотел. Допустим я разберусь в коде. Хотя мне сразу непонятно зачем в коде системы (типа собираешься тестировать) использовать SelectedValue...
Тем более раз не работает значит ты не так записал свои мысли. В результате я заставлю код не покупать тогда то, но это же не будет обозначать, что он правильно описывает алгоритм... |
Не трудно
Хотел так:
Покупка при отскоке от локального минимума дня, причем при расчете минимума не учитывается первая минута. Выход из сделки в конце дня.
У меня получилось посчитать локальный минимум и уровень выше которого если цена поднимется, то я куплю. Используя Plot нарисовал на графике то что посчитал, выглядит так как и хотел.
Но когда пишу купи если хай выше моего уровня, то работает не так как хотел, покупает когда не надо.
По факту хай ниже моего уровня, а он покупает. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Хм. Типа так что ли?
Код: |
BuyLevel = 200;
barind = BarsSince(Day() != Ref(Day(),-1));
DaylyL = LLV(L, barind);
Buy = (H > Buylevel) AND (Day() == Ref(Day(),-1));
Sell = Day() != Ref(Day(), 1);
|
Или я не так понял? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Alexander_tr
Зарегистрирован: 01.04.2010
Сообщения: 60
Откуда: Москва
|
000 писал(а): |
Хм. Типа так что ли?
Код: |
BuyLevel = 200;
barind = BarsSince(Day() != Ref(Day(),-1));
DaylyL = LLV(L, barind);
Buy = (H > Buylevel) AND (Day() == Ref(Day(),-1));
Sell = Day() != Ref(Day(), 1);
|
Или я не так понял? |
подчти
Код: |
BuyLevel = 200;
barind = BarsSince(Day() != Ref(Day(),-1));
DaylyL = LLV(L, barind);
BuyLevel = DaylyL + BayLevel;
Buy = (H > Buylevel) AND (Day() == Ref(Day(),-1));
Sell = Day() != Ref(Day(), 1);
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
Alexander_tr
Зарегистрирован: 01.04.2010
Сообщения: 60
Откуда: Москва
|
Такой код работает правильно,
но я не могу понять почему когда я через цикл минимум дня вычислял,
и так же писал buy = H > buylevel; он мне неправильно сигналы давал |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Там с циклом ты намутил что то непонятное мне.
Не следовало использовать функцию TimeFrameGetPrice(.. , in1Minute, ..)
Она предназначена для обращения к бОльшему, чем используемый фрейму.
Не понял зачем используется SelectedValue()
В общем если хочешь разобраться, то напиши как представлял работу этого кода и что от него хотел. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|