Главная Quikprofit twiiter Quikprofit Rss

QPile робот Ишимоку. Размер выставляемого ордера.

Январь 24, 2011 | Нет комментариев

Определившись с понятием сила сигнала, переходим к определению размера открываемой позиции или размеру выставляемой заявки.

Алгоритм и блок-схему определения размера ордера мы уже рассматривали в одной из предыдущих статей. Для освежения памяти продублируем часть текста:

Алгоритм определения размера ордера

Вспомним нашу блок-схему, составленную в предыдущих статьях:

Для полноты входящей в блок-схему информации нам не хватает знаний о размере уже открытой позиции.  Какие здесь могут быть нюансы?

Код блока по определению размера открытой позиции напрямую зависит от торгуемых инструментов: ценные бумаги на ММВБ или фьючерсы РТС (в том числе и инструменты РТС-стандарт).  Детально о различиях кода можно прочитать в статье Торговый робот. Шаг за шагом. Шаг 9. Переходим на FORTS (ФОРТС). В дальнейшем мы будем писать код для рынка ММВБ.

Код для определения размера открытой позиции выглядит следующим образом для ММВБ:

1
ToolQuantity = DEPO_CURRENT_BALANCE("ClientCode", "FirmId", "SBER03", "Account") +0

Для фьючерсных инструментов:

1
2
3
4
5
6
ToolQuantity = 0
FOR I FROM 0 TO GET_NUMBER_OF("FUTURES_CLIENT_HOLDINGS") ' цикл по таблице "Позиции по клиентским счетам"
	IF (GET_VALUE (GET_ITEM ("FUTURES_CLIENT_HOLDINGS", I), "SECCODE")=="RSH1") ' просматриваем каждую строку в поиске строки с фьючерсом РТС RSH1
                ToolQuantity= GET_VALUE(GET_ITEM("FUTURES_CLIENT_HOLDINGS",I), "TOTAL_NET")+0 ' берем значение поля "текущая чистая позиция"
	END IF
END FOR

В итоге мы имеем 2 переменные :

  • SignalPower — сила сигнала (значения 1-3);
  • ToolQuantity — размер и направление открытой позиции (0-нет открытой позиции, «-»- короткая позиция, «+» — длинная позиция).

Добавим в код еще 2 переменные (в начало кода робота):

  • MaxPortfel — задается трейдером, должно быть кратно 3(!);
  • Unit — Юнит — 1/3 максимального портфеля и соответствует силе сигнала = 1.

Таким образом, начало нашего торгового робота будет иметь вид:

1
2
3
4
SignalPower = 0 'Сила сигнала в начале расчета равна 0'
ToolQuantity = DEPO_CURRENT_BALANCE("ClientCode", "FirmId", "SBER03", "Account") +0 'размер уже открытой позиции'
MaxPortfel = 9 'задается трейдером, должно быть кратно 3(!)'
Unit = MaxPortfel / 3 'Юнит - 1/3 максимального портфеля и соответствует силе сигнала = 1'

Теперь мы имеем достаточно информации, чтобы рассчитать размер выставляемого ордера на открытие позиции или ее увеличения.

Если Сила сигнала меньше или равна максимальному портфелю за вычетом уже открытой позиции, то размер ордера будет равен силе сигнала помноженной на юнит, или иначе размер ордера будет равен максимальному портфелю за вычетом уже открытой позиции.

1
2
3
4
5
 if (MaxPortfel - abs(ToolQuantity)) <= SignalPower
	OrderSize = SignalPower * Unit
else
	OrderSize = MaxPortfel - abs(ToolQuantity)
end if

Пояснение! Так как переменная ToolQuantity(размер портфеля) может принимать как положительное, так и отрицательное значение, применяем математическую функцию abs() — модуль.

Данный код пока оставим в «подвешенном» состоянии. Местоположение ему определим в следующей статье.

Понравилось? Следите за обновлениями по RSS! Также можете следить за обновлениями в Twitter.
* * * *   7 проголосовавших

Комментарии

Оставить комментарий





Поля помеченные (*) обязательны к заполнению

Страница 1 из 11
  • Меню

  • Облако тегов

  • Рубрики

  • Для пользователя