Автор |
Сообщение |
Dymytry
Зарегистрирован: 28.12.2008
Сообщения: 21
|
BabyBear,
прошу раскрыть тему.
1) Я так понял чтобы Plot(...) надо вставлять в формулу самого графика. Но там моя переменная неизвестна. Как мне из окна куда пишется формула графика получить переменную торговой системы?
2) А в чем собственно там ошибка?.. Код взят мной из хелпа. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
BabyBear
Советник
Зарегистрирован: 10.12.2008
Сообщения: 53
|
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
|
Все, разобрался!
Спасибо! |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Имею что сказать, только чуть позже. Надо собратьс с мыслями |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В общем в двух словах это опять к вопросу о том, как лучше писать цикл. Некоторые параметры можно использовать как переменные, а можно как массивы. Если писать их как массивы, то Писанины чуть больше, но зато потом можно их вывести на чарт и посмотреть какое значение было на конкретном баре. При отладке кода это удобно.
Если же использовать как переменные, то посмотреть значение навное можно только запустив БарРеплеер. Это не так удобно.
Кстати. Функции Max и Min в цикле вроде можно использовать и применять к переменным (не массив). Я проверил. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
BabyBear
Советник
Зарегистрирован: 10.12.2008
Сообщения: 53
|
000 писал(а): |
Кстати. Функции Max и Min в цикле вроде можно использовать и применять к переменным (не массив). Я проверил. |
Если в описании написано "массив", не стоит использовать иначе. А то потом, при очередном релизе будет не разобраться почему что не работает. |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
BabyBear писал(а): |
000 писал(а): |
Кстати. Функции Max и Min в цикле вроде можно использовать и применять к переменным (не массив). Я проверил. |
Если в описании написано "массив", не стоит использовать иначе. А то потом, при очередном релизе будет не разобраться почему что не работает. |
+1
Логично. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Dymytry
Зарегистрирован: 28.12.2008
Сообщения: 21
|
Еще вопрос проявился.
Я хочу использовать значения ATR при задании стопов. Если мы используем ATR в операциях внутри свечи (т.е. в applystop который срабатывает внутри свечи) то мы заглядываем в будущее. Поэтому надо как-то сдвинуть массив ATR на единицу назад чтобы мой стоп использовал ATR предыдущей свечи. Как это сделать без цикла? Как вообще в Амиброкере добавлять элемент к массиву и удалять его? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Dymytry
Зарегистрирован: 28.12.2008
Сообщения: 21
|
Ага, наверное достаточно поставить REF(ATR(atrindex),-1) в ApplyStop, так? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Dymytry писал(а): |
Ага, наверное достаточно поставить REF(ATR(atrindex),-1) в ApplyStop, так? |
Да. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Dymytry
Зарегистрирован: 28.12.2008
Сообщения: 21
|
+1 вопрос
Мне надо сравнить ApplyStop с результатами своего цилка чтобы понять не напутал ли я что в цикле.
Что мне надо написать в ApplyStop и рядом чтобы после достижения тейк-профита система выходила на Close того же бара? SellPrice=Close почему-то не помогает: выходит по стопу. А если делаю ExitAtStop=2 то выходит на Close следующего после достижения тейк-профита бара. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Сразу ответить не могу, не помню. Отвечу в понедельник. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Если на страбатывание стопа проверять только цену закрытия (не Hi Low), то
ExitAtStop = 0
Trade delays установить 0
Trade price установить close
а если проверять Hi Low, то похоже простого способа нет. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Dymytry
Зарегистрирован: 28.12.2008
Сообщения: 21
|
Сейчас пытаюсь протестировать усреднение/пирамидинг при помощи SigScaleIn. Вот какая трудность возникла: когда сигналы имеют место на одном баре.
У меня цикл. В определенный момент срабатывает
if(надо усредниться)
{
Buy[i]=sigScaleIn;
BuyPrice[i]=priceatbuy+Delta;
}
Но, и если на одном баре имею Buy[i]==1, и при этом мне надо на нем же и усредниться покупкой, то получается я должен снова написать Buy[i]=sigScaleIn. А оно не воспринимает это как добавление к позиции. В итоге на этом баре у меня вход только одной частью но по усредненной цене
Та же проблема если SigScaleIn идет на одном баре с закрытием позиции. Его не добавляют, а делают отдельным входом.
Что же делать?
То ли надо при двойном входе как-то сказать ему чтобы входил один раз но по усредненной цене и двойным сайзом. Как сказать какой сайз добалвять по SigScaleIn?
То ли можно как-то разнести эти сигналы чтобы он понял что их два.. Не могу разобраться.
Если у кого есть готовый цикл для тестирования усреднений - был бы рад посмотреть А пока мне приходится вход, добавление и выход в обязательном порядке разделять на 3 разных бара.. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
ID
Советник
Зарегистрирован: 07.01.2008
Сообщения: 370
|
Попробуй взять более мелкий таймфрем |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|