АвторСообщение





Пост N: 19
Зарегистрирован: 19.11.10
Откуда: Россия, Новочеркасск
ссылка на сообщение  Отправлено: 10.11.11 21:43. Заголовок: Специфическая Математика и расчеты усреднений !!!


Вопрос есть бай лотом 0,01 и есть сел ордер который ниже бая, селл обьемом 0,03 как расчитать профит для села что бы обе позы закрылись в ноль ????

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 23 , стр: 1 2 3 All [только новые]


постоянный участник


Пост N: 236
Зарегистрирован: 03.09.09
ссылка на сообщение  Отправлено: 10.11.11 23:44. Заголовок: Решается путем вывод..


Решается путем вывода уравнения.
Дано:

 цитата:
1. buyVolume - объем позиции Buy
2. buyPrice - цена открытия Buy
3. sellVolume - объем позиции Sell
4. sellPrice - цена открытия позиции Sell
5. spread - текущий спред


Найти:

 цитата:
X - цена Bid, при которой сумма позиций будет равна нулю.



Примем, что buyCost - прибыль/убыток в валюте депозита, который будет получен в случае закрытия позиции Buy по цене X. Соответственно, sellCost - прибыль/убыток в валюте депозита, который будет получен при закрытии позиции Sell по той же цене. По условиям задачи эти значения должны быть равны. Значит:

 цитата:
busCost + sellCost = 0


Чтобы рассчитать значения buyCost и sellCost, нам необходимо найти разницу между ценой открытия позиций и ценой X, умножить ее на стоимость одного пункта (tickValue), а затем умножить на объем позиции. В итоге имеем:

 цитата:
buyCost = (buyPrice - X)*tickValue*buyVolume


и

 цитата:
sellCost = (X + spread - sellPrice)*tickValue*sellVolume


В последнем выражении учли, что Sell закрывается по цене Ask, в то время как X - цена Bid.
Подставляем выражения buyCost и sellCost в уравнение и получаем:

 цитата:
(buyPrice - X)*tickValue*buyVolume + (X + spread - sellPrice)*tickValue*sellVolume = 0


Как видим, стоимость одного пункта (tickValue) сокращается. В этом нет ничего удивительного, т.к. мы работаем на одной и той же валютной паре. Решаем уравнение и узнаем:

 цитата:
X = ((sellPrice - spread)*sellVolume - buyPrice*buyVolume)/(sellVolume - buyVolume)


Заметим, что уравнение не имеет решения при sellVolume = buyVolume.

Если Buy объемом 0.01 открыт по цене 1.3655, а Sell открыт объемом 0.03 по цене 1.3630 при спреде 0.0002, то получим цену, при которой короткая позиция компенсирует длинную:

 цитата:
X = ((1.3630 - 0.0002)*0.03 - 1.3655*0.01)/(0.03 - 0.01) = 1.36145


Если используется 4-хзнак, то цена закрытия должна быть меньше, т.е. 1.3614.
Проверка в данном случае проста. Убыток по позиции Buy: (1.3655 - 1.3614)*0.01 = 0,000041. Прибыль по позиции Sell: (1.3630 - 0.0002 - 1.3614)*0.03 = 0,000042. При стоимости пункта 10 центов, вы получите прибыль 0.1 цент.




Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 37
Зарегистрирован: 19.11.10
Откуда: Россия, Новочеркасск
ссылка на сообщение  Отправлено: 26.08.12 13:58. Заголовок: показывает отрицател..


показывает отрицательное значение Почему ???
Открывается бай лотом 0,01 потом сел лотом 0,03
double selp=0;
double buyp=0;
double lotb=0;
double lots=0;
double rez =0;
for (int z=total; z>=0; z--)
{
if(OrderSelect(z, SELECT_BY_POS))
{
if(OrderSymbol()==Symbol() )
{
if (OrderType()==OP_BUY && OrderMagicNumber()==magic)
{
buyp=OrderOpenPrice();
lotb=OrderLots();

}
if (OrderType()==OP_SELL&& OrderMagicNumber()==magic)
{
selp=(OrderOpenPrice()*OrderLots());
lots=OrderLots();

}
rez =NormalizeDouble( ( selp * lots - buyp * lotb )/(lots-lotb),Digits);

}}}
Comment(rez);

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 463
Зарегистрирован: 03.09.09
ссылка на сообщение  Отправлено: 26.08.12 20:19. Заголовок: voldemar227 пишет: ..


voldemar227 пишет:

 цитата:
показывает отрицательное значение Почему ???
Открывается бай лотом 0,01 потом сел лотом 0,03


Все верно. Если цена открытия ордера sell даже в два раза больше цены открытия ордера buy, то все равно первый член выражения будет намного меньше (минимум, на два порядка меньше), чем второй. Отсюда и отрицательное число. Причина в несимметричности формул расчета buyp и sellp.

Например, цена открытия buy 1.2, а цена открытия sell 2.4. Получаем:
buyp = 1.2
lotb = 0.01
sellp = 2.4*0.03 = 0.072
lots = 0.03.

Теперь подставляем данные в выражение rez:
(0.072*0.03 - 1.2*0.01)/(0.03 - 0.01) = (0.00216 - 0.012)/0.02 = -0.0984/0.02 = -0.492.


Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 38
Зарегистрирован: 19.11.10
Откуда: Россия, Новочеркасск
ссылка на сообщение  Отправлено: 28.08.12 10:32. Заголовок: ок я понял , разобра..


ок я понял , разобрался ....
Еще вопрос ....
мы имеем 3 ордера бай лотами 0,01 0,02 и 0,03
и 7 ордеров сел все по 0,02
при этом все ордера имеют разные цены открытия .
как в таком случае найти цену по которой будет высчитан нулевой профит ????????

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 466
Зарегистрирован: 03.09.09
ссылка на сообщение  Отправлено: 28.08.12 11:05. Заголовок: Этот вопрос Вы задав..


Этот вопрос Вы задавали в начале ветки. Мой ответ - второй в этой же теме (от 11.11.11). Посмотрите, пожалуйста.

Спасибо: 1 
ПрофильЦитата Ответить





Пост N: 39
Зарегистрирован: 19.11.10
Откуда: Россия, Новочеркасск
ссылка на сообщение  Отправлено: 28.08.12 15:06. Заголовок: я видел , но там во..


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 467
Зарегистрирован: 03.09.09
ссылка на сообщение  Отправлено: 28.08.12 15:45. Заголовок: voldemar227 пишет: ..


voldemar227 пишет:

 цитата:
Если я правильно понимаю то для всех селов нужно высчитать среднюю цену и от нее отталкиваться ??? Также и для баев ??


Да. В том то и прелесть приведенной формулы, что она подходит для любого количества ордеров.
Вместо buyPrice и sellPrice подставляйте средние цены открытия buy и sell. Они находятся по формуле:

где n - количество ордеров заданного типа,
lot_i - объем i-го ордера,
openPrice_i - цена открытия i-го ордера,
lotSum - совокупный объем ордеров одного типа.

Вместо sellvolume и buyVolume подставляйте совокупный объем ордеров. Тот, который в вышеприведенной формуле вы использовали в качестве lotSum.

Спасибо: 1 
ПрофильЦитата Ответить





Пост N: 43
Зарегистрирован: 19.11.10
Откуда: Россия, Новочеркасск
ссылка на сообщение  Отправлено: 13.11.12 12:39. Заголовок: Не могу понять но по..


Не могу понять но почему то пишет ошибку номер 1 постоянно
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
double nn=0,bb=0;
double nnn=0,bbb=0;
for(int ui=total-1; ui>=0; ui--)
{
if(OrderSelect(ui,SELECT_BY_POS))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY && OrderMagicNumber()==Magic)
{
double op=OrderOpenPrice();
double llot=OrderLots();
double itog=op*llot;
bb=bb+itog;
nn=nn+llot;
double factb=bb/nn;
}
if(OrderType()==OP_SELL && OrderMagicNumber()==Magic)
{
double ops=OrderOpenPrice();
double llots=OrderLots();
double itogs=ops*llots;
bbb=bbb+itogs;
nnn=nnn+llots;
double facts=bbb/nnn;
}
}
}
}

for(int uui=total-1; uui>=0; uui--)
{
if(OrderSelect(uui,SELECT_BY_POS))
{
if(OrderSymbol()==Symbol()&& OrderMagicNumber()==Magic)
{
if(b>=2 && OrderType()==OP_BUY && OrderTakeProfit()!=(factb+CORR)) //корр небольшой плюс к 0
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),factb+CORR,0,Blue);
}
if(s>=2 && OrderType()==OP_SELL && OrderTakeProfit()!=(factb-CORR))
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),facts-CORR,0,Blue);
}
}
}
}

Взгляните в чем может быть проблема ????

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 519
Зарегистрирован: 03.09.09
ссылка на сообщение  Отправлено: 13.11.12 13:36. Заголовок: voldemar227 пишет: ..


voldemar227 пишет:

 цитата:
Взгляните в чем может быть проблема ????


Ошибка 1 при попытке модификации ордера говорит о том, что по факту в ордере ничего не изменяется, т.е. заданы такие параметры модификации, которые равны текущим. Неравенство в Вашем случае получается из-за неправильного сравнения вещественных чисел OrderTakeProfit() и factb+CORR (facts+CORR).
Два вещественных числа, которые с точки зрения пользователя имеют одинаковую величину, в виду разных способов получения результата, могут оказаться неравными. Разность может наблюдаться в пятнадцатом знаке после запятой.
Есть два способа правильного сравнения двух вещественных чисел:
1. Сравнивать их абсолютную разность с некой дельтой. Если разность меньше дельты, то считается, что значения равны. Если больше или равно дельты - числа неравны.
2. Сравнивать значения чисел только тогда, когда они приведены к одинаковой точности.

Реализация первого способа:

 цитата:

double a = ....;
double b = ....;
double delta = 0.000001; // Требуемая точность
if (MathAbs(a - b) < delta)
{
// Числа a и b равны
}
else
{
// числа a и b неравны
}



Второй способ:

 цитата:

double a = ....;
double b = ....;
int digits = 7; // Требуемая точность в количестве знаков после запятой
double aND = NormalizeDouble(a, digits);
double bND = NormalizeDouble(b, digits);
if (aND == bND)
{
// Числа a и b равны
}
else
{
// числа a и b неравны
}




Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 44
Зарегистрирован: 19.11.10
Откуда: Россия, Новочеркасск
ссылка на сообщение  Отправлено: 13.11.12 15:23. Заголовок: к сожалению данный м..


к сожалению данный методы не помогли , в в принцепе всегда привожу число к нужному колличеству знаков

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 23 , стр: 1 2 3 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 1
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет