Автор |
Сообщение |
Денискг
Зарегистрирован: 12.11.2009
Сообщения: 10
|
Необходимо сделать канал. Есть обычная MA (период не важен). От неё нужно сделать верхнюю и нижнюю границы с постоянным октлонением +8% и -8% соответственно. Должен получится канал типа Боллинджера, но с неизменной шириной. Как за писать в коде, что то не соображу. Помогите пожалуйста. |
Последний раз редактировалось: Денискг (Пт Дек 25, 2009 1:50 pm), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Код: |
Top = MA(C, 20)*1.08;
Bot = MA(C, 20)*0.92; |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Денискг
Зарегистрирован: 12.11.2009
Сообщения: 10
|
За ответ спасибо. То что нужно.
Есть у меня системя, которая генерирует сигналы после выполнения двух условий, покупка только после того как сработает сигнал пересечения с нижней границей канала и RSI,30.:
Код: |
UP = (MA(C, 20)*(1.005));
DOWN = (MA(C, 20)*(0.995));
Buy1=Cross(C,DOWN);
Buy2 = Cross(r,30);
Buy=Buy1 AND Buy2;
Sell1=Cross(UP,C);
Sell2=Cross(70,r);
Sell=Sell1 AND Sell2;
Short = Sell;//0;
Cover = Buy;//0;
|
Недостаток в том , что покупка происходит после появления сигналов на одном баре. Если RSI пересек 30 раньше, чем был пересечен канал снизу вверх, покупки не будет. Как сделать так что бы система учитывала сигналы по отдельности. Например RSI,30 был на 10-м баре, а канал пересечен на 12-м (к примеру):система получила два сигнала и купила бы. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
fewry
Зарегистрирован: 06.10.2009
Сообщения: 61
|
мне в голову пришел только такой вариант. на работоспособность не проверял
Код: |
UP = (MA(C, 20)*(1.005));
DOWN = (MA(C, 20)*(0.995));
Buy1=Cross(C,DOWN);
Buy11=Cross(C,Ref(DOWN,-1));
Buy111=Cross(C,Ref(DOWN,-2));
Buy2 = Cross(r,30);
Buy=(Buy1 AND Buy2) OR (Buy11 AND Buy2) OR (Buy111 AND Buy2);
Sell1=Cross(UP,C);
Sell11=Cross(Ref(UP,-1),C);
Sell11=Cross(Ref(UP,-2),C);
Sell2=Cross(70,r);
Sell=(Sell1 AND Sell2) OR (Sell11 AND Sell2) OR (Sell111 AND Sell2);
Short = Sell;//0;
Cover = Buy;//0;
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вопрос поставлен не совсем верно.
Допустим Cross(r,30); был пол года назад а теперь наконец и Cross(C,DOWN); случился. И какая связ?. Т.е. надо ограничить время расхождения этих сигналов. Для "удержания" сигнала очень удобна функция Hold(). Делаем типа так.
Код: |
UP = (MA(C, 20)*(1.005));
DOWN = (MA(C, 20)*(0.995));
Buy1=Cross(C,DOWN);
Buy2 = Hold(Cross(r,30), 5);
Buy=Buy1 AND Buy2;
Sell1=Cross(UP,C);
Sell2=Hold(Cross(70,r), 5);
Sell=Sell1 AND Sell2;
Short = Sell;//0;
Cover = Buy;//0;
|
После срабатывания условия с RSI ждем 5 баров и если в это время сработал сигнал с Машками открываем позу. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
KpuK
Зарегистрирован: 03.11.2009
Сообщения: 14
|
А вот так правильно?
вхоядщий ТФ часовики
TimeFrameSet(inDaily);
LineD=МA(0,y);
EMALineD=EMA(O,y1);
Buy1=Hold(Cross(LineD,EMALineD),1); удерживем сигнал в течение этого бара
Sell1=Hold(Cross(EMALineD,LineD),1);
TimeFrameRestore();
Line=МA(0,y);
EMALine=EMA(O,y1);
Buy2=Cross(Line,EMALine);
Sell2=Cross(EMALine,Line);
Buy=Buy1 AND Buy2;
Sell=Sell1 AND Sell2;
Short=0;
Cover=0;
то есть по дневкам появился сигнал, запомнили и удерживаем его, потом ждем сигнала по базовому ТФ(часоик) и покупка когда есть оба сигнала[/code] |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Совсем не правильно.
В данном случае Hold не нужен. После разжатия сигналы Buy1 и Sell1 и так будут действовать в течении дня.
Код: |
TimeFrameSet(inDaily);
LineD = MA(O, y);
EMALineD = EMA(O, y1);
Buy1 = Cross(LineD, EMALineD);
Sell1 = Cross(EMALineD, LineD);
TimeFrameRestore();
Buy1 = TimeFrameExpand(Buy1, inDaily);
Sell1 = TimeFrameExpand(Sell1, inDaily);
Line = MA(O, y);
EMALine = EMA(O, y1);
Buy2 = Cross(Line, EMALine);
Sell2 = Cross(EMALine, Line);
Buy = Buy1 AND Buy2;
Sell = Sell1 AND Sell2;
Short = 0;
Cover = 0;
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
KpuK
Зарегистрирован: 03.11.2009
Сообщения: 14
|
000 писал(а): |
Совсем не правильно.
В данном случае Hold не нужен. После разжатия сигналы Buy1 и Sell1 и так будут действовать в течении дня.
Код: |
TimeFrameSet(inDaily);
LineD = MA(O, y);
EMALineD = EMA(O, y1);
Buy1 = Cross(LineD, EMALineD);
Sell1 = Cross(EMALineD, LineD);
TimeFrameRestore();
Buy1 = TimeFrameExpand(Buy1, inDaily);
Sell1 = TimeFrameExpand(Sell1, inDaily);
Line = MA(O, y);
EMALine = EMA(O, y1);
Buy2 = Cross(Line, EMALine);
Sell2 = Cross(EMALine, Line);
Buy = Buy1 AND Buy2;
Sell = Sell1 AND Sell2;
Short = 0;
Cover = 0;
|
|
Спасибо, так стало получше. Но не понимаю почему сигналы не совпадают с сигналами на чисто дневном
ТО есть на дневке сделка была 28.05 а на часовом и плюс подтверждение дневкой сделка 20.05 |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Могу посоветовать только одно. Вывести линии на график и сравнить.
Таким образом разобраться в чем дело. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
как в AFL заставить срабатывать сигнал на продажу только если покупка состоялась?
Код: |
Buyed= MyBuy = Cross(RSI(Periods), Lowline);
MySell = (Cross(Highline, RSI(Periods)) AND Buyed==True) OR (Cross(Lowline, RSI(Periods)) AND Buyed==False);
|
так же некорректно?
edit: нашёл ф-цию flip.
Код: |
MyBuy = Cross(RSI(Periods), Lowline);
Buyed = Flip(MyBuy, MySell);
MySell = (Cross(Highline, RSI(Periods)) OR Cross(Lowline, RSI(Periods))) AND Buyed==True);
|
так ведь корректно?
edit2:
Код: |
MyBuy = Cross(RSI(Periods), Lowline);
MySell = (Cross(Highline, RSI(Periods)) OR Cross(Lowline, RSI(Periods))) AND Flip(MyBuy, MySell);
|
вот он, венец творения) правда до этого все переименные нужно инициализировать. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Нет. Так не корректно.
Получается, что сигнал на продажу зависит сам от себя.
Код: |
MySell = (Cross(Highline, RSI(Periods)) OR Cross(Lowline, RSI(Periods))) AND Flip(MyBuy, MySell);
|
Т.е. В формуле MySell используется сам MySell.
Обычно это делается не так. Сначала получаем "черновые" сигналы.
Код: |
MyBuy = Cross(RSI(Periods), Lowline);
MySell = (Cross(Highline, RSI(Periods)) OR Cross(Lowline, RSI(Periods)));
|
А потом убираем лишние, те, которые не идут после противоположного.
Код: |
MyBuy = ExRem( MyBuy, MySell );
MySell = ExRem( MySell, MyBuy );
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|