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



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

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

Надеюсь, в старых темах можно поднимать новые вопросы...

Предположим, тестируем систему на минутном графике. Входим (только лонги) с оптимистичным запаздыванием по цене открытия следующего бара: Open 1.

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

Buy = есть сигнал на минутках.
Sell = есть сигнал на тиках (но делаем выход через три секунды после сигнала Sell)

Как это прописать в коде системы? Я уже понял, что основной таймфрейм графика и само тестирование должны быть тиковыми (минимальными). А для входа надо переводить таймфрейм в минутки.

Непонятно, как после перехода в минутки продолжать проверять условие для Sell на тиках?

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


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

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

Не совсем понял.
1. При тестировании на фреймах крупнее тикового можно выходить именно по цене стопа.
2. Если есть такая необходимость выходить именно по тикам, то тестировать систему следует на тиковом интервале, а внутри кода, функцией TimeFrameSet() переключиться на минутный фрейм, сделать там необходимые расчеты, получить сигналы на вход и затем переключившись обратно на базовый фрейм (TimeFrameRestore()) считать выход. Сдвинуть сигнал выхода на несколько тиков можно. Правда как это сделать если использовать ApplyStop, то не помню. Ами сейчас под рукой нет....

Только вот есть ли в этом смысл? Если ФР, то в любом случае неизвестно цена было по биду или офферу и что было в этот момент в стакане тоже тайна. Теоретически сделка могла и скользануть. Ну если форекс, то там все понятно.
Такие дела... Smile

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



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

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

000 писал(а):
qq = Optimize("qq", 1, 1, 5, 1);

if (qq == 1)
Frame = ;
else if (qq == 2)
Frame = ;
else if (qq == 3)
.......


Код:
TimeFrame = Optimize("Timeframe", 8, 1, 15, 1); //optimizatsija po timeframe

if (TimeFrame == 1)          //Minutes
Frame = in1Minute;
else if (TimeFrame == 2)
Frame = 3*in1Minute;
else if (TimeFrame == 3)
Frame = in5Minute;
else if (TimeFrame == 4)
Frame = 7*in1Minute;
else if (TimeFrame == 5)
Frame = 10*in1Minute;
else if (TimeFrame == 6)
Frame = 12*in1Minute;
else if (TimeFrame == 7)
Frame = in15Minute;
else if (TimeFrame == 8)
Frame = 20*in1Minute;
else if (TimeFrame == 9)
Frame = 30*in1Minute;

TimeFrameSet(Frame);

P1 = Optimize("Period", 14, 8, 32, 1); //optimizazija po periodam

SetTradeDelays(0,0,0,0);
BuyPrice = Close+0.0001; // zeni pokupki/prodazhi w bare
SellPrice = Close-0.0001;
ShortPrice = Close-0.0001;
CoverPrice = Close+0.0001;

MyPDI= PDI(P1);//Positive Directional Indicator

MyMDI= MDI(P1);//Negative Directional Indicator (Minus)

MyADX= ADX(P1);//Average Directional Movement Index

Buy = (MyADX > Ref(MyADX, -1)) AND (Ref(MyADX, -1) > Ref(MyADX, -2))  AND (MyPDI > MyMDI);
Sell = (MyADX < Ref(MyADX, -1)) AND (Ref(MyADX, -1) < Ref(MyADX, -2));

Short = (MyADX > Ref(MyADX, -1)) AND (Ref(MyADX, -1) > Ref(MyADX, -2)) AND (MyPDI < MyMDI);
Cover = (MyADX < Ref(MyADX, -1)) AND (Ref(MyADX, -1) < Ref(MyADX, -2));

TimeFrameRestore();


простенькая стратегия, таймфрейм для обычного бектеста должен быть 20 мин. тестер выдаёт сделки практически поминутно. Rolling Eyes
убираю оптимизацию по времени из кода и в АА переключаю на фреймы - 20 мин, получаю совсем другие результаты.

я что-то напутал?
такое ощущение, что расчёт самого индекса и торговля идёт на минутках, а условия покупки/продажи на 20-минутках работают.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

А где TimeFrameExpand() ????
Смотри внимательно примеры в хелпе.

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



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

СообщениеДобавлено: Вт Дек 29, 2009 1:31 am Ответить с цитатой Вернуться к началу

000 писал(а):
А где TimeFrameExpand() ????
Смотри внимательно примеры в хелпе.
зачем мне разжимать какие-то массивы? пока внутри стратегии я данными из разных интервалов оперировать не хочу.

я просто хочу прогнать стратегию на разных временных интервалах, чтоб вручную в тестере "Periodicity" не менять.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Дек 29, 2009 1:46 am Ответить с цитатой Вернуться к началу

Вот смотри. Был у тебя массив

11111111111111111111

ты его сжал и получил

2222222222

Допустим на каждом втором баре сжатого массива сигнал

0101010101

Если его не расжать, то на первый массив он так и ляжет

01010101010000000000
11111111111111111111

А должно получиться так

00110011001100110011

Для этого и служит Expand.
А когда уберутся лишние сигналы

00100010001000100010

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



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

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

спасибо, прояснил.

Код:
TimeFrame = Optimize("Timeframe", 8, 1, 15, 1); //optimizatsija po timeframe

if (TimeFrame == 1)          //Minutes
Frame = in1Minute;
else if (TimeFrame == 2)
Frame = 3*in1Minute;
else if (TimeFrame == 3)
Frame = in5Minute;
else if (TimeFrame == 4)
Frame = 7*in1Minute;
else if (TimeFrame == 5)
Frame = 10*in1Minute;
else if (TimeFrame == 6)
Frame = 12*in1Minute;
else if (TimeFrame == 7)
Frame = in15Minute;
else if (TimeFrame == 8)
Frame = 20*in1Minute;
else if (TimeFrame == 9)
Frame = 30*in1Minute;

P1 = Optimize("Period", 14, 8, 32, 1); //optimizazija po periodam

SetTradeDelays(0,0,0,0);
BuyPrice = Close+0.0001; // zeni pokupki/prodazhi w bare
SellPrice = Close-0.0001;
ShortPrice = Close-0.0001;
CoverPrice = Close+0.0001;

TimeFrameSet(Frame);

High_PDI= PDI(P1);//Positive Directional Indicator

High_MDI= MDI(P1);//Negative Directional Indicator (Minus)

High_ADX= ADX(P1);//Average Directional Movement Index
TimeFrameRestore();

MyPDI = TimeFrameExpand(High_PDI, Frame);
MyMDI = TimeFrameExpand(High_MDI, Frame);
MyADX = TimeFrameExpand(High_ADX, Frame);

Buy = (MyADX > Ref(MyADX, -1)) AND (Ref(MyADX, -1) > Ref(MyADX, -2))  AND (MyPDI > MyMDI);
Sell = (MyADX < Ref(MyADX, -1)) AND (Ref(MyADX, -1) < Ref(MyADX, -2));

Short = (MyADX > Ref(MyADX, -1)) AND (Ref(MyADX, -1) > Ref(MyADX, -2)) AND (MyPDI < MyMDI);
Cover = (MyADX < Ref(MyADX, -1)) AND (Ref(MyADX, -1) < Ref(MyADX, -2));


значит то, что я задумывал выглядит правильно так?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Похоже на правильный код. Проверяй.

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



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

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

000 писал(а):
Похоже на правильный код. Проверяй.
оптимизация срабатывает на минутках, на всех других таймфреймах выдаёт нули. Rolling Eyes
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Так попробуй.
Код:

TimeFrame = Optimize("Timeframe", 1, 1, 9, 1); //optimizatsija po timeframe

if (TimeFrame == 1)          //Minutes
Frame = in1Minute;
else if (TimeFrame == 2)
Frame = 3*in1Minute;
else if (TimeFrame == 3)
Frame = in5Minute;
else if (TimeFrame == 4)
Frame = 7*in1Minute;
else if (TimeFrame == 5)
Frame = 10*in1Minute;
else if (TimeFrame == 6)
Frame = 12*in1Minute;
else if (TimeFrame == 7)
Frame = in15Minute;
else if (TimeFrame == 8)
Frame = 20*in1Minute;
else
Frame = 30*in1Minute;

P1 = Optimize("Period", 14, 8, 32, 1); //optimizazija po periodam

SetTradeDelays(0,0,0,0);
BuyPrice = Close+0.0001; // zeni pokupki/prodazhi w bare
SellPrice = Close-0.0001;
ShortPrice = Close-0.0001;
CoverPrice = Close+0.0001;

TimeFrameSet(Frame);

High_PDI = PDI(P1);//Positive Directional Indicator
High_MDI = MDI(P1);//Negative Directional Indicator (Minus)
High_ADX = ADX(P1);//Average Directional Movement Index

MyBuy = (High_ADX > Ref(High_ADX, -1)) AND (Ref(High_ADX, -1) > Ref(High_ADX, -2))  AND (High_PDI > High_MDI);
MySell = (High_ADX < Ref(High_ADX, -1)) AND (Ref(High_ADX, -1) < Ref(High_ADX, -2));
MyShort = (High_ADX > Ref(High_ADX, -1)) AND (Ref(High_ADX, -1) > Ref(High_ADX, -2)) AND (High_PDI < High_MDI);
MyCover = (High_ADX < Ref(High_ADX, -1)) AND (Ref(High_ADX, -1) < Ref(High_ADX, -2));

TimeFrameRestore();

Buy = TimeFrameExpand(MyBuy, Frame);
Sell = TimeFrameExpand(MySell, Frame);
Short = TimeFrameExpand(MyShort, Frame);
Cover = TimeFrameExpand(MyCover, Frame);


Если бы дал себе труд посмотреть на то как выглядит расжатый MyADX, то понял бы что нельзя сравнивать три значения подряд.

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



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

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

Цитата:
Если бы дал себе труд посмотреть на то как выглядит расжатый MyADX, то понял бы что нельзя сравнивать три значения подряд

tnx.

в смысле прорисовывать линии на графике?

ADX тоже разжимается и на всём нижнем интервале остаётся неизменчив?


Последний раз редактировалось: MrDrJOKER (Вт Дек 29, 2009 6:40 pm), всего редактировалось 2 раз(а)
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

MrDrJOKER писал(а):
Цитата:
Если бы дал себе труд посмотреть на то как выглядит расжатый MyADX, то понял бы что нельзя сравнивать три значения подряд

tnx.

в смысле прорисовывать линии на графике?

Да
MrDrJOKER писал(а):

ADX тоже разжимается и на всём нижнем интервале остаётся неизменчив?

???

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



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

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

000 писал(а):
MrDrJOKER писал(а):
Цитата:
Если бы дал себе труд посмотреть на то как выглядит расжатый MyADX, то понял бы что нельзя сравнивать три значения подряд

tnx.

в смысле прорисовывать линии на графике?

Да
MrDrJOKER писал(а):

ADX тоже разжимается и на всём нижнем интервале остаётся неизменчив?

???

1.я с рисованием пока не очень дружу. думаешь имеет смысл всегда прорисовывать сигнальные линии?

2.в смысле ADX будет в форме ступенек и мои условия не будут срабатывать.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

MrDrJOKER писал(а):

1.я с рисованием пока не очень дружу. думаешь имеет смысл всегда прорисовывать сигнальные линии?

Не всегда, а для посмотреть при использовании незнакомых технологий желательно.
MrDrJOKER писал(а):

2.в смысле ADX будет в форме ступенек и мои условия не будут срабатывать.

Код:

Frame = 10*in1Minute;

TimeFrameSet(Frame);

High_ADX = ADX(15);//Average Directional Movement Index

TimeFrameRestore();

My_ADX = TimeFrameExpand(High_ADX, Frame);

Plot(C, "", colorBlack, styleCandle);
Plot(My_ADX, "", colorRed, styleOwnScale);

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



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

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

оптимизирую по двум ТФ (модернизировал тот код, что выше), при чём втотрой ТФ должен быть как минимум на уровень больше первого.

в AFL кроме этой конструкции ничего в голову не приходит.

Код:
TimeFrame = Optimize("Timeframe", 10, 1, 12, 1); //optimizatsija po timeframe

if (TimeFrame == 1)          //Minutes
{Frame = in1Minute;
TimeFrameHigh = Optimize("TimeFrameHigh+", 10, 1, 10, 1); }
else if (TimeFrame == 2)  //3 min
{Frame = 3*in1Minute;
TimeFrameHigh = Optimize("TimeFrameHigh+", 10, 1, 10, 1); }
...
else if (TimeFrame == 5)  //10 min
{Frame = 10*in1Minute;
TimeFrameHigh = Optimize("TimeFrameHigh+", 10, 3, 10, 1); }
...

она, конечно, не совсем корректна, но работает.
есть ли другие решения в AFL?
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen