Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Вопросы по AFL |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 След. |
Автор |
Сообщение |
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В функции ATR() нельзя использовать переменный период. Только константа. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
trashfx
Зарегистрирован: 27.06.2015
Сообщения: 90
|
000 писал(а): |
В функции ATR() нельзя использовать переменный период. Только константа. |
If you are referring to my previous post... look carefully! The function by TJ uses AMA together with ATR(1)!!
And it does allow array period!
Код: |
// variable period ATR
function vpATR( period )
{ // by T. Janeczko
TrueRange = ATR( 1 );
return IIf( Cum(1) > period, AMA( TrueRange, 1 / period ), Null );
}
newday = DateNum() != Ref( DateNum(), -1 );
Plot( vpATR( BarsSince( newday ) + 1 ), "vpATR with variable period", colorRed );
Plot( vpATR( 10 ), "vpATR with constant 10", colorYellow );
Plot( ATR( 10 ), "built-in ATR with constant 10", colorOrange ); |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
А в функцию ROC () можно подсунуть переменный период ? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
trashfx
Зарегистрирован: 27.06.2015
Сообщения: 90
|
home30 писал(а): |
А в функцию ROC () можно подсунуть переменный период ? |
Код: |
function vpROC( array, period )
{
Refarray = Ref( array, -period );
diff = array - Refarray;
return 100 * Nz( diff / Refarray );
} |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вот список функций куда можно засунуть переменный период
Цитата: |
AMA
AMA2
DEMA
HHV
HHVBars
LinRegSlope
LinearReg
LinRegIntercept
LLV
LLVBars
MA
Ref
StdErr
Sum
TEMA
TSF
WMA |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
Олег, а как закодить такую ситуацию, как на картинке. Цена под параболиком.Первый раз лоу свечи пересекает боллинджер, тут не входим. Далее следует отскок от боллинджера. Под отскоком понимаем закрытие свечи лоу свечи выше боллинджера. А вот когда в следущий раз лоу свечи пересечет боллинджер, то входим в лонг.
Вобщем, пока нет отскока, то не входим.
Соответственно для шорта, наоборот. Как только цена перескочила параболик, ждем пересечения хая с боллинджерем, потом ждем отскока (хай свечи ниже боллинджера) и на следующем пересечении входим в щорт. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Типа так
Код: |
BBBot = ...;
parab = ...;
BuyCond = Flip(Ref(L < BBBot AND C > BBot, -1) AND C < parab AND Ref(C < parab, -1), Cross(C, parab));
Buy = BuyCond AND L < BBBot;
BuyPrice = BBBot; |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
000 писал(а): |
Типа так
Код: |
BBBot = ...;
parab = ...;
BuyCond = Flip(Ref(L < BBBot AND C > BBot, -1) AND C < parab AND Ref(C < parab, -1), Cross(C, parab));
Buy = BuyCond AND L < BBBot;
BuyPrice = BBBot; |
|
Спасибо. Для случая как на картинке работает. Т.е. если отскок от боллинджера происходит сразу после одной свечи.
Но вот если лоу двух или более свечей подряд стоят ниже боллинджера, тогда входит сразу на второй свече, не дожидаясь отскока вот по этому условию из твоего кода:
Код: |
...(Ref(L < BBBot AND C > BBot, -1)...
|
Что тут еще то добавить ? Мы же не знаем, сколько свечей подряд будет прокалывать боллинджер и у скольких свечей будет рисоваться отскок, т.е. лоу будет выше боллинджера. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А надо обязательно чтобы после касания была свечка у которой лой не касается болинджера? Я этого не понял. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Тогда так
Код: |
BuyCond = Flip( Ref(L < BBBot, -1) AND L > BBot AND C < parab AND Ref(C < parab, -1), Cross(C, parab) ); |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
000 писал(а): |
Тогда так
Код: |
BuyCond = Flip( Ref(L < BBBot, -1) AND L > BBot AND C < parab AND Ref(C < parab, -1), Cross(C, parab) ); |
|
Немного изменил условия входа, потому как в реале боллинджер рисуется по другому. На картинке условие. Первый перелой болинжера, потом отскок. Когда второй перелой, то запоминаем лой это свечи как уровень входа BuyLevel. Если на следующих свечах происходит пересечение этого уровня входа, тогда покупаем. Если пересечения с BuyLevel не было, то на перескоке параболика, BuyLevel обнуляем и ждем, когда выполнится следующее условие. И т.д.
Написал так
Код: |
...
BuyLevel = ValueWhen(Flip( Ref(L < BBB, -1) AND L > BBB AND C < parab AND Ref(C < parab, -1), Cross(C, parab)),L);
Buy=Cross(BuyLevel,L);
BuyPrice=BuyLevel;
...
|
Уровень вроде запоминает, но не пойму, как на ближайшем параболике его обнулить ? Что нужно добавить ? А то он держит BuyLevel до тех пора, пока в лонг не войдет и не важно, сколько раз уже параболик переворачивался. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Код: |
BuyCond = Flip( Ref(L < BBBot, -1) AND L > BBot AND C < parab AND Ref(C < parab, -1), Cross(C, parab) );
BuyLevel = ValueWhen( Ref(L < BBB, -1) AND L > BBB AND C < parab AND Ref(C < parab, -1), L );
BuyLevel = BuyLevel*BuyCond;
Buy=Cross(BuyLevel,L);
BuyPrice=BuyLevel; |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
000 писал(а): |
Код: |
BuyCond = Flip( Ref(L < BBBot, -1) AND L > BBot AND C < parab AND Ref(C < parab, -1), Cross(C, parab) );
BuyLevel = ValueWhen( Ref(L < BBB, -1) AND L > BBB AND C < parab AND Ref(C < parab, -1), L );
BuyLevel = BuyLevel*BuyCond;
Buy=Cross(BuyLevel,L);
BuyPrice=BuyLevel; |
|
Да,спасибо. Только по условию BuyLevel - это у нас лоу свечи на втором перелое болинжера. Исправил на такое
Код: |
BuyLevel = ValueWhen( L > BBB AND C < parab AND Ref(C < parab, -1), L );
|
Для лонга работает. С шортом что-то туплю. Опишу еще раз условия. После перескока параболика (цена стала выше параболика) ждем перехая болинжера (хай свечи нарисовался выше болинжера). Далее отскок. Хай свечи или свечей ниже болинжера. Когда происходит второй перехай болинжера, запоминаем хай это свечи в качестве ShortLevel. Когда цена пересекает ShortLevel, то входим шорт. Все это пока цена выше параболика. Как только цена ушла под параболик, все отменяем, считаем условия для лонга. Потом перескок и снова считаем для шорта. Написал так
Код: |
BBT=BBandTop...; // это верхний болинжера
Parab=...;
ShortCond=Flip(Ref(H > BBT, -1) AND H < BBT AND C > parab AND Ref(C > parab, -1), Cross(parab,C) );
ShortLevel=ValueWhen(H> BBT AND C > parab AND Ref(C > parab, -1), H );
ShortLevel=ShortCond*ShortLevel;
Short = Cross(H,ShortLevel) AND TradeTime;
ShortPrice= ShortLevel;
|
Считает фигню для шорта, не пойму в чем дело.
Посмотрел еще раз. Лонг тоже неправильно. Запоминает BuyLevel на первом перелоу болинжера, для шорта на первом перехае. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Наверное как то так
Код: |
ShortCond1 = Flip( Ref( H > BBT, -1 ) AND H < BBT AND C > parab AND Ref(C > parab, -1), Cross(parab, C) );
ShortCond2 = Ref( ShortCond1, -1 ) AND ShortCond1 AND Ref( H > BBT, -1 ) AND H < BBT;
ShortCond2On = Flip( ShortCond2, Cross(parab, C) );
ShortLevel = ValueWhen( ShortCond2, H );
Short = Cross(H, ShortLevel) AND TradeTime AND ShortCond2On;
ShortPrice= ShortLevel; |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Вопросы по AFL |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 След. |
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|