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



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

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

Олег здравствуйте,

неделю бьюсь пытаюсь сделать свою первую программы на 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
Откуда: Москва

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

Блин, вот так всегда. Цикл получилось заставить работать.
Надо было написать вначале кода DaylyL = 1000000;

Но возникла другая проблема, почти каждый день он мне покупает на второй минуте, хотя уровень покупки выше h минуты
Посмотреть профиль Отправить личное сообщение
Alexander_tr



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

СообщениеДобавлено: Сб Апр 03, 2010 2:39 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 начинаются глюки когда сравниваешь переменную и элемент массива, возможно причина в этом
Посмотреть профиль Отправить личное сообщение
Alexander_tr



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

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

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

Господа профессионалы, подскажите пожалуйста можно ли сделать корректное сравнение переменной и массива, так что бы функции buy и sell корректно работали?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Цитата:

Господа профессионалы, подскажите пожалуйста можно ли сделать корректное сравнение переменной и массива, так что бы функции buy и sell корректно работали?

Честно говоря я запутался в вопросах.
Вообще сравнивать массив и переменную проблем нет. Спроси плиз так, чтобы я понял в чем проблема и смог ответить.

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



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

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

Остался 1 вопрос:

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

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

то при просмотре сгенерированных сделок, получалось, что они происходили на второй минуте, хотя хай этой минуты был ниже моего уровня.

После того как я вычислил DaylyL как массив (через IIF), и соответственно buylevel у меня стал массивом, то условие на buy которое я написал выше отработало корректно, и сделки нарисовались как надо.

Поэтому вопрос такой, как можно сравнить переменную и массив в buy, что бы все сработало как надо. Просто я пока не силен в AFL и видимо не знаю какой то волшебной функции, или неправильно понял принцип работы языка.

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


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

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

Я не могу понять что надо и не могу понять вопрос.
Напиши по русски правила системы. Я напишу код.
Никаких проблем в сравнении массива и переменной нет. Переменная в AFL это практически массив у которого все элементы одинаковые.

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


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

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

По моему вот это
Код:

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
Откуда: Москва

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

вот код:

Код:


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

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

Вот трудно по русски написать?
Ну откуда мне знать, что ты хотел. Допустим я разберусь в коде. Хотя мне сразу непонятно зачем в коде системы (типа собираешься тестировать) использовать SelectedValue...
Тем более раз не работает значит ты не так записал свои мысли. В результате я заставлю код не покупать тогда то, но это же не будет обозначать, что он правильно описывает алгоритм...

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



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

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

000 писал(а):
Вот трудно по русски написать?
Ну откуда мне знать, что ты хотел. Допустим я разберусь в коде. Хотя мне сразу непонятно зачем в коде системы (типа собираешься тестировать) использовать SelectedValue...
Тем более раз не работает значит ты не так записал свои мысли. В результате я заставлю код не покупать тогда то, но это же не будет обозначать, что он правильно описывает алгоритм...


Не трудно

Хотел так:

Покупка при отскоке от локального минимума дня, причем при расчете минимума не учитывается первая минута. Выход из сделки в конце дня.

У меня получилось посчитать локальный минимум и уровень выше которого если цена поднимется, то я куплю. Используя Plot нарисовал на графике то что посчитал, выглядит так как и хотел.

Но когда пишу купи если хай выше моего уровня, то работает не так как хотел, покупает когда не надо.

По факту хай ниже моего уровня, а он покупает.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Хм. Типа так что ли?

Код:

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
Откуда: Москва

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

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
Откуда: Москва

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

Такой код работает правильно,

но я не могу понять почему когда я через цикл минимум дня вычислял,
и так же писал buy = H > buylevel; он мне неправильно сигналы давал
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Там с циклом ты намутил что то непонятное мне.
Не следовало использовать функцию TimeFrameGetPrice(.. , in1Minute, ..)
Она предназначена для обращения к бОльшему, чем используемый фрейму.
Не понял зачем используется SelectedValue()

В общем если хочешь разобраться, то напиши как представлял работу этого кода и что от него хотел.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen