Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Вопросы по AFL |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 След. |
Автор |
Сообщение |
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
Олег, а как работать с переменными, когда нужно из какой-то последовательности выделить максимальное значение и присвоить это переменной. Например, цена перескочила параболик. Запомнили хай первой свечи в переменную (high_start). Далее, если на любой из следующих свечей хай стал выше первой, тогда присваиваем новый хай другой переменной (high_max). А потом сравниваем текущий хай, и, если он, выше high_max, тогда записываем этот новый хай в high_max. Я написал так:
Код: |
Parab = SAR( 0.02, 0.2 );
high_start=ValueWhen( Cross(Parab, O),H);
high_max=IIf(H>high_start,H,high_start);
|
Но считает неправильно.Чего-то не хватает. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
Неудачно спросил. Вот на картинке заявка на шорт выставляется по уровню индикатора ATR (в нижней части окна индикатор). После перескока параболика запоминаем хай индикатора и ставим заявку- заявка=параболик на перескоке+(ATR*коэффициент). Далее. Пока АTR не перебил предыдущий хай, заявку не сдвигаем. Как только перебил, то передвигаем ее выше, пересчитывая по вышеуказанной формуле уровень заявки. Если АTR идет вниз, то заявку не меняем. Сдвигаем снова вверх, если только будет перехай по ATR. И так до конца текущего параболика. А у меня почему-то она прыгает вслед за ATR. Код, который я использую, аналогичен, что написал выше про цену. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Так. И что мешает написать
Код: |
high_max = HighestSince( Cross(Parab, O), ValueWhen( Cross(Parab, O),H) + ATR(9) ); |
??? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
Прошу прощения за мою тупость, но не догоняю. Методом тыка написал так:
Код: |
SAR_0L = ValueWhen( Cross(Parab, O), Ref(Parab, -1));
ATR_long_max = HighestSince( Cross(Parab, O), ValueWhen( Cross(Parab, O),ATR(3)));
mnog_atr_long=Optimize("mnog_long",4,1,10,0.5);
BuyLevel = SAR_0L-(ATR_long_max*mnog_atr_long);
|
Рисует уровень покупки, но берет только первое значение ATR после перескока параболика,далее вычисляет по формуле правильно. А мне то надо, чтобы уровень двигался, если был новый перехай по ATR. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Код: |
ATR_long_max = HighestSince( Cross(Parab, O), SAR_0L + ATR(3)); |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
Разобрался с горем пополам. Немного по другому,но работает. Вот еще косяк всплыл. Как побороть можно. Есть код:
Код: |
Short = Cross(H,ShortLevel) AND Ref(Parab < C, -1);
|
В ситуации как на картинке, пропускает сделку. Получается, что хай первой свечи после параболика выше ShortLevel (красная линия на графике) и, соответственно, кроса нет. Как побороть, чтобы входило в сделку в такой ситуации ? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Сдвинь ShortLevel вправо на один бар функцией Ref() |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
000 писал(а): |
Сдвинь ShortLevel вправо на один бар функцией Ref() |
Не помогает. Уровень считается в момент перескока параболика и он горизонтальный. Написал со сдвигом вправо, все так же. Не входит в сделку как на картинке.
Код: |
TradeTime = TimeNum() >= 100400 AND TimeNum() <= 184400;
Parab = SAR( 0.02, 0.2 );
SetPositionSize( 2, spsShares );
range_short=Param("fibo-short",0.9,0.1,3.5,0.01);
SAR_100 = ValueWhen( Cross(O,Parab), Ref(Parab, -1));
SAR_0 = ValueWhen( Cross(O,Parab), Parab);
ShortLevel =SAR_100+(SAR_100-SAR_0*range_short;
Short = Cross(H,ref(ShortLevel,1)) AND Ref(Parab < C, -1) AND TradeTime;
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А зачем ты ShortLevel сдвинул влево? Надо вправо. Ref(ShortLevel, -1) |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
Так то я думал, что вправо +1. ref, -1 это же прошлое значение. Ладно, буду знать. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
Олег, подскажи по функции:
Код: |
H_Long = HighestSince ( Cross(Parab,O),H);
|
Рисует вот что. А мне надо, чтобы запоминал и рисовал только самый верхний хай от параболика до параболика. Какие еще аргументы не указываю ? Или надо другую функцию использовать. В мануале ничего подходящего найти не смог. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Он и рисует самый верхний хай от параболика до параболика.
Вот смотри. Произошло пересечение. После этого появился хай. Рисуем его. Появился следующий хай, выше прошлого - рисуем его. А сразу нарисовать следующий никак нельзя. потому, что его еще нет и это будет подсматривание в будущее...
Надеюсь нормально объяснил. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
По рисунку понятно. А как мне запомнить в переменную самый верхний хай, чтобы использовать его при расчете уровней после обратного перескока параболика ? Пробовал через
Код: |
H_Long = ValueWhen(HighestSince ( Cross(Parab,O),H));
|
Не работает. Говорит, ошибка. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
вопрос не понял. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Вопросы по AFL |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 След. |
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|