Автор |
Сообщение |
pylyp
Зарегистрирован: 21.09.2012
Сообщения: 80
|
Приветсвую!
1 месяц назад начал разбираться с АМИ. Много понял, узнал и смог протестировать благодаря этой программе и с помощью этого форума.
Сейчас пытаюсь вникнуть в тестирование размера позиции. Из хелпа никак не могу вкурить как это сделать.
Хочу:
1. научиться закрывать позиции по достижении определенного уровня
2. Наращивать размер позиции после достижении определенного уровня
3. Наблюдать на графике где закрыл часть позиции и сколько.
Нашел в хелпе такое чудо:
Код: |
Buy = Cross( MA( C, 10 ), MA( C, 50 ) );
Sell = 0;
// the system will exit
// 50% of position if FIRST PROFIT TARGET stop is hit
// 50% of position is SECOND PROFIT TARGET stop is hit
// 100% of position if TRAILING STOP is hit
FirstProfitTarget = 10; // profit
SecondProfitTarget = 20; // in percent
TrailingStop = 10; // also in percent
priceatbuy=0;
highsincebuy = 0;
exit = 0;
for( i = 0; i < BarCount; i++ )
{
if( priceatbuy == 0 AND Buy[ i ] )
{
priceatbuy = BuyPrice[ i ];
}
if( priceatbuy > 0 )
{
highsincebuy = Max( High[ i ], highsincebuy );
if( exit == 0 AND
High[ i ] >= ( 1 + FirstProfitTarget * 0.01 ) * priceatbuy )
{
// first profit target hit - scale-out
exit = 1;
Buy[ i ] = sigScaleOut;
}
if( exit == 1 AND
High[ i ] >= ( 1 + SecondProfitTarget * 0.01 ) * priceatbuy )
{
// second profit target hit - exit
exit = 2;
SellPrice[ i ] = Max( Open[ i ], ( 1 + SecondProfitTarget * 0.01 ) * priceatbuy );
}
if( Low[ i ] <= ( 1 - TrailingStop * 0.01 ) * highsincebuy )
{
// trailing stop hit - exit
exit = 3;
SellPrice[ i ] = Min( Open[ i ], ( 1 - TrailingStop * 0.01 ) * highsincebuy );
}
if( exit >= 2 )
{
Buy[ i ] = 0;
Sell[ i ] = exit + 1; // mark appropriate exit code
exit = 0;
priceatbuy = 0; // reset price
highsincebuy = 0;
}
}
}
SetPositionSize( 50, spsPercentOfEquity );
SetPositionSize( 50, spsPercentOfPosition * ( Buy == sigScaleOut ) ); // scale out 50% of position |
Вопросы:
1. Что значит i = 0;
2. Что значит i < BarCount ?
3. Что значит - i++ ?
4. FirstProfitTarget = 10 - откуда АМИ знает. что это в процентах, а не в деньгах. И почему его еще потом надо умножать на 0.01 [High[ i ] >= ( 1 + FirstProfitTarget * 0.01 ) * priceatbuy ) ]
5. Что значит [==] ? Пример [Buy == sigScaleOut ]?
6. Можно ли это все счастье нарисовать на графике, чтобы увидеть, где сработал стоп-профит?
Заранее благодарю за ответ. Извините, если загрузил. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Тут написан цикл, который при работе поочередно просматривает все бары с лева на право.
Цитата: |
Что значит i = 0; |
i это порядковый номер бара. i = 0 это самый первый бар
Цитата: |
Что значит i < BarCount ? |
Выполнять цикл до последнего бара. Последний бар имеет номер BarCount-1
Цитата: |
Что значит - i++ ? |
i = i+1;
Цитата: |
FirstProfitTarget = 10 - откуда АМИ знает. что это в процентах, а не в деньгах. И почему его еще потом надо умножать на 0.01 [High[ i ] >= ( 1 + FirstProfitTarget * 0.01 ) * priceatbuy ) ] |
Ами не знает что это проценты. Именно поэтому надо умножать на 0.01. 0.01 это один процент 10 * 0.01 это 10 процентов
Цитата: |
Что значит [==] ? Пример [Buy == sigScaleOut ]? |
Это сравнение. [=] это присвоение, а [==] это сравнение
Цитата: |
Можно ли это все счастье нарисовать на графике, чтобы увидеть, где сработал стоп-профит? |
Можно.
PlotShape((Sell == 4)*ShapeDownArrow, .....); // выход по трейлингу. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
pylyp
Зарегистрирован: 21.09.2012
Сообщения: 80
|
Сорри. Забыл сказать спасибо. .
Но лучше поздно чем никогда. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
pylyp
Зарегистрирован: 21.09.2012
Сообщения: 80
|
В продолжении темы о размере позиции.
Почитал в свое время Райана Джонса о управлении размером позиции и хотел спросить можно ли правила управления размера капиталом забить в ами?
По его словам есть два стиля управления размером позиции:
1. На каждых 10 000 $ в кармане предназначаешь один контракт.
Таким образом таблица увеличения кол. контрактов выглядила бы так:
Наш капитал - 10 000 $ - 1 контракт
20 000 $ - 2 контракта и т.д.
2. Другой метод (по его словам - более надежная): после того, когда 1 контракт заработал для нас 1000 дол, мы имеем право увеличивать.
пример:
наш капитал- 10 000 $ - 1 контракт
10 000 +1 000=11 000 - 2 контркта
11 000 + 2 000=13 000 - 3 контракта
13 000 + 3 000=16 000 - 4 контракта и т.д.
Вопрос можно ли каким то образом записать это в виде формулы в тестере АМИ? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
Наш капитал - 10 000 $ - 1 контракт
20 000 $ - 2 контракта и т.д.
|
Это запросто. Установи цену контракта 10000. |
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
pylyp
Зарегистрирован: 21.09.2012
Сообщения: 80
|
это понятно .
Больше интересует второй случай: когда один контракт заработал 1000 $ увеличивать количество контрактов. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вопрос. Торгуется одна бумага или портфель? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
pylyp
Зарегистрирован: 21.09.2012
Сообщения: 80
|
Одна бумага, чтоб не усложнять..... пока |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Если одна, то совсем не сложно. Надо использовать функцию Equity() для определения размера текущего капитала.
Сейчас подробно расписывать мне недосуг. Посмотри сам. Там ничего особо сложного. Будут вопросы - пиши. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|