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



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

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

Добрый день, знатоки!

Накопилось вопросов по Амиброкеру, выложу их в одну тему ..

1) Хочу протестировать систему с частичным выходом из позиций. Например: вошел на все, а выходишь по тейк-профитам разной величины. Как это сделать _проще всего_?

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

1.2 Кроме того, как тестировать систему на нескольких символах одновременно? Ведь если я задам в тестере ALL SYMBOLS или FILTER то он будет тестировать систему на каждом отдельно, разве нет?

1.3 Есть ли какие средства Ами чтобы сделать копию символа? А то переименовывать тикер в текстовом файле долго очень.



2) В метастоке была неплохая штука: выход по трейлинг-стопу с периодом ожидания. То есть трейлинг имел 2 параметра и второй определял сколько подождать прежде чем крыть позицию. Есть ли что-то подобное в Ами? Как сделать?



3) Что еще интересного может сделать с системой Амиброкер кроме тестирования для подбора параметров?



4) Кстати, никто не знает где взять котировки западных фьючей - типа FDAX и прочих? На финаме только S&Pmini.



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


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

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

Dymytry писал(а):
Добрый день, знатоки!

Накопилось вопросов по Амиброкеру, выложу их в одну тему ..

1) Хочу протестировать систему с частичным выходом из позиций. Например: вошел на все, а выходишь по тейк-профитам разной величины. Как это сделать _проще всего_?

На мой взгляд зависит от системы. Вообще частичиный выход или добавление позиции проще всего реализовывать функциями SigScaleIn/SigScaleOut. Только надо иметь ввиду, что тестер не покажет много сделок, он просто будет соответственно пересчитывать цену первого входа
Цитата:

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

Не совсем понял. Такой способ применяется для тестирования двух разных систем на одном символе.
Цитата:

1.2 Кроме того, как тестировать систему на нескольких символах одновременно? Ведь если я задам в тестере ALL SYMBOLS или FILTER то он будет тестировать систему на каждом отдельно, разве нет?

Нет. Он будет считать портфель и соответственно считать сайз. Т.е. например если сейчас все деньги связаны открытыми сделками на других символах, то при получении еще сигнала он его не исполнит.
Цитата:

1.3 Есть ли какие средства Ами чтобы сделать копию символа? А то переименовывать тикер в текстовом файле долго очень.

Штатных средств нет.
Цитата:

2) В метастоке была неплохая штука: выход по трейлинг-стопу с периодом ожидания. То есть трейлинг имел 2 параметра и второй определял сколько подождать прежде чем крыть позицию. Есть ли что-то подобное в Ами? Как сделать?

Посмотрите функцию ApplyStop(). Там есть безусловный выход через N баров. Можно использовать например его. Можно использовать несколько ApplyStop() одновременно с разными выходами.
Цитата:

3) Что еще интересного может сделать с системой Амиброкер кроме тестирования для подбора параметров?

Вообще Ами предназначен для исследования рынка (в т.ч. для тестирования торг систем). Еще можно проверять наличие торг сигналов при торговле.
Цитата:

4) Кстати, никто не знает где взять котировки западных фьючей - типа FDAX и прочих? На финаме только S&Pmini.

Если интересует именно халявный реалтайм, то я не знаю. А историю скорее всего можно брать с Яху финанс при поможи AmiQuote.

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



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

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

Спасибо!
Но пока не понятно..

Итак, цель - протестить систему которая половиной выходит на одном тейке, и половиной на другом. Как это сделать?

***

Вот я пишу систему:

Buy = ..
Sell = ..

Short = ..
Cover = ..

SetPositionSize( 1, spsShares );

И в Filter задаю Watch List куда добавлены 2 моих одинаковых символа. Далее я пишу стопы:

///////// система 1 /////////
if(Name() == "RTSI")
{
ApplyStop(stopTypeProfit, stopModePoint, STOP1 , True, True );
}

///////// система 2 /////////
if(Name() == "RTSI2")
{
ApplyStop(stopTypeProfit, stopModePoint, STOP2, True, True );
}

А дальше он торгует по первой системе и все. Это потому что я никак не указал что надо входить в нее только частью. Если же поставлю SetPositionSize =2 то он все равно будет двумя контрактами входить по сигналам первой системы. Как его заставить входить ОДНОВРЕМЕННО, то есть еще и тогда когда по одному сигналу уже затарился - тарить и второй?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Сб Янв 03, 2009 8:52 pm Ответить с цитатой Вернуться к началу

В данном случае описана система которая входит двойным лотом и затем выходит половиной сайза при достижении первой цели и полностью закрывает сделку при достижении второй цели.
Распишу подробно.
На основе примера сделал простенькую системку
Код:

Buy = Cross(MA(C, 10), MA(C, 20));
Sell = Cross(MA(C, 20), MA(C, 10));

Short = 0;
Cover = 0;

SetPositionSize( 1, spsShares );


///////// система 1 /////////
if(Name() == "RTSI")
{
   ApplyStop(stopTypeProfit, stopModePercent, 5, exitatstop = 1, False);
}

///////// система 2 /////////
if(Name() == "RTSI2")
{
   ApplyStop(stopTypeProfit, stopModePercent, 10, exitatstop = 1, False);
}

Вход при пересечении двух мувингов и затем выход половиной позиции при достижении профита 5% и остальной половиной при достижении профита 10%. При обратном пересечении мувингов выход всем сайзом.
Далее. Создал два одинаковых символа RTSI и RTSI2
Тестируем эту системку на двух одинаковых символах RTSI и RTSI2
Получаем результаты представленные на картинках. Поясню пару сделок (См. отмеченную строку и следующую за ней)
1. Вход 27.06.2006 в 13:25 по 1359,78
Выход по RTSI при достижении 5% профита 29.06.2006 в 14:25 по 1427,77
и выход по RTSI2 при достижении профита 10% 30.06.2006 в 12:25 по 1495,76
2. Вход 26.09.2006 в 19:25 по 1448,13
Выход по RTSI при достижении 5% профита 28.09.2006 в 19:25 по 1558,34
Выход по RTSI2 по обратному сигналу (профит 10% к сожалению не был достигнут) 2.10.2006 в 16:25 по 1554,49

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



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

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

А вот в чем дело: надо было поставить 2 одновременные позиции в Портфолио тестера! Поэтому у меня и не работало.

Спасибо!
Посмотреть профиль Отправить личное сообщение
Dymytry



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

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

Интересно, а можно ли как-то алгоритмически запускать тестер?

Например, я хочу протестировать ночью несколько систем на нескольких разных (несвязанных) символах, так что считать будет долго. Пишу код типа: FOR такие параметры ЗАПУСТИТЬ ТЕСТЕР и СОХРАНИТЬ результаты туда. Это можно?
Посмотреть профиль Отправить личное сообщение
Dymytry



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

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

И вот еще: можно ли как-то собирать статистику интрадей-системы по дням? Например, узнать сколько дней прибыльных?
Посмотреть профиль Отправить личное сообщение
Dymytry



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

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

И вот еще вопрос: если тестирую систему на нескольких символах, то могу ли я добраться в процессе до Equity каждого из символов, а не только до общей эквити?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Dymytry писал(а):
Интересно, а можно ли как-то алгоритмически запускать тестер?

Например, я хочу протестировать ночью несколько систем на нескольких разных (несвязанных) символах, так что считать будет долго. Пишу код типа: FOR такие параметры ЗАПУСТИТЬ ТЕСТЕР и СОХРАНИТЬ результаты туда. Это можно?

Непосредственно из Ами нельзя. Встречал упоминания, что примерно такую задачу можно решить при помощи внешних программ или скриптов типа Джава, но поскольку мне не надо - не запомнил.
Dymytry писал(а):

И вот еще: можно ли как-то собирать статистику интрадей-системы по дням? Например, узнать сколько дней прибыльных?

Наверняка можно. Только требуется довольно высокий уровень программирования и использование Custom Backtester Interface
Dymytry писал(а):

И вот еще вопрос: если тестирую систему на нескольких символах, то могу ли я добраться в процессе до Equity каждого из символов, а не только до общей эквити?

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

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



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

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

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

Вот это не понял. Если я тестирую систему на нескольких символах то разве Equity не выдаст общей эквити? Если она выдаст Эквити текущего символа то это то что нужно. Но что такое текущий в коде если нет отбора по имени?..
И что она тогда выдаст, если сумма _этого_ по всем портфелям не равна общей эквити?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Функция Equity() выдает эквити аналогичную эквити старого (не портфельного) тестера. Эта эквити такая, как если бы система торговала ТОЛЬКО по одной бумаге.
Отличие портфельный торговли (портфельного тестера) в том, что можно задавать ограничение на общее число одновременно открытых позиций, можно задавать объем сделки как процент от ОБЩЕЙ эквити и т.п.

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



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

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

Олег, а как проще всего отслеживать значение переменной в процессе теста?
Я пробую делать printf но оно начинает как-то тормозить и непонятно куда выводит результат.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пт Янв 09, 2009 12:03 am Ответить с цитатой Вернуться к началу

Dymytry писал(а):
Олег, а как проще всего отслеживать значение переменной в процессе теста?
Я пробую делать printf но оно начинает как-то тормозить и непонятно куда выводит результат.

А объясни плиз конкретнее, а то я нифига не понял. Sad

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



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

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

Объясню проблему целиком.

Я пишу свой собственный код для трейлинг стопа. Чтобы можно было делать трейлинг-выход только если в течение N баров ничего не изменится в лучшую сторону, как в метастоке. Сейчас написал просто код для трейлинг-стопа, однако он работает не так как надо. А именно: входит в позу, но выходит упустив несколько точек где должен был выйти. То есть должен был сработать в точке X допустим, а срабатывает существенно позже. Я не могу понять где ошибка в моем коде. Поэтому и спрашивал, как бы мне отладить мой код чтобы иметь возможность наблюдать значение переменной в процессе тестирования системы. То есть знать чему равна моя переменная на i-м баре.

Вот код, в котором что-то не так. А highsincebuy - значение переменной, которое я хотел бы отследить.

----------------------------------------------------------

Buy, Sell и прочее пропущено.
Код:

TrailingStop = 1000;

priceatbuy=0;
highsincebuy = 0;
lowsincebuy=0;
timeatbuy=0;
shortatbuy=0;
longatbuy=0;


for( i = 0; i < BarCount; i++ )
{

   if( priceatbuy == 0 )
   {
      if (Buy[ i ]) {priceatbuy = BuyPrice[ i ]; timeatbuy=i; longatbuy=1; highsincebuy=priceatbuy;}
      if (Short[ i ]) {priceatbuy = ShortPrice[ i ]; timeatbuy=i; shortatbuy=1; lowsincebuy=priceatbuy;}
   }
   else
   {
      highsincebuy = Max( High[ i ], highsincebuy );
      lowsincebuy = Min( Low[ i ], lowsincebuy );

//printf(VarGetText("Highsincebuy")) ;

//LONG:
      if( (Low[ i ] <= ( highsincebuy - TrailingStop )) AND (longatbuy==1) )
      {
         SellPrice[ i ] =  Close[i];
         Buy[ i ] = 0;
         Sell[ i ] = 1;
         priceatbuy = 0;
         highsincebuy = 0;
         timeatbuy=0;
         longatbuy=0;
      }

//SHORT:
      if( (High[ i ] >= ( lowsincebuy + TrailingStop )) AND (shortatbuy==1))
      {
         CoverPrice[ i ] =  Close[i];
         Short[ i ] = 0;
         Cover[ i ] = 1;
         priceatbuy = 0;
         lowsincebuy = 0;
         timeatbuy=0;
         shortatbuy=0;
      }

//close else
   }

//close for
}
Посмотреть профиль Отправить личное сообщение
BabyBear
Советник


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

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

Dymytry писал(а):
как бы мне отладить мой код чтобы иметь возможность наблюдать значение переменной в процессе тестирования системы. То есть знать чему равна моя переменная на i-м баре.

Проще всего нарисовать эту переменную

Код:

Plot(highsincebuy,"highsincebuy",colorGreen,styleLine);

// рисуем свечки
Plot(Close,"Close" ,colorBlack,styleCandle);


А ошибка у тебя вот тут
Код:

SYNTAX  max( ARRAY1, ARRAY2 ) 
RETURNS ARRAY 
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen