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



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

СообщениеДобавлено: Пт Янв 09, 2009 6:55 pm Ответить с цитатой Вернуться к началу

BabyBear,
прошу раскрыть тему.

1) Я так понял чтобы Plot(...) надо вставлять в формулу самого графика. Но там моя переменная неизвестна. Как мне из окна куда пишется формула графика получить переменную торговой системы?

2) А в чем собственно там ошибка?.. Код взят мной из хелпа.
Посмотреть профиль Отправить личное сообщение
BabyBear
Советник


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

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

Dymytry писал(а):
BabyBear,
прошу раскрыть тему.

1) Я так понял чтобы Plot(...) надо вставлять в формулу самого графика. Но там моя переменная неизвестна. Как мне из окна куда пишется формула графика получить переменную торговой системы?


Нужно сделать highsincebuy массивом, заполнить его значениями на каждом баре. Потом нарисовать график.

Dymytry писал(а):
2) А в чем собственно там ошибка?.. Код взят мной из хелпа.

Ошибка в том, что ты используешь функцию для массивом внутри цикла. Мне трудно представить аглоритм, когда нужно так делать. Поэтому мне не нужно разбираться в том, что написано и откуда это взято. Очевидно, что написано не то, что автор думал получить.

Код:

for( i = 0; i < BarCount; i++ )
{
...
highsincebuy = Max( High[ i ], highsincebuy );
lowsincebuy = Min( Low[ i ], lowsincebuy );


скорее всего имелось ввиду

Код:

for( i = 0; i < BarCount; i++ )
{
...
if( highsincebuy < High[ i ])
{
highsincebuy = High[ i ];
}

if( lowsincebuy > Low[ i ])
{
lowsincebuy = Low[ i ];
}


я же предлагаю написать
Код:

for( i = 0; i < BarCount; i++ )
{
...
if( highsincebuy[i-1] < High[ i ])
{
highsincebuy[i] = High[ i ];
}
else
{
highsincebuy[i] = highsincebuy[i-1];
}

...
// close for
}

Plot(highsincebuy,"highsincebuy",colorGreen,styleLine);
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Dymytry



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

СообщениеДобавлено: Сб Янв 10, 2009 8:39 pm Ответить с цитатой Вернуться к началу

Все, разобрался!

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


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

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

Имею что сказать, только чуть позже. Надо собратьс с мыслями Smile

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


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

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

В общем в двух словах это опять к вопросу о том, как лучше писать цикл. Некоторые параметры можно использовать как переменные, а можно как массивы. Если писать их как массивы, то Писанины чуть больше, но зато потом можно их вывести на чарт и посмотреть какое значение было на конкретном баре. При отладке кода это удобно.
Если же использовать как переменные, то посмотреть значение навное можно только запустив БарРеплеер. Это не так удобно.

Кстати. Функции Max и Min в цикле вроде можно использовать и применять к переменным (не массив). Я проверил.

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


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

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

000 писал(а):
Кстати. Функции Max и Min в цикле вроде можно использовать и применять к переменным (не массив). Я проверил.

Если в описании написано "массив", не стоит использовать иначе. А то потом, при очередном релизе будет не разобраться почему что не работает.
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


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

СообщениеДобавлено: Пн Янв 12, 2009 4:55 pm Ответить с цитатой Вернуться к началу

BabyBear писал(а):
000 писал(а):
Кстати. Функции Max и Min в цикле вроде можно использовать и применять к переменным (не массив). Я проверил.

Если в описании написано "массив", не стоит использовать иначе. А то потом, при очередном релизе будет не разобраться почему что не работает.

+1
Логично.

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



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

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

Еще вопрос проявился.

Я хочу использовать значения ATR при задании стопов. Если мы используем ATR в операциях внутри свечи (т.е. в applystop который срабатывает внутри свечи) то мы заглядываем в будущее. Поэтому надо как-то сдвинуть массив ATR на единицу назад чтобы мой стоп использовал ATR предыдущей свечи. Как это сделать без цикла? Как вообще в Амиброкере добавлять элемент к массиву и удалять его?
Посмотреть профиль Отправить личное сообщение
Dymytry



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

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

Ага, наверное достаточно поставить REF(ATR(atrindex),-1) в ApplyStop, так?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Dymytry писал(а):
Ага, наверное достаточно поставить REF(ATR(atrindex),-1) в ApplyStop, так?

Да.

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



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

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

+1 вопрос
Мне надо сравнить ApplyStop с результатами своего цилка чтобы понять не напутал ли я что в цикле.

Что мне надо написать в ApplyStop и рядом чтобы после достижения тейк-профита система выходила на Close того же бара? SellPrice=Close почему-то не помогает: выходит по стопу. А если делаю ExitAtStop=2 то выходит на Close следующего после достижения тейк-профита бара.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Сразу ответить не могу, не помню. Отвечу в понедельник. Sad

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


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

СообщениеДобавлено: Сб Янв 24, 2009 11:53 pm Ответить с цитатой Вернуться к началу

Если на страбатывание стопа проверять только цену закрытия (не Hi Low), то
ExitAtStop = 0
Trade delays установить 0
Trade price установить close
а если проверять Hi Low, то похоже простого способа нет. Sad

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



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

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

Сейчас пытаюсь протестировать усреднение/пирамидинг при помощи SigScaleIn. Вот какая трудность возникла: когда сигналы имеют место на одном баре.

У меня цикл. В определенный момент срабатывает

if(надо усредниться)
{
Buy[i]=sigScaleIn;
BuyPrice[i]=priceatbuy+Delta;
}


Но, и если на одном баре имею Buy[i]==1, и при этом мне надо на нем же и усредниться покупкой, то получается я должен снова написать Buy[i]=sigScaleIn. А оно не воспринимает это как добавление к позиции. В итоге на этом баре у меня вход только одной частью но по усредненной цене Smile
Та же проблема если SigScaleIn идет на одном баре с закрытием позиции. Его не добавляют, а делают отдельным входом.

Что же делать?

То ли надо при двойном входе как-то сказать ему чтобы входил один раз но по усредненной цене и двойным сайзом. Как сказать какой сайз добалвять по SigScaleIn?
То ли можно как-то разнести эти сигналы чтобы он понял что их два.. Не могу разобраться.

Если у кого есть готовый цикл для тестирования усреднений - был бы рад посмотреть Smile А пока мне приходится вход, добавление и выход в обязательном порядке разделять на 3 разных бара..
Посмотреть профиль Отправить личное сообщение
ID
Советник


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

СообщениеДобавлено: Пн Янв 26, 2009 5:16 am Ответить с цитатой Вернуться к началу

Цитата:
Что же делать?


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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen