Автор |
Сообщение |
Marcello
Зарегистрирован: 30.05.2015
Сообщения: 69
|
Приветствую!
Есть динамический уровень стоплосс. От этого уровня определяется размер позиции в момент ее открытия. Позиция открывается по закрытию бара. Для определения размера позиции берем 5% от депозита и делим на разницу между закрытием бара и уровнем стоплосс. Затем делим полученное число лотов на RoundLotSize и округляем вниз. Если получился 0, то берем минимальный размер позиции, равный RoundLotSize. Выглядит это так:
Код: |
BuyPrice = SellPrice = C;
Buy = ...
Sell = ...
E = Equity(1);
RiskPerShare = C - StopLevel;
PositionRisk = 5;
pSize = Ref( E, -1 ) / 100 * PositionRisk / RiskPerShare;
pSize = Max( floor( pSize / RoundLotSize ), RoundLotSize );
SetPositionSize( pSize, spsShares ); |
Смотрю на первую сделку на графике. Начальный капитал 100000. Закрытие бара 305.01. Стоплосс 287.50. Значит риск на сделку = 17.51. Число лот = 5000 / 17.51 = 285.55. RoundLotSize установлен в Contract Specification равным 10. Делим 285.55 на 10 и округляем вниз - получаем 28. Это значение показывается и на графике:
Код: |
Plot( pSize, "pSize", 43, styleOwnScale ); |
Далее делаю backtest в режиме trade list и вижу у первой сделки Contracts = 20. Почему так?
Пробую принудительно увеличить размер позиции в 10 раз:
Код: |
SetPositionSize( pSize * 10, spsShares ); |
В тестере вижу Contracts = 280. Почему теперь размер позиции правильный 28*10 ?
Если увеличить в 2 раза:
Код: |
SetPositionSize( pSize * 2, spsShares ); |
то в тестере вижу Contracts = 50, как будто исходный pSize равен 25, а не 28.
Что я делаю не так и как получить правильный размер позиции? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
RoundLotSize = 10. Т.е. минимально можно оперировать 10ю контрактами. Соответственно размер позиции всегда будет кратен 10. 10, 20, 30, 40, 50 и т.д. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Marcello
Зарегистрирован: 30.05.2015
Сообщения: 69
|
000 писал(а): |
RoundLotSize = 10. Т.е. минимально можно оперировать 10ю контрактами. Соответственно размер позиции всегда будет кратен 10. 10, 20, 30, 40, 50 и т.д. |
Значит, чтобы получить правильное число контрактов, нужно поделить на RoundLotSize, затем округлить вниз и снова умножить на RoundLotSize. Получается, что в репорте Contracts = 280 будет означать 28 лотов по 10 в каждом. Верно? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Не верно. Если у тебя в настройках Information RoundLotSize установлен 10, то 28 бумаг ника не купить. RoundLotSize это размер лота. Если лот 10 бумаг, то ты можешь купить один лот - 10 бумаг, 2 лота - 20 бумаг, 3 лота - 30 бумаг.
А 28 бумаг никак купить нельзя. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Marcello
Зарегистрирован: 30.05.2015
Сообщения: 69
|
Похоже об одном и то же говорим Если RoundLotSize = 10 и в репорте пишет 280, значит 28 лотов по 10 бумаг. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Нет. В репорте он напишет именно число бумаг и оно обязательно будет кратно размеру лота. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|