Автор |
Сообщение |
BabyBear
Советник
![](images/avatars/1017942347493f9b3b2b58e.jpg)
Зарегистрирован: 10.12.2008
Сообщения: 53
|
Хочу не спеша описать свой метод тестирования.
Основным преимуществом данного метода является полный контроль над всеми вычислениями ами. Алгоритм тестирования полностью эмулируется в dll. Само собой, такой подход может показаться более сложным для новичков, но программистам вполне может понравиться.
Другим косвенным преимуществом является то, что я предлагаю набор функций, полностью решающий все проблемы с которыми я столкнулся при создании и тестировании своих сисетм. Я понимаю, что многие все эти проблемы для себя решили. Но способы решения наверняка другие.
Небольшое описание функций и что к чему есть тута
http://bearden.narod.ru/Ami_BBL.html
Установко.
Установить нужно 3 вещи.
1. файл BabyBearLib.dll отсюда http://bearden.narod.ru/source/AmiBroker/BabyBearLib_01.rar нужно скопировать в папку \Program Files\AmiBroker\Plugins
2. файл BBL_Orders.dll отсюда http://bearden.narod.ru/source/AmiBroker/BBL_Orders.rar нужно скопировать в папку \Program Files\AmiBroker\Plugins
3. в ту же папку распаковать архив http://bearden.narod.ru/microsoft/x86.rar
это - стандартные библиотеки микрософта.
замечание 1. Реально нужна только папка с расширением CRT
замечание 2. Теоретически можно скачать эти файлы в другом месте, моего там ничего нет
замечание 3. Если у Вас установлена Visual Studio 2005. То библиотеки устанавливать не нужно. Они у Вас уже есть там где нужно. |
Последний раз редактировалось: BabyBear (Пт Дек 12, 2008 5:14 pm), всего редактировалось 2 раз(а) |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
![](images/spacer.gif) |
BabyBear
Советник
![](images/avatars/1017942347493f9b3b2b58e.jpg)
Зарегистрирован: 10.12.2008
Сообщения: 53
|
Что бум тестировать?
Я возьму советник для МТ4, который я нашел в интернете и немного переделал. Немного информации по результатам его тестирования на МТ4 есть тут http://mtclub.ucoz.ru/forum/12-71-1
То, что я буду переводить на ами выглядит в mql так (вариант для iSwitch=3)
Код: |
//+------------------------------------------------------------------+
//| PipZu_001_2.mq4 |
//| Copyright © 2008, BabyBear |
//| http://mtclub.ucoz.ru/ |
//+------------------------------------------------------------------+
//| "http://www.Pipzu.com" |
//+------------------------------------------------------------------+
/////////////////////////
// Тестируем на часах! //
// по ценам открытия //
/////////////////////////
// 4 варианта открытия 0 1 2 3
//extern int iSwitch = 0;
// Это - проценты от дневного iATR( NULL, PERIOD_D1, 30, 0)
extern int pProfit = 50.0;
extern int pStop = 50.0;
extern int pPullBack = 30;
extern int pMaxTiming = 50;
extern int pTiming = 6;
#define iSlippage 0
#define dLots 0.1
double dProfit;
double dStop;
double dPullBack;
double dMaxTiming;
double dTiming;
int start()
{
int iOrderType, iDayofWeek;
int iBarLowerest, iBarHighest;
double dSize;
int iOrderTotal = OrdersTotal();
datetime dtTimeCurrent = TimeCurrent();
int iHour = TimeHour( dtTimeCurrent);
if ( iHour == 23)
{
for ( int i = 0; i < iOrderTotal; i++)
{
OrderSelect( i, SELECT_BY_POS, MODE_TRADES);
iOrderType = OrderType();
switch ( iOrderType)
{
case OP_SELL:
OrderClose( OrderTicket(), OrderLots(), Ask, iSlippage, Violet);
break;
case OP_BUY:
OrderClose( OrderTicket(), OrderLots(), Bid, iSlippage, Violet);
break;
}
}
return;
}
if ( iHour != 0)
return;
if ( iOrderTotal != 0)
return;
double dayATR = iATR( NULL, PERIOD_D1, 30, 0);
dStop = dayATR * pStop / 100.0;
dProfit = dayATR * pProfit / 100.0;
dPullBack = dayATR * pPullBack / 100.0;
dMaxTiming = dayATR * pMaxTiming / 100.0;
dTiming = dayATR * pTiming / 100.0;
if ( (Close[1] - Open[24]) > dMaxTiming)
{
iBarHighest = iHighest( NULL, 0, MODE_HIGH, 24, 0);
dSize = High[ iBarHighest] - Close[1];
// вверху продаем
if ( dSize < ( dPullBack - dTiming))
{
OrderSend( Symbol(), OP_SELL, dLots, Bid, iSlippage, Bid + dStop, Bid - dProfit, "", 0, 0, Red);
return;
}
}
return (0);
} |
|
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
![](images/spacer.gif) |
BabyBear
Советник
![](images/avatars/1017942347493f9b3b2b58e.jpg)
Зарегистрирован: 10.12.2008
Сообщения: 53
|
Вот так будет выглядеть расчетная часть. Привожу её здесь, для тех, кто захочет разобратья в коде. Полноценный работающий вариант будет ниже |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
![](images/spacer.gif) |
BabyBear
Советник
![](images/avatars/1017942347493f9b3b2b58e.jpg)
Зарегистрирован: 10.12.2008
Сообщения: 53
|
Вот рабочий вариант.
Ради чего старались?
1. Можно посмотреть эквити. Для этого в свойствах есть переключатель
2. Нарисованы линии ордеров. Можно проследить за их срабатыванием.
Но это всё внешнее. Внутри программы мы теперь имеем доступ к размеру лота, балансу, эквити, последним ценам покупки и продажи. Можем особо не мучаясь добавлять позиции и частично закрывать.
Есь возможность доработать библиотеку нужными функциями.
И, наконец, можем отлавливать свои глюки
Если есть интерес, можно продолжить. Пишите вопросы и пожелания. |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
![](images/spacer.gif) |
commenced
Советник
![](images/avatars/112490722747fe22561a243.jpg)
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
BabyBear писал(а): |
Вот рабочий вариант.
Ради чего старались?
1. Можно посмотреть эквити. Для этого в свойствах есть переключатель
2. Нарисованы линии ордеров. Можно проследить за их срабатыванием.
Но это всё внешнее. Внутри программы мы теперь имеем доступ к размеру лота, балансу, эквити, последним ценам покупки и продажи. Можем особо не мучаясь добавлять позиции и частично закрывать.
Есь возможность доработать библиотеку нужными функциями.
И, наконец, можем отлавливать свои глюки
Если есть интерес, можно продолжить. Пишите вопросы и пожелания. |
А для чего все это? |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
![](images/spacer.gif) |
BabyBear
Советник
![](images/avatars/1017942347493f9b3b2b58e.jpg)
Зарегистрирован: 10.12.2008
Сообщения: 53
|
commenced писал(а): |
А для чего все это? |
Какого типа ответ Вы ждете?
Например, сейчас обсуждается на этом форуме вопрос как сделать разные стопы для лонга и шорта. Это я запросто могу сделать, хотя я тестирую отдельно лонг и шорт.
Можно торговать по эквити. То есть после роста эквити уменьшать лот. |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
![](images/spacer.gif) |
ID
Советник
![](images/avatars/72733707748b3577003dcb.gif)
Зарегистрирован: 07.01.2008
Сообщения: 370
|
BabyBear писал(а): |
Если есть интерес, можно продолжить. Пишите вопросы и пожелания. |
Добавил...
Респект...
Но!
1) Страшно юзать код, которые не сам писал (думаю, многие меня поймут);
2) Не нашел кнопочек для отрисовки ордеров;
3) ИМХО круто быть хорошим программером! |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
BabyBear
Советник
![](images/avatars/1017942347493f9b3b2b58e.jpg)
Зарегистрирован: 10.12.2008
Сообщения: 53
|
ID писал(а): |
BabyBear писал(а): |
Если есть интерес, можно продолжить. Пишите вопросы и пожелания. |
1) Страшно юзать код, которые не сам писал (думаю, многие меня поймут);
2) Не нашел кнопочек для отрисовки ордеров;
|
1. если будут вопросы, что делает функция, могу код этой функции выложить. там почти всё посто.
2. отключить прорисовку можно переключателем в параметрах. А он (этот парамер может быть вверху списка и внизу, но пропасть не может)
В крайнем случае можно в коде подправить
вот такую строку закомментируйте
Код: |
if ( "Yes" == ParamList("Draw Order Lines", "Yes,No" ))
|
и линии ордеров будут рисоваться всегда. |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
![](images/spacer.gif) |
commenced
Советник
![](images/avatars/112490722747fe22561a243.jpg)
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
BabyBear писал(а): |
commenced писал(а): |
А для чего все это? |
Какого типа ответ Вы ждете?
Например, сейчас обсуждается на этом форуме вопрос как сделать разные стопы для лонга и шорта. Это я запросто могу сделать, хотя я тестирую отдельно лонг и шорт.
Можно торговать по эквити. То есть после роста эквити уменьшать лот. |
Да нет я не разобрался, что вы создали и как это есть и тем более тестировать. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
![](images/spacer.gif) |
BabyBear
Советник
![](images/avatars/1017942347493f9b3b2b58e.jpg)
Зарегистрирован: 10.12.2008
Сообщения: 53
|
commenced писал(а): |
Да нет я не разобрался, что вы создали и как это есть и тем более тестировать. |
На данном этапе разобраться сложновато. Про это разговора нет. Пока, вопрос в том хотите Вы разобраться или нет.
Если хотите, напишите, чем я могу Вам помочь. |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
![](images/spacer.gif) |
Sergiovy
Зарегистрирован: 03.03.2008
Сообщения: 180
Откуда: Мурманск
|
BabyBear писал(а): |
commenced писал(а): |
А для чего все это? |
Какого типа ответ Вы ждете?
Например, сейчас обсуждается на этом форуме вопрос как сделать разные стопы для лонга и шорта. Это я запросто могу сделать, хотя я тестирую отдельно лонг и шорт.
Можно торговать по эквити. То есть после роста эквити уменьшать лот. |
// Я тоже тестирую лонг и шорт сначала отдельно а потом вместе.
Удивительно, но результаты разные ( всегда) До сих пор не понимаю, каким образом АМИ решает, что уже пора открывать противоположную позицию. Та идея, что сначала должна быть закрыта предудцщая позиция - срабатывает не всегда. Все эти заморочки с галочками в тестере - а без них не получить корректное срабатывание входов/выходов, приводит к тому что одни и те же галочки задействованы в разных частях системы, т.е. по отдельности их не выставить... ( в частности задержки) - например сделать так, чтобы после лонга была задержка в 1 бар и при этом считалось правильно.... ( ни разу не получилось - или задержка или правильно
P.S.Ск. времени вы осваивали АМИ до такого уровня? |
_________________ "Единственная pабота, достойная нас, — pабота над собой". Шон де Уоppен |
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
BabyBear
Советник
![](images/avatars/1017942347493f9b3b2b58e.jpg)
Зарегистрирован: 10.12.2008
Сообщения: 53
|
Sergiovy писал(а): |
P.S.Ск. времени вы осваивали АМИ до такого уровня? |
Пусть будет 3 месяца.
Мне нужно пара дней, чтобы прочитать основы любого языка. После этого я сразу начинаю писать довольно сложные программы, конечно, постоянно подглядывая в хелп или примеры. Я и сейчас подглядываю. Просто знаю где искать и что. В этом основная проблема. Если быстро находишь ответы, пишется всё очень быстро. |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
![](images/spacer.gif) |
BabyBear
Советник
![](images/avatars/1017942347493f9b3b2b58e.jpg)
Зарегистрирован: 10.12.2008
Сообщения: 53
|
Sergiovy писал(а): |
// Я тоже тестирую лонг и шорт сначала отдельно а потом вместе.![Smile](images/smiles/icon_smile.gif) |
Я не тестирую вместе, хотя возможность такая есть. Дело в том, что Ами я использую исключительно для тестирования. А торгую я на МетаТрейдере. Так что , если есть стратегия только лонг, я программирую советника и запускаю его на МТ. Если и шорт есть, модернизирую советник и он рабоатет по двум стратегиям одновременно. |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
![](images/spacer.gif) |
000
Site Admin
![](images/avatars/183029264847fb5337d4ea4.gif)
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Если стопы задаваемые при помощи ApplyStop() = константе (volatile = False), то сделать разные не вопрос.
Проблемма в определении позиции, в которой сейчас система.
Если опция "выходить при получении сигнала на противоположный вход" (Reverse entry signal forces exit)в настройках тестера активирована, то тоже не сложно. В таком случае просто вставляем тригер в код
Код: |
Position = Flip(Buy, Short);
|
и в зависимости от значения Position присваиваем значение amount в ApplyStop. Если Position = 1, то для лонга, а если =0, то для шорта.
А вот если пока находимся в позиции, то противоположные сигналы игнорируем, то не знаю...
Цитата: |
// Я тоже тестирую лонг и шорт сначала отдельно а потом вместе.
Удивительно, но результаты разные
|
Они и будут разные. Если при получении протиоположного сигнала выходим из позиции, то результат сделки не будет соответствовать результату при тестировании в одну сторону, т.к. возможен более ранний выход, а если не выходим, то некоторые сделки при тестировании Long и Short будут пропущены по сравнению с тестированием только в одну сторону. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
![](images/spacer.gif) |
BabyBear
Советник
![](images/avatars/1017942347493f9b3b2b58e.jpg)
Зарегистрирован: 10.12.2008
Сообщения: 53
|
000 напиши правила системы со стопами, которую не знаешь как реализовать. Я её реализую и будет интересный пример. |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
![](images/spacer.gif) |
|