Автор |
Сообщение |
belin
Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user
|
Зашкалило. Не могу без цикла написать AFL код.
Предположим имеем несколько свечных комбинаций. Пишем для них условия нахождения: (Просто для примера) Три белых солдата-Условие1, Медвежье поглощение- Условие2, ..., Три черных вороны-Условие_n. Находим эти комбинации на графике.
Теперь хочу входить в позицию Buy, если цена пересекла максимум свечной комбинации, а свечей в ней 2, 3 или 4, в зависимости от паттерна . Или в Sell, если цена пересекла минимум свечной комбинации.
Для одного паттерна всё просто:
Код: |
Условие1=...(описываем возникновение 3 солдатов);
Buing=ValueWhen(Условие1, H,1);
Selling=ValueWhen(Условие1, Ref(L,-2),1);
Buy=Cross(C, Buing);
Sell=Cross(Selling,C); |
Для двух паттернов тоже понятно, записываем Условие1 и Условие2 и через Buing= IIF(Условие1 и не Условие2, не Условие1 и Условие2, ...) находим Buing и Selling. А что делать если паттернов десяток. Можно ли без цикла обойтись? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Не парься. Оттестируй их по отдельности. Я тя уверяю суммарная система будет не лучше чем сумма систем. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
belin
Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user
|
000 писал(а): |
Не парься. Оттестируй их по отдельности. Я тя уверяю суммарная система будет не лучше чем сумма систем. |
Весь смысл, на мой взгляд, в построении переворотной системы, которая почти всегда в рынке. Входим по одному паттерну, второй, ... пятый в том же направлении, переворачиваемся при изменении направления паттерна, или не отрабатывает Buy, переворачиваемся на Sell. Наш торговый плагин (СмартТрейдовский) заброшен, тейкпрофит с контролем исполнения выставить невозможно, приходится придумывать переворотные системы. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
По смартовскому плагину.
А тот недоделок что был нормально работал?
Мне не понравилось то как это сделано и кажется, что работает весьма не надежно. Поэтому и запал пропал...
По вопросу.
Не обязательно делать
Код: |
записываем Условие1 и Условие2 и через Buing= IIF(Условие1 и не Условие2, не Условие1 и Условие2, ...) |
Если надо чтобы срабатывало только когда одно условие то проще так
Код: |
Условие1 + Условие2 +... == 1; |
Или я вопрос не понял. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
belin
Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user
|
000 писал(а): |
Если надо чтобы срабатывало только когда одно условие то проще так
Код: |
Условие1 + Условие2 +... == 1; |
Или я вопрос не понял. |
Вопрос только в том, как без использования циклов менять уровень максимума паттерна = Buing(для покупки) и линию минимума паттерна = Selling (для уровня продажи) при возникновении нового паттерна. Я хочу получить что-то типа Price channel, но изменение максимума и минимума только при возникновении нового паттерна. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
belin
Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user
|
000 писал(а): |
По смартовскому плагину.
А тот недоделок что был нормально работал?
Мне не понравилось то как это сделано и кажется, что работает весьма не надежно. Поэтому и запал пропал...
|
А я на твоём, грубо обзываемом недоделке, неплохо заработал. Не надо плохо отзываться о машине, которая тебя везёт. Нужно бережно и внимательно относиться к данному тебе, и всё будет способствовать тебе. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Опять нифига не понял проблему.
Опиши на конкретном примере с парой патернов... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
belin
Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user
|
Попробую на примере внутреннего и внешнего бара:
Код: |
_SECTION_BEGIN("Price");
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Close %g {{VALUES}}", C ));
Plot( C, "Close", ParamColor("Color", colorBlack ), styleCandle | ParamStyle("Style") | GetPriceStyle() );
_SECTION_END();
_SECTION_BEGIN("Price_patterns");
RefH = Ref(H,-1);
RefL = Ref(L,-1);
/* 1-st Pattern "Outter Bar" */
Outter= H >= RefH AND L <= RefL;
/* 2-nd Pattern"Inner Bar" */
Inner= H <= RefH AND L >= RefL;
BuingInner=ValueWhen(Inner, RefH,1);
SellingInner=ValueWhen(Inner, RefL,1);
BuingOutter=ValueWhen(Outter, H,1);
SellingOutter=ValueWhen(Outter, L,1);
PlotShapes(IIf(Inner == 1, shapeHollowSmallCircle, shapeNone),3, layer = 0, yposition = L, offset = -15);
PlotShapes(IIf(Outter == 1, shapeHollowSmallCircle, shapeNone),3, layer = 0, yposition = H, offset = 15);
Plot( BuingOutter, _DEFAULT_NAME(), colorGreen, ParamStyle("Style") );
Plot( SellingOutter, _DEFAULT_NAME(), colorRed, ParamStyle("Style") );
Plot( BuingInner, _DEFAULT_NAME(), colorBlue, ParamStyle("Style") );
Plot( SellingInner, _DEFAULT_NAME(), colorYellow, ParamStyle("Style") );
_SECTION_END();
|
Хотелось бы иметь две линии Buing и Selling, которые меняются при возникновении нового паттерна, если число паттернов больше 5. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
belin
Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user
|
Как я понял, без цикла по просмотру паттернов не обойтись. Жаль. Цикл у меня жрет ресурсы страшно. Тиковая база, 5-секундный интервал, а паттерны смотрятся на минутках, 5-минутках, цикл убийствинен даже для I7. Попробую разделить задачу: для теста полный цикл, для реала - данные последнего часа. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Я в общем так и не смог понять в чем трабл.
Ну возьмем твой пример. Что мешает сделать так?
Код: |
...
/* 1-st Pattern "Outter Bar" */
Outter= H >= RefH AND L <= RefL;
/* 2-nd Pattern"Inner Bar" */
Inner= H <= RefH AND L >= RefL;
Pattern = Outter OR Inner;
BuingInner=ValueWhen(Pattern, RefH,1);
SellingInner=ValueWhen(Pattern, RefL,1);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
belin
Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user
|
000 писал(а): |
Я в общем так и не смог понять в чем трабл.
Код: |
BuingInner=ValueWhen(Pattern, RefH,1);
SellingInner=ValueWhen(Pattern, RefL,1);
|
|
Вот и я не понимаю почему я такой тупой последнее время. Остался один вопрос, как сделать BuingInner и SellingInner, если в паттерне минимум и максимум могут возникать иногда две свечи назад, иногда три, иногда одну, для каждого паттерна известно на какой, т.е. как в даном случае записать RefH и RefL ведь IIF от IIF не возьмешь, в цикле проще:
Код: |
If((Pattern1 с минимумом 1-на свеча назад) OR (Pattern2 с минимумом 1-на свеча назад) OR ....)
{RefL= Ref(L,-1)}
ElseIf((Pattern1 с минимумом 2 -ве свечи назад) OR (Pattern2 с минимумом 2-ве свечи назад) OR ....)
{RefL= Ref(L,-2)}
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Мне кажется проще для каждого паттерна сразу при его описании делать RefH и RefL. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
belin
Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user
|
000 писал(а): |
Мне кажется проще для каждого паттерна сразу при его описании делать RefH и RefL. |
Вопрос в том как? Уйдём от терминов RefH и RefL к Pattern_min и Pattern_max, чтобы я не запутался и не запутал остальных. В моей интерпретации RefH и RefL это минимум и максимум прошлой свечи, Ref2H=Ref(H,-2) и Ref2L=Ref(L,-2) это минимум и максимум две свечи назад. Для двухбарных паттернов
Код: |
/* 1-st Pattern "Outter Bar" */
Outter= H >= RefH AND L <= RefL;
Pattern_min =L;// т.е для внешнего минимум паттерна, это минимум последней свечи
/* 2-nd Pattern"Inner Bar" */
Inner= H <= RefH AND L >= RefL;
Pattern_min =RefL;// для внутреннего минимум паттерна, это минимум прошлой свечи
|
для трехсвечного паттерна в общем случае
Код: |
Pattern_min =MIN( MIN(L , RefL), Ref2L );
|
Но если возникший паттерн двухсвечный, его минимум расчитывается только по этим двум свечам, без учёта предыдущей.
В итоге хотелось бы иметь код для набора паттернов, Если возник паттерн(двух, трёх, четырёхсвечный), если цена пересекла его минимум вниз - продаём, поболталась внизу, вернулась, пересекла максимум этого же паттерна, значит условия на рынке изменились, покупаем и так до появления следующего паттерна, цена пересекла уже его максимум вверх - остаёмся в покупке, пересекла его новый минимум вниз -разворачиваемся в продажу. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ну вот. Я и предлогаю сразу для каждого паттерна описывать его
Pattern_min и Pattern_max
типа так
Код: |
Pattern1 = ...;
Pattern_min = Ref(...);
Pattern_max = Ref(...);
Pattern2 = ...;
Pattern_min = IIf(Pattern2, Ref(...), Pattern_min);
Pattern_max = IIf(Pattern2, Ref(...), Pattern_max);
....... |
Конечно геморойно... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
belin
Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user
|
Спасибо, пробую.
000 писал(а): |
Конечно геморойно... |
Вот на C# подобное писать точно геморойно, а это только требует времени и внимательности. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|