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


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

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

Хочу не спеша описать свой метод тестирования.
Основным преимуществом данного метода является полный контроль над всеми вычислениями ами. Алгоритм тестирования полностью эмулируется в 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
BabyBear
Советник


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

СообщениеДобавлено: Ср Дек 10, 2008 4:06 pm Ответить с цитатой Вернуться к началу

Что бум тестировать?

Я возьму советник для МТ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
BabyBear
Советник


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

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

Вот так будет выглядеть расчетная часть. Привожу её здесь, для тех, кто захочет разобратья в коде. Полноценный работающий вариант будет ниже
Посмотреть профиль Отправить личное сообщение Отправить e-mail
BabyBear
Советник


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

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

Вот рабочий вариант.
Ради чего старались?
1. Можно посмотреть эквити. Для этого в свойствах есть переключатель
2. Нарисованы линии ордеров. Можно проследить за их срабатыванием.
Но это всё внешнее. Внутри программы мы теперь имеем доступ к размеру лота, балансу, эквити, последним ценам покупки и продажи. Можем особо не мучаясь добавлять позиции и частично закрывать.
Есь возможность доработать библиотеку нужными функциями.
И, наконец, можем отлавливать свои глюки Smile

Если есть интерес, можно продолжить. Пишите вопросы и пожелания.
Посмотреть профиль Отправить личное сообщение Отправить e-mail
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

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

BabyBear писал(а):
Вот рабочий вариант.
Ради чего старались?
1. Можно посмотреть эквити. Для этого в свойствах есть переключатель
2. Нарисованы линии ордеров. Можно проследить за их срабатыванием.
Но это всё внешнее. Внутри программы мы теперь имеем доступ к размеру лота, балансу, эквити, последним ценам покупки и продажи. Можем особо не мучаясь добавлять позиции и частично закрывать.
Есь возможность доработать библиотеку нужными функциями.
И, наконец, можем отлавливать свои глюки Smile

Если есть интерес, можно продолжить. Пишите вопросы и пожелания.


А для чего все это?

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
BabyBear
Советник


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

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

commenced писал(а):
А для чего все это?

Какого типа ответ Вы ждете?
Например, сейчас обсуждается на этом форуме вопрос как сделать разные стопы для лонга и шорта. Это я запросто могу сделать, хотя я тестирую отдельно лонг и шорт.
Можно торговать по эквити. То есть после роста эквити уменьшать лот.
Посмотреть профиль Отправить личное сообщение Отправить e-mail
ID
Советник


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

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

BabyBear писал(а):

Если есть интерес, можно продолжить. Пишите вопросы и пожелания.


Добавил...
Респект...
Но!
1) Страшно юзать код, которые не сам писал (думаю, многие меня поймут);
2) Не нашел кнопочек для отрисовки ордеров;
3) ИМХО круто быть хорошим программером!
Посмотреть профиль Отправить личное сообщение
BabyBear
Советник


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

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

ID писал(а):
BabyBear писал(а):

Если есть интерес, можно продолжить. Пишите вопросы и пожелания.

1) Страшно юзать код, которые не сам писал (думаю, многие меня поймут);
2) Не нашел кнопочек для отрисовки ордеров;

1. если будут вопросы, что делает функция, могу код этой функции выложить. там почти всё посто.
2. отключить прорисовку можно переключателем в параметрах. А он (этот парамер может быть вверху списка и внизу, но пропасть не может)
В крайнем случае можно в коде подправить
вот такую строку закомментируйте
Код:

if ( "Yes" == ParamList("Draw Order Lines", "Yes,No" ))

и линии ордеров будут рисоваться всегда.
Посмотреть профиль Отправить личное сообщение Отправить e-mail
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

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

BabyBear писал(а):
commenced писал(а):
А для чего все это?

Какого типа ответ Вы ждете?
Например, сейчас обсуждается на этом форуме вопрос как сделать разные стопы для лонга и шорта. Это я запросто могу сделать, хотя я тестирую отдельно лонг и шорт.
Можно торговать по эквити. То есть после роста эквити уменьшать лот.


Да нет я не разобрался, что вы создали и как это есть и тем более тестировать.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
BabyBear
Советник


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

СообщениеДобавлено: Пн Дек 15, 2008 8:05 pm Ответить с цитатой Вернуться к началу

commenced писал(а):
Да нет я не разобрался, что вы создали и как это есть и тем более тестировать.

На данном этапе разобраться сложновато. Про это разговора нет. Пока, вопрос в том хотите Вы разобраться или нет.
Если хотите, напишите, чем я могу Вам помочь.
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Sergiovy



Зарегистрирован: 03.03.2008
Сообщения: 180
Откуда: Мурманск

СообщениеДобавлено: Вт Дек 16, 2008 12:38 am Ответить с цитатой Вернуться к началу

BabyBear писал(а):
commenced писал(а):
А для чего все это?

Какого типа ответ Вы ждете?
Например, сейчас обсуждается на этом форуме вопрос как сделать разные стопы для лонга и шорта. Это я запросто могу сделать, хотя я тестирую отдельно лонг и шорт.
Можно торговать по эквити. То есть после роста эквити уменьшать лот.

// Я тоже тестирую лонг и шорт сначала отдельно а потом вместе.Smile
Удивительно, но результаты разные ( всегда) До сих пор не понимаю, каким образом АМИ решает, что уже пора открывать противоположную позицию. Та идея, что сначала должна быть закрыта предудцщая позиция - срабатывает не всегда. Все эти заморочки с галочками в тестере - а без них не получить корректное срабатывание входов/выходов, приводит к тому что одни и те же галочки задействованы в разных частях системы, т.е. по отдельности их не выставить... ( в частности задержки) - например сделать так, чтобы после лонга была задержка в 1 бар и при этом считалось правильно.... ( ни разу не получилось - или задержка или правильно Smile
P.S.Ск. времени вы осваивали АМИ до такого уровня?

_________________
"Единственная pабота, достойная нас, — pабота над собой". Шон де Уоppен
Посмотреть профиль Отправить личное сообщение
BabyBear
Советник


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

СообщениеДобавлено: Вт Дек 16, 2008 12:56 am Ответить с цитатой Вернуться к началу

Sergiovy писал(а):
P.S.Ск. времени вы осваивали АМИ до такого уровня?

Пусть будет 3 месяца.
Мне нужно пара дней, чтобы прочитать основы любого языка. После этого я сразу начинаю писать довольно сложные программы, конечно, постоянно подглядывая в хелп или примеры. Я и сейчас подглядываю. Просто знаю где искать и что. В этом основная проблема. Если быстро находишь ответы, пишется всё очень быстро.
Посмотреть профиль Отправить личное сообщение Отправить e-mail
BabyBear
Советник


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

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

Sergiovy писал(а):
// Я тоже тестирую лонг и шорт сначала отдельно а потом вместе.Smile

Я не тестирую вместе, хотя возможность такая есть. Дело в том, что Ами я использую исключительно для тестирования. А торгую я на МетаТрейдере. Так что , если есть стратегия только лонг, я программирую советника и запускаю его на МТ. Если и шорт есть, модернизирую советник и он рабоатет по двум стратегиям одновременно.
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


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

СообщениеДобавлено: Вт Дек 16, 2008 2:52 pm Ответить с цитатой Вернуться к началу

Если стопы задаваемые при помощи 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
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
BabyBear
Советник


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

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

000 напиши правила системы со стопами, которую не знаешь как реализовать. Я её реализую и будет интересный пример.
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen