Базовая валюта котировки. - страница 2

 

ph3onix писал(а) >>

lot = risk / (stoploss * tickvalue)

tickSize может отличаться от Point

 

Update, начинаеца веселье.


Формула расчета риска


m_lot = m_risk / (m_tickvalue * ((MathAbs(priceAdjust(oop) - priceAdjust(osl)))));

oop - OrderOpenPrice();

osl - OrderStopLoss();


на priceAdjust() внимания не обращать, это сделано для фьючерсов на индексы.


Функцию тестирую с такими параметрами


computeLot(Ask, Ask - 618 * Point);


Соотв для евры получаю на входе (Ask = 1.3560):

MathAbs(oop - osl) = 0.0062, и здесь функция отрабатывает нормально.


Для индекса на фьюч на входе (Ask = 1069):

MathAbs(oop - osl) = 6, вот тут естесно ж_па. На входе oop = 1069, osl = 1062.82 (т.е 618 * Point отрабатывают верно), но проблема в том что это не 6, а 600 пунктов. Соотв если / Point тогда да, здесь начинает считать верно, но тогда расчеты сьежают на евре ;)


Чото я не могу найти изящного решения, хотя понимаю что какую то мелкую элементарную деталь упускаю :(

 

Вообщем вся эта задача решилась следующим кодом:

double computeLotRisk(double oop, double osl)
{
   double m_lotstep = MarketInfo(Symbol(), MODE_LOTSTEP);
   double m_tickvalue = MarketInfo(Symbol(), MODE_TICKVALUE);
   double m_ticksize = MarketInfo(Symbol(), MODE_TICKSIZE) / Point;
   double m_risk = AccountEquity() * (risk / 100);
   double m_stoploss = (MathAbs(priceAdjust(oop) - priceAdjust(osl)) / Point) / m_ticksize;
   double m_lot = m_risk / (m_tickvalue * m_stoploss);
   
   //Print(MathFloor(m_lot/m_lotstep) * m_lotstep);
   return(MathFloor(m_lot/m_lotstep) * m_lotstep);
}
 
ph3onix >>:

Вообщем вся эта задача решилась следующим кодом:

1. Добавить max min лот и уже можно пользоваться.

2. размер тика (вроде встречал такое) может быть 0. В этом случае вместо него нужно брать Point.

Вроде все.

 
TheXpert >>:

1. Добавить max min лот и уже можно пользоваться.

2. размер тика (вроде встречал такое) может быть 0. В этом случае вместо него нужно брать Point.

Вроде все.

max и min проверяюца в другой функции :)

размер тика часто равен 0 (например на евре, просто из маркетинфо), поэтому я использую ticksize / Point, в этом случае имеем тик = 1.


Спасибо за наводку на счет ticksize

 
kombat >>:

По моему вопрос двух пальцев об асфальт...

...
MODE_TICKVALUE 16 Размер минимального изменения цены инструмента в валюте депозита

по-моему этот параметр дает цену одного пункта при торговле одним лотом. т.е. если вы торгуете 0.1 лота, то цена одного пункта для вашего стопа\ордера = MODE_TICKVALUE * 0.1

...или я что то путаю?

 
ForexTools >>:

по-моему этот параметр дает цену одного пункта при торговле одним лотом. т.е. если вы торгуете 0.1 лота, то цена одного пункта для вашего стопа\ордера = MODE_TICKVALUE * 0.1

...или я что то путаю?

Все верно, но моя задача была определить РАЗМЕР ЛОТА при котором возможные потери будут не превышать определенный % от депозита :)

Причина обращения: