Автор |
Сообщение |
Novi4ok
Зарегистрирован: 15.08.2008
Сообщения: 127
|
как узнать в AFL во время бектеста в позе находится система или нет?
(примечание: система также выходит по трейлинг-стопам). |
|
|
Посмотреть профиль Отправить личное сообщение |
|
ID
Советник
Зарегистрирован: 07.01.2008
Сообщения: 370
|
Это зависит от системы.
Попробуй так:
Код: |
buy = cond1;
sell = cond2;
v_pose = flip(buy,sell);
plot(v_pose,"",colorred,2); |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
Novi4ok
Зарегистрирован: 15.08.2008
Сообщения: 127
|
нет, я хочу узнать до инициализации buy sell
в позе ли она с прошлых баров. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
Novi4ok писал(а): |
нет, я хочу узнать до инициализации buy sell
в позе ли она с прошлых баров. |
Переделай под себя
Код: |
Top = Ref(H, -1);
Bot = Ref(L, -1);
m = EMA(H,3);
Buy = H>Top AND m>=Ref(m,-1);
Sell = Bot>C AND Ref(m,-1)>=m;
Short = Sell;
Cover = Buy;
Equity(1);
count1 = BarsSince(Buy);
count2 = BarsSince(Short);
FlipBuy = Flip(Buy, Sell);
FlipShort = Flip(Short, Cover);
BuyStart = IIf(FlipBuy, Ref(BuyPrice,-count1),0 );
ShortStart = IIf(FlipShort, Ref(ShortPrice,-count2) ,0 );
Buyx = IIf(FlipBuy, count1 ,0 );
Shortx = IIf(FlipShort, count2 ,0 );
///////////// Рисуем всякое ///////////////////////////////////
SetChartOptions(0,chartShowArrows|chartShowDates);
Title = Name() + StrFormat("{{INTERVAL}}") + Date()+"\n\n" +
"Buy баров :" +Buyx+"\n"+
"Buy цена :" +BuyStart+"\n"+
"Для лонга :" +Top+"\n"+
"Short баров :" +Shortx+"\n"+
"Short цена :" +ShortStart+"\n"+
"Для шорта :" +Bot+"\n"+
"m :" +m+"\n"+
"h :" +H+"\n"+
"o :" +O+"\n";
Plot(m,"m", 1,1);
Plot(Top,"Top", 4,1);
Plot(Bot,"Bot", 6,1);
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
PlotShapes(IIf(Buy,shapeUpArrow,0),5,0,Graph0,-15);
PlotShapes(IIf(Sell,shapeDownArrow,0),4,0,Graph0,-15);
PlotShapes(IIf(Cover,shapeHollowUpArrow,0),5,0,Graph0,-15);
PlotShapes(IIf(Short,shapeHollowDownArrow,0),4,0,Graph0,-15); |
|
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
Novi4ok
Зарегистрирован: 15.08.2008
Сообщения: 127
|
Цитата: |
Переделай под себя |
ну тут опять сначала инициализируются Buy, Sell
а потом уже к ним обращение.
а мне нужно узнать в позе ли система, БЕЗ обращений к Buy Sell, т.к. я их еще сначала не инициализировал
осложнение еще и в том, что система дает сигналы по ApplyStop трейлингу |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
2 варианта.
Либо полностью переписать систему через цикл в котором расчеты всех трейлигов и т.п. делать ручками без использования ApplyStop(). Там же в цикле легко вычисляется в позе система или нет.
Либо сделать это при помощи advanded portfolio Backtester Interface. Это вроде совсем не тружно, но я с ним не разбирался (не было необходимости), только мельком просмотрел |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
Novi4ok писал(а): |
Цитата: |
Переделай под себя |
ну тут опять сначала инициализируются Buy, Sell
а потом уже к ним обращение.
а мне нужно узнать в позе ли система, БЕЗ обращений к Buy Sell, т.к. я их еще сначала не инициализировал
осложнение еще и в том, что система дает сигналы по ApplyStop трейлингу |
Ты похоже что то не понимаеш кинь код не изменяя на чарт и посмотри как он работает на истории, ля этого тыкай на разные бары, а стоп действительно проще переписать через цикл |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А вот еще подумал. Если использовать
SetPositionSize()
spsPercentOfPosition (=3) - объем выражается как процент от объема уже открытой позиции (для SCALING IN и SCALING OUT)
и таким макаром проверять в позе система или нет?
Типа пишем SetPositionSize(100, 3); ипотом проверяем чему равна positionsize. Если не равнв нолю, то система в позе.
С функцией Equity() такой метод конечно не сработает точно... Да и вообще не факт, что сработает. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Novi4ok
Зарегистрирован: 15.08.2008
Сообщения: 127
|
000 писал(а): |
Типа пишем SetPositionSize(100, 3); ипотом проверяем чему равна positionsize. Если не равнв нолю, то система в позе.
|
ээээ и как же это проверить?
мне ж как раз и нужно проверить positionsize, точнее определить, есть она или нет.
мне нужно что-то типа функции GetPositionSize, но такой нету
а что значит в цикле переделать - как я тогда это в бектестере запущу?
и еще: к описанию функции SetPositionSize написано, что она возвращает МАССИВ. а вот что за массив она возвращает не сказано... |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Не. Идея с spsPercentOfPosition (=3) не прокатит... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Novi4ok писал(а): |
мне ж как раз и нужно проверить positionsize, точнее определить, есть она или нет.
мне нужно что-то типа функции GetPositionSize, но такой нету
|
Изначльно у тебя есть какие то сигналы (иначе позиции не будет)
Пускай выход по ним через стопы. Активизируешь стопы при помощи Функции Equity(1, 0); и потом спокойно определяешь в позе сейчас система или нет
Код: |
InPos = Flip(Buy, Sell); |
Функция Equity() добавит в sell/cover сигналы в тех местах где сработали стопы.
Потом при необходимости можно изменить правила покупки/продажи.
Novi4ok писал(а): |
а что значит в цикле переделать - как я тогда это в бектестере запущу?
|
Простой способ написания ТС в Ами подразумевает использование функций работающих сразу со всем массивом цен. Но можно и пройти от самого первого бара до самого последнего попутно выполняя необходимые расчеты. Это делается так
Код: |
for( i = 1; i < BarCount; i++ )
{
// тут код который расчитывается от бара к бару
}
|
Такой код прекрасно запускается в тестере.
Novi4ok писал(а): |
и еще: к описанию функции SetPositionSize написано, что она возвращает МАССИВ. а вот что за массив она возвращает не сказано... |
Одномерный массив длинна которого равна длинне истории (общее количество баров) а значения элементов соответствуют заданному на баре которому соответствует элемент массива размеру открываемой позиции. А как "посмотреть" этот массив из АФЛ неизвестно. Скорее всего это внутренний, недоступный, массив. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Novi4ok
Зарегистрирован: 15.08.2008
Сообщения: 127
|
спасибо за ответ!
вот тут еще пришла идея,
я ж могу сигналы на sell и buy менять по ходу пьессы
или нет?
наверно, могу.
т.е. можно сначала инициализировать бай и селл всякой ерундой:
buy = когда рак на горе свистнет
sell = после дождичка в четверг
т.е. условиями, которые никогда не произойдут,
а уж потом, после определения в позе система или нет flip ом
ввести нормальные условия для buy и sell
например, будет ли работать такой код:
buy = c>1000000 (сто тыщ миллионов)
buy = c>ref(c,-1)
по идее система должна купиться по условию buy = c>ref(c,-1)
(а первое условие заведомо невыполнимо) |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Менять по ходу пьессы сигналы можно.
Только непонятно. Если изначально условия Buy/Short будут липовые то как - же система окажется в позе? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Novi4ok
Зарегистрирован: 15.08.2008
Сообщения: 127
|
дело в том, что сигнал на вход у меня реальный
а сигнал на выход должен определиться с началом позы и больше не меняться
а у меня получается что все ссылки на бары относительны и поэтому сигнал на выход уползает вместе с барами
ну например Sell = ref(c,-20)
эти -20 постоянно сползают, т.к. С же постоянно меняется!
т.е. мне нужно знать в позе система или нет
и если система в позе, тогда ставить выход - и чтобы он не сползал!
--
кстати, если я тестирую на 5минутках, и применяю ApplyStop -
по цене стопа - он вообще учитывает как цена внутри 5минутки перемещалась?
а то столкнулся с невероятным накручиванием ЭКВИТИ:
покупаю(продаю) по цене закрытия и тут же тейкаюсь в этом баре по ApplyStop.
безпроигрышная "виртуальная" стратегия основанная на ошибке программирования: цена закрытия отличается от внутрибарного диапазона.
-
и еще - знал, но забыл - как в сообщения выдавать содержание переменных (для отладки и для СОВЕТНИКА)? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Novi4ok писал(а): |
дело в том, что сигнал на вход у меня реальный
а сигнал на выход должен определиться с началом позы и больше не меняться
а у меня получается что все ссылки на бары относительны и поэтому сигнал на выход уползает вместе с барами
ну например Sell = ref(c,-20)
эти -20 постоянно сползают, т.к. С же постоянно меняется!
т.е. мне нужно знать в позе система или нет
и если система в позе, тогда ставить выход - и чтобы он не сползал!
|
В таком случае самое правильное использовать именно ApplyStop();
Он сразу после входа ставит условие выхода и может его не менять, а может и менять в зависимости от параметров.
Novi4ok писал(а): |
кстати, если я тестирую на 5минутках, и применяю ApplyStop -
по цене стопа - он вообще учитывает как цена внутри 5минутки перемещалась?
|
Конечно нет
Novi4ok писал(а): |
а то столкнулся с невероятным накручиванием ЭКВИТИ:
покупаю(продаю) по цене закрытия и тут же тейкаюсь в этом баре по ApplyStop.
|
Это от того, что в настройках непонятно зачем поставил галку Activate stops immediatly
Если вход по Close, то ненадо эту галку ставить.
Novi4ok писал(а): |
и еще - знал, но забыл - как в сообщения выдавать содержание переменных (для отладки и для СОВЕТНИКА)?
|
Функция POPUPWINDOW() |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|