Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Вопросы по AFL |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 След. |
Автор |
Сообщение |
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Как это не работает? У меня работает. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Саня
Зарегистрирован: 11.02.2009
Сообщения: 53
Откуда: Москва
|
Сегодня еще раз проверю.
Я сейчас экспериментирую с Multiple Time Frame индикакторами, в частности MACD (код из сэмпла + минимальная модификация http://www.amibroker.com/docs/MTFIndicators.html).
Код: |
Count = 0;
result = 0;
for( i = 10; i <= 300; i++ )
{
TimeFrameSet( i * in1Minute );
m = MACD( 12, 26 );
TimeFrameRestore();
m = IIf( TimeFrameExpand( m, i * in1Minute ) > 0, 1, -1 );
result = result + m;
Count++;
}
AddToComposite( result / Count, "~MACD"+Name(), "X" );
|
Код: |
x = Foreign("~MACD"+Name(),"C");
Buy=Ref( x, -1) > Ref(x,-2);
Sell= Ref( x, -1) < Ref(x,-2);
shape = Buy * shapeUpArrow + Sell * shapeDownArrow;
Plot( x, "MTMACD", colorBlue , styleThick ) ;
//Plot( Close, "Price", colorBlack, styleCandle | styleOwnScale );
PlotShapes( shape, IIf( Buy, colorGreen, colorRed ), 0, IIf( Buy, Low, High ) ); |
Появилась пара вопросов, буду признателен за помощь.
1. Индикатор строится на базе 1 минутного таймфрейма. После этого я переключаюсь на другой таймфрейм (например, 20 минут) и тестирую систему. Она выдает сигналы для 1 минутного таймфрейма, а не для 20-минутного. Как добиться работы на 20-ти минутном таймфрейме?
2. Не рисует стрелки сигналов на графике (в Pane Properties стрелки разрешены).
3. В настройках ставлю Run every 1 min. Время от времени индикатор не пересчитывается на real-time данных (зависает и рисует прямую линию). Иногда помогает ручной запуск Scan. Как это лечить (такая ошибка может дорого обойтись)? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Саня писал(а): |
Я сейчас экспериментирую с Multiple Time Frame индикакторами, в частности MACD (код из сэмпла + минимальная модификация http://www.amibroker.com/docs/MTFIndicators.html).
Появилась пара вопросов, буду признателен за помощь.
1. Индикатор строится на базе 1 минутного таймфрейма. После этого я переключаюсь на другой таймфрейм (например, 20 минут) и тестирую систему. Она выдает сигналы для 1 минутного таймфрейма, а не для 20-минутного. Как добиться работы на 20-ти минутном таймфрейме?
|
Тут важно понимать, что АА почти совсем независит от окон отображения графиков. В некотором роде это почти самостоятельная программа. Посему вопросы.
1. Где переключаетесь, на графике или в настройках АА? Если на графике, то на работу АА это никак не влияет, если в настройках АА То не советую т.к. это плохо повлияет на заполнение композитного символа.
Получить синалы для 20 минутного символа надо где? Если на графике, то достаточно просто переключиться на 20 минутный фрейм, а если в АА, то надо значительно переделывать код, да и то я не уверен.
В настройках АА оставить базовый фрейм,
создавать на нем композитный символ,
переключаться в коде на 20 мин
получать сигналы на этом фрейме
потом расжимать все это дело до базового фрейма
Саня писал(а): |
2. Не рисует стрелки сигналов на графике (в Pane Properties стрелки разрешены).
|
Должен рисовать. Стрелки задаются при помощи кода индикатора. На отображение этих стрелок Pane Properties не влияет. Эта опция влияет только на отображение стрелок по результатам теста. А стрелки не рисуются вероятно потому, что они должны рисоваться у максимумов/минимумов цены (у Вас в коде IIf( Buy, Low, High ) ), а цена вообще не выводится, вот их и не видно.
Саня писал(а): |
3. В настройках ставлю Run every 1 min. Время от времени индикатор не пересчитывается на real-time данных (зависает и рисует прямую линию). Иногда помогает ручной запуск Scan. Как это лечить (такая ошибка может дорого обойтись)?
|
Неприятная штука, но вот тут ничего сказать не могу. Мало опыта общения с AddToComposite и сканером... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Саня
Зарегистрирован: 11.02.2009
Сообщения: 53
Откуда: Москва
|
Спасибо за ответ, почти все заработало.
AddToComposite нужно было использовать с флагом atcFlagEnableInIndicator, тогда пересчитывается в режиме реального времени (правда элемент кривизны все равно остается ).
Остался вопрос про "разжимать все это дело до базового фрейма". Насколько я понимаю, это делается функцией TimeFrameExpand. Описание функции я прочитал уже раз 10, но зачем она в принципе нужна, не понимаю. Получаем некое значение (ряд значений), делаем дальше с ним, что захотим, зачем еще разжимать? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
настырный
Зарегистрирован: 15.06.2008
Сообщения: 67
|
Саня писал(а): |
:1. Индикатор строится на базе 1 минутного таймфрейма. После этого я переключаюсь на другой таймфрейм (например, 20 минут) и тестирую систему. Она выдает сигналы для 1 минутного таймфрейма, а не для 20-минутного. Как добиться работы на 20-ти минутном таймфрейме?
? |
Прошу прощения, возможно, я не понял принцип работы системы, но, на сколько я знаю, нельзя, работая в старшем таймфрейме (20 мин), получать сигналы из младшего (1 мин) Тут я могу ошибаться. Но рекомендую все-таки этот момент проверить. Это раз.
Второе замечание. На мой взгляд, вызывая в цикле конструкции типа
TimeFrameSet(... )
...
TimeFrameExpand()
при каждом проходе, вы сильно тормозите выполнение программы.
Как мне кажется, можно было бы сделать это до цикла, т.е. заполнить массив, а потом в цикле выдергивать конкретные значения из этого массива.
Еще раз прошу прощения, если я ошибся в своих предположениях и только отвлек вас от важной проблемы. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Саня писал(а): |
Остался вопрос про "разжимать все это дело до базового фрейма". Насколько я понимаю, это делается функцией TimeFrameExpand. Описание функции я прочитал уже раз 10, но зачем она в принципе нужна, не понимаю. Получаем некое значение (ряд значений), делаем дальше с ним, что захотим, зачем еще разжимать? |
Если без экспанд, то график получается сжатым данные рядом и их положение не соответствует положению данных младшего фрейма. Для примера вот код с нерасжатыми данными вместе с младшим фреймом.
Код: |
TimeFrameSet(inDaily);
OD = Open;
HD = High;
LD = Low;
CD = Close;
TimeFrameRestore();
PlotOHLC(OD, HD, LD, CD, "Daily", colorRed, styleCandle);
Plot(C, "Base", colorBlack, styleCandle);
|
и картинка к нему. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А вот код с расжатыми данными
Код: |
TimeFrameSet(inDaily);
OD = Open;
HD = High;
LD = Low;
CD = Close;
TimeFrameRestore();
OD = TimeFrameExpand(OD, inDaily, mode = expandPoint );
HD = TimeFrameExpand(HD, inDaily, mode = expandPoint );
LD = TimeFrameExpand(LD, inDaily, mode = expandPoint );
CD = TimeFrameExpand(CD, inDaily, mode = expandPoint );
PlotOHLC(OD, HD, LD, CD, "Daily", colorRed, styleBar);
Plot(C, "Base", colorBlack, styleCandle);
|
и картинка к нему. Видно, что на этой картинке результирующий бар (красного цвета) расположен именно на месте того дня когда появился. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Саня
Зарегистрирован: 11.02.2009
Сообщения: 53
Откуда: Москва
|
2 000 Олег, спасибо! Потихоньку начинаю ловить кайф от возможностей Ами.
2 настырный Да, пока что не получается, но я не опускаю руки. Идея ведь красивая: после появления сигнала на большем таймфрейме переключаться на меньший и ловить момент входа при первом откате.
По второму замечанию - так делается в примерах разработчиков Ами. Небольшая заторможенность чувствуется, если набросать на экран сразу несколько индикаторов со сменой таймфреймов в цикле. Если не злоупотреблять, то проблем не вижу. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
настырный
Зарегистрирован: 15.06.2008
Сообщения: 67
|
Саня писал(а): |
Идея ведь красивая: после появления сигнала на большем таймфрейме переключаться на меньший и ловить момент входа при первом откате.
По второму замечанию - так делается в примерах разработчиков Ами. Небольшая заторможенность чувствуется, если набросать на экран сразу несколько индикаторов со сменой таймфреймов в цикле. Если не злоупотреблять, то проблем не вижу. |
Ну вот! Это ж другое дело, если сигнал на старшем тайм фрейме, а после него смотреть на младшем.
Из предыдущего я понял, что наоборот. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Саня
Зарегистрирован: 11.02.2009
Сообщения: 53
Откуда: Москва
|
Господа, помогите разобраться с следующей проблемкой.
Имеется индикатор, который генерит сигналы Buy, Sell, Short и Cover .
На все сигналы настроены алерты.
Достаточно часто (но не всегда) моменты генерации сигналов Sell и Short или Buy и Cover совпадают. И тогда алерты начинают сыпаться в цикле, без остановки.
При тестировании на исторических данный никаких проблем не замечено, все корректно. Если вручную выбрать момент срабатывания сигнала (либо этот момент наступает на real-time данных), то появляется эта проблема с циклом. При отключении возможности шортить или лонгить в настройках проблема пропадает. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Блин. Я с алертами не работал... А можно кусок кода с ними? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Саня
Зарегистрирован: 11.02.2009
Сообщения: 53
Откуда: Москва
|
Код: |
Buy = (abs (ao) > 100) AND Cross( tz , EMA(tz,9) );
Sell = Cross( EMA(tz,9) , tz );
Short = (abs (ao) > 100) AND Cross( EMA(tz,9) , tz );
Cover = Cross( tz , EMA(tz,9));
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);
Short = ExRem(Short,Cover);
Cover = ExRem(Cover,Short);
AlertIf( Buy, "SOUND C:\\Windows\\Media\\ringin.wav", Now(2) + " Buy, price=" + C, 1);
AlertIf( Sell, "SOUND C:\\Windows\\Media\\ringin.wav", Now(2) + " Sell, price=" + C, 2);
AlertIf( Short, "SOUND C:\\Windows\\Media\\ringin.wav", Now(2) + " Short, price=" + C, 3);
AlertIf( Cover, "SOUND C:\\Windows\\Media\\ringin.wav", Now(2) + " Cover, price=" + C, 4); |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
Подскажите, можно ли как то программно определить текущий таймфрейм который установлен в Амиброкере.
Т.е например я работаю с 5 мин таймфреймом, сигналы поступают от пересечения 2 средних и есть старший таймфрейм на нем 1 скользящая как фильтр, можно ли сделать чтобы старший таймфрейм расчитывался автоматом как 3*текущий таймфрейм, т.е. стоит мне поменять текущий с 5 мин на 10 мин, то старший сделался бы сразу 30 мин.
Сейчас, если я правильно понимаю, старший фрейм жестко записывается в коде, я же хочу его сделать зависимым от младшего с помощью коэффициента. Это возможно? |
_________________ Антон |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
По моему стандартного спооба определения фрейма нет.
Единственное, что приходит в голову взять время соседних баров и вычесть. в среднем разница должна быть равна текущему фрейму. Правда способ не надежный, на границах дней (еслиторговля не круглосуточная) будут косяки. Косяки будут и если данные дырявые. Но в общем если голову поломать, то наверное можно получить нормальный результат. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
Олег, если когда-нить соберешься писать пожеланию по улучшению Томашу, то может добавишь это в список? |
_________________ Антон |
|
Посмотреть профиль Отправить личное сообщение |
|
|
Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Вопросы по AFL |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 След. |
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|