Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 AFL Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Фев 23, 2009 1:41 pm Ответить с цитатой Вернуться к началу

Как это не работает? У меня работает.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Саня



Зарегистрирован: 11.02.2009
Сообщения: 53
Откуда: Москва

СообщениеДобавлено: Ср Фев 25, 2009 3:28 pm Ответить с цитатой Вернуться к началу

Shocked Сегодня еще раз проверю.

Я сейчас экспериментирую с 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

СообщениеДобавлено: Чт Фев 26, 2009 12:15 am Ответить с цитатой Вернуться к началу

Саня писал(а):

Я сейчас экспериментирую с 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 и сканером... Sad

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Саня



Зарегистрирован: 11.02.2009
Сообщения: 53
Откуда: Москва

СообщениеДобавлено: Пт Фев 27, 2009 5:01 pm Ответить с цитатой Вернуться к началу

Спасибо за ответ, почти все заработало.
AddToComposite нужно было использовать с флагом atcFlagEnableInIndicator, тогда пересчитывается в режиме реального времени (правда элемент кривизны все равно остается Wink ).
Остался вопрос про "разжимать все это дело до базового фрейма". Насколько я понимаю, это делается функцией TimeFrameExpand. Описание функции я прочитал уже раз 10, но зачем она в принципе нужна, не понимаю. Получаем некое значение (ряд значений), делаем дальше с ним, что захотим, зачем еще разжимать? Question
Посмотреть профиль Отправить личное сообщение
настырный



Зарегистрирован: 15.06.2008
Сообщения: 67

СообщениеДобавлено: Пт Фев 27, 2009 5:14 pm Ответить с цитатой Вернуться к началу

Саня писал(а):
:1. Индикатор строится на базе 1 минутного таймфрейма. После этого я переключаюсь на другой таймфрейм (например, 20 минут) и тестирую систему. Она выдает сигналы для 1 минутного таймфрейма, а не для 20-минутного. Как добиться работы на 20-ти минутном таймфрейме?
?


Прошу прощения, возможно, я не понял принцип работы системы, но, на сколько я знаю, нельзя, работая в старшем таймфрейме (20 мин), получать сигналы из младшего (1 мин) Тут я могу ошибаться. Но рекомендую все-таки этот момент проверить. Это раз.

Второе замечание. На мой взгляд, вызывая в цикле конструкции типа
TimeFrameSet(... )
...
TimeFrameExpand()
при каждом проходе, вы сильно тормозите выполнение программы.

Как мне кажется, можно было бы сделать это до цикла, т.е. заполнить массив, а потом в цикле выдергивать конкретные значения из этого массива.

Еще раз прошу прощения, если я ошибся в своих предположениях и только отвлек вас от важной проблемы.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пт Фев 27, 2009 9:40 pm Ответить с цитатой Вернуться к началу

Саня писал(а):

Остался вопрос про "разжимать все это дело до базового фрейма". Насколько я понимаю, это делается функцией TimeFrameExpand. Описание функции я прочитал уже раз 10, но зачем она в принципе нужна, не понимаю. Получаем некое значение (ряд значений), делаем дальше с ним, что захотим, зачем еще разжимать? Question

Если без экспанд, то график получается сжатым данные рядом и их положение не соответствует положению данных младшего фрейма. Для примера вот код с нерасжатыми данными вместе с младшим фреймом.
Код:

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

СообщениеДобавлено: Пт Фев 27, 2009 9:46 pm Ответить с цитатой Вернуться к началу

А вот код с расжатыми данными
Код:

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
Откуда: Москва

СообщениеДобавлено: Сб Фев 28, 2009 12:41 am Ответить с цитатой Вернуться к началу

2 000 Олег, спасибо! Потихоньку начинаю ловить кайф от возможностей Ами. Cool

2 настырный Да, пока что не получается, но я не опускаю руки. Идея ведь красивая: после появления сигнала на большем таймфрейме переключаться на меньший и ловить момент входа при первом откате.
По второму замечанию - так делается в примерах разработчиков Ами. Небольшая заторможенность чувствуется, если набросать на экран сразу несколько индикаторов со сменой таймфреймов в цикле. Если не злоупотреблять, то проблем не вижу. Wink
Посмотреть профиль Отправить личное сообщение
настырный



Зарегистрирован: 15.06.2008
Сообщения: 67

СообщениеДобавлено: Вс Мар 01, 2009 9:55 am Ответить с цитатой Вернуться к началу

Саня писал(а):
Идея ведь красивая: после появления сигнала на большем таймфрейме переключаться на меньший и ловить момент входа при первом откате.
По второму замечанию - так делается в примерах разработчиков Ами. Небольшая заторможенность чувствуется, если набросать на экран сразу несколько индикаторов со сменой таймфреймов в цикле. Если не злоупотреблять, то проблем не вижу. Wink


Ну вот! Это ж другое дело, если сигнал на старшем тайм фрейме, а после него смотреть на младшем.
Из предыдущего я понял, что наоборот.
Посмотреть профиль Отправить личное сообщение
Саня



Зарегистрирован: 11.02.2009
Сообщения: 53
Откуда: Москва

СообщениеДобавлено: Ср Мар 18, 2009 2:44 pm Ответить с цитатой Вернуться к началу

Господа, помогите разобраться с следующей проблемкой.
Имеется индикатор, который генерит сигналы Buy, Sell, Short и Cover .
На все сигналы настроены алерты.
Достаточно часто (но не всегда) моменты генерации сигналов Sell и Short или Buy и Cover совпадают. И тогда алерты начинают сыпаться в цикле, без остановки.
При тестировании на исторических данный никаких проблем не замечено, все корректно. Если вручную выбрать момент срабатывания сигнала (либо этот момент наступает на real-time данных), то появляется эта проблема с циклом. При отключении возможности шортить или лонгить в настройках проблема пропадает.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Ср Мар 18, 2009 2:49 pm Ответить с цитатой Вернуться к началу

Блин. Я с алертами не работал... А можно кусок кода с ними?

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Саня



Зарегистрирован: 11.02.2009
Сообщения: 53
Откуда: Москва

СообщениеДобавлено: Ср Мар 18, 2009 3:46 pm Ответить с цитатой Вернуться к началу

Код:
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
Откуда: Воображляндия

СообщениеДобавлено: Сб Мар 21, 2009 9:41 am Ответить с цитатой Вернуться к началу

Подскажите, можно ли как то программно определить текущий таймфрейм который установлен в Амиброкере.

Т.е например я работаю с 5 мин таймфреймом, сигналы поступают от пересечения 2 средних и есть старший таймфрейм на нем 1 скользящая как фильтр, можно ли сделать чтобы старший таймфрейм расчитывался автоматом как 3*текущий таймфрейм, т.е. стоит мне поменять текущий с 5 мин на 10 мин, то старший сделался бы сразу 30 мин.

Сейчас, если я правильно понимаю, старший фрейм жестко записывается в коде, я же хочу его сделать зависимым от младшего с помощью коэффициента. Это возможно?

_________________
Антон
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Сб Мар 21, 2009 10:15 am Ответить с цитатой Вернуться к началу

По моему стандартного спооба определения фрейма нет. Sad
Единственное, что приходит в голову взять время соседних баров и вычесть. в среднем разница должна быть равна текущему фрейму. Правда способ не надежный, на границах дней (еслиторговля не круглосуточная) будут косяки. Косяки будут и если данные дырявые. Но в общем если голову поломать, то наверное можно получить нормальный результат.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Амиброкеровец



Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия

СообщениеДобавлено: Сб Мар 21, 2009 10:58 am Ответить с цитатой Вернуться к началу

Олег, если когда-нить соберешься писать пожеланию по улучшению Томашу, то может добавишь это в список? Smile

_________________
Антон
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen