Уровень безубытка цены для множества ордеров - страница 3

 

Xupypr

а можно ваш скрипт подсчета безубытка адаптировать под ДЦ, у которых СВОП идет с переоткрытием позиций? а то как-то так получается, что скрипт выдает курс и так известный, т.е. видимый в окне терминала.. вообще скрипт хорош, на калькуляторе считать утомляет )

 

Возможно я немного опоздал к обсуждению.

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

Быстрее как всегда самому написать.Возможно чего то не хватает, добавите,но я использую это даже в советниках.

Вот скрипт.

Файлы:
bezubytok.mq4  3 kb
 
alexx_v:

Xupypr

а можно ваш скрипт подсчета безубытка адаптировать под ДЦ, у которых СВОП идет с переоткрытием позиций? а то как-то так получается, что скрипт выдает курс и так известный, т.е. видимый в окне терминала.. вообще скрипт хорош, на калькуляторе считать утомляет )

Как именно его нужно адаптировать? Позиции переоткрываются на одном уровне, скрипт его и будет показывать.

Нашел грубую ошибку в скрипте Zero_Level_1.mq4

Как было:

for (int i=Total-1;i>0;i--)
Как надо:
for (int i=Total-1;i>=0;i--)
Файлы:
 
Xupypr:

Как именно его нужно адаптировать? Позиции переоткрываются на одном уровне, скрипт его и будет показывать.

речь об адаптации под ДЦ, у которых перенос позиций (СВОП) идет с переоткрытием сделок, т.е. можно ли сделать так, чтобы скрипт понимал, что текущая (-ие) позиция (-ии) открывались ранее, и для расчета точки безубытка брался первоначальный (-ые) курс (-ы) этих сделки (-ок)?

 

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

Это сделать гораздо сложнее, но вполне реально. Может и попробую, но не сейчас.

У кого-нибудь есть подобная реализация?

 
Xupypr:

У кого-нибудь есть подобная реализация?

вот в АвтоГраф-е есть функция выставления Стопов одна, и она отслеживает то, о чем говоришь, но как оно там реализовано.. главное есть такая возможность физически

 
zhuki >>:

Возможно я немного опоздал к обсуждению.

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

Быстрее как всегда самому написать.Возможно чего то не хватает, добавите,но я использую это даже в советниках.

Вот скрипт.

Подскажи, что надо изменить, чтобы скрипт работал на 5 знаках?

 
chv >>:


Посмотрел Ваш скрипт. Вы используете встроенные MQL функции по формуле: OrderProfit()+OrderCommission()+OrderSwap(). Но они всё считают исходя из текущей цены, а мне нужно для множества ордеров (одного типа из {BUY, SELL}): A1, A2, ..., An рассчитать уровень цены, на котором их можно закрыть все с нулевым изменением баланса. Т.е. цену я буду подбирать, например, итерационно. Но тогда все встроенные функции OrderProfit и т.д. мне бесполезны, они опираются на текущую цену и рыночную ситуацию, а не на любую предлагаемую. Т.е. аргумента CurrentPrice у них нет.

  if (OrderType()==OP_BUY) {SPBuy+=(Bid-OrderOpenPrice())*OrderLots()/Lot;NumPos++;posbuy++;}

  if (OrderType()==OP_SELL) {SPSell+=(OrderOpenPrice()-Ask)*OrderLots()/Lot;NumPos++;possell++}

Это не "панацея" безусловно, но мне эта формула больше чем все остальное нравится....... в первом цикле мы все это дело считаем, а в следующем удаляем, по достижению суммарного профита..... без свопов, естественно...... не вижу большого смысла на них заморачиваться - теряем не на них, на спреде в основном :)

 
Xupypr писал(а) >>

Сделал индюк. Может будет полезен. Проверен на всех парах. Действительно, условий многовато, и это только расчёт стоимости пункта.

Вот моя реализация стоимости одного пункта

//+------------------------------------------------------------------+
double PointCalculate(string iSymbol,double iLots,datetime iTimeTick)
{
string Primary = StringSubstr(iSymbol,0,3); // первый символ,   например EUR
string Secondy = StringSubstr(iSymbol,3,3); // второй символ,   например USD
string Currency = AccountCurrency(); // валюта депозита, например USD
// размер контракта, например 100000
double Contract = MarketInfo(iSymbol, MODE_LOTSIZE);
double SizeTick = MarketInfo(iSymbol,MODE_TICKSIZE);
double iBid = iBidTime(iSymbol,iTimeTick);//MarketInfo(iSymbol,MODE_BID); // цена бид
double Result;

Result=Contract*SizeTick*iLots;
//---- допускаем только стандартные форексные символы XXXYYY
if (StringLen(iSymbol)!=6) {
otError=StringConcatenate("MarginCalculate: <",iSymbol,"> must be standard forex symbol XXXYYY");
Print("LotPrice","PointCalculate",otError);
return(0);
}
//---- проверка наличия данных
if(iBid<=0 || Contract<=0) {
otError=StringConcatenate("MarginCalculate: no market information for <",iSymbol,">");
Print("LotPrice","PointCalculate",otError);
return(0);
}
//-------------------- проверяем самые простые варианты - без кроссов ------------------------------
// EURUSD Обратная котировка 
if(Secondy == Currency) return(Result); // xxxUSD
// USDJPY Прямая котировка 
if(Primary == Currency) return(Result/iBid); // USDxxx
//---- проверяем обычные кроссы, ищем прямое преобразование через валюту депозита ------------------
// GBPJPY Кросс-курс
string Base = Primary + Currency; // xxxUSD
double iQuote=iBidTime(Base,iTimeTick);
if(iQuote > 0) return(Result*iQuote/iBid);
//---- попробуем наоборот
Base = Currency + Primary; // USDxxx
iQuote=iBidTime(Base,iTimeTick);
if(iQuote > 0) return(Result/iQuote/iBid);
//---- нет возможности прямого перерасчета
otError=StringConcatenate("MarginCalculate: can not convert <",iSymbol,"> ");
Print(otError);
return(0);
}
 
Xupypr писал(а) >>

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

Это сделать гораздо сложнее, но вполне реально. Может и попробую, но не сейчас.

У кого-нибудь есть подобная реализация?

Сам ордер который открыт уже имеет уникальный номер - это время открытия - переведи его в int - это и есть то уникальное имя которое и можно использовать далее..

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