Скачать MetaTrader 5

Как мт считает прибыль?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
vladevgeniy
179
vladevgeniy  
Подскажите, как правильно расчитать прибыль? Чтобы на любом рынке можно было посчитать потенциальную прибыль за определенное количество пунктов. Что-то не получается универсальную придумать. Может кто знает, как в метатрейдере расчитывается прибыль? Чтобы учитывались все параметры, размер тика, стоимость тика, поинт и прочее. Если знаете подскажите пожалуйста, 2 день бьюсь))))
Rid
3170
Rid  

Так всё же есть это в СПРАВКЕ.

Константа Значение Описание
MODE_LOW 1 Минимальная дневная цена
MODE_HIGH 2 Максимальная дневная цена
MODE_TIME 5 Время поступления последней котировки
MODE_BID 9 Последняя поступившая цена предложения. Для текущего инструмента хранится в предопределенной переменной Bid
MODE_ASK 10 Последняя поступившая цена продажи. Для текущего инструмента хранится в предопределенной переменной Ask
MODE_POINT 11 Размер пункта в валюте котировки. Для текущего инструмента хранится в предопределенной переменной Point
MODE_DIGITS 12 Количество цифр после десятичного точки в цене инструмента. Для текущего инструмента хранится в предопределенной переменной Digits
MODE_SPREAD 13 Спрэд в пунктах
MODE_STOPLEVEL 14 Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах
MODE_LOTSIZE 15 Размер контракта в базовой валюте инструмента
MODE_TICKVALUE 16 Размер минимального изменения цены инструмента в валюте депозита
MODE_TICKSIZE 17 Минимальный шаг изменения цены инструмента в пунктах
MODE_SWAPLONG 18 Размер свопа для длинных позиций
MODE_SWAPSHORT 19 Размер свопа для коротких позиций
MODE_STARTING 20 Календарная дата начала торгов (обычно используется для фьючерсов)
MODE_EXPIRATION 21 Календарная дата конца торгов (обычно используется для фьючерсов)
MODE_TRADEALLOWED 22 Разрешение торгов по указанному инструменту
MODE_MINLOT 23 Минимальный размер лота
MODE_LOTSTEP 24 Шаг изменения размера лота
MODE_MAXLOT 25 Максимальный размер лота
MODE_SWAPTYPE 26 Метод вычисления свопов. 0 - в пунктах; 1 - в базовой валюте инструмента; 2 - в процентах; 3 - в валюте залоговых средств.
MODE_PROFITCALCMODE 27 Способ расчета прибыли. 0 - Forex; 1 - CFD; 2 - Futures
MODE_MARGINCALCMODE 28 Способ расчета залоговых средств. 0 - Forex; 1 - CFD; 2 - Futures; 3 - CFD на индексы
MODE_MARGININIT 29 Начальные залоговые требования для 1 лота
MODE_MARGINMAINTENANCE 30 Размер залоговых средств для поддержки открытых позиций в расчете на 1 лот
MODE_MARGINHEDGED 31 Маржа, взимаемая с перекрытых позиций в расчете на 1 лот
MODE_MARGINREQUIRED 32 Размер свободных средств, необходимых для открытия 1 лота на покупку
MODE_FREEZELEVEL 33 Уровень заморозки ордеров в пунктах. Если цена исполнения находится в пределах, определяемых уровнем заморозки, то ордер не может быть модифицирован, отменен или закрыт.

Даже размер пункта в валюте депозита! Или это не подходит? Мож я не понЯл вопроса ?

   double point =MarketInfo("EURUSD",MODE_POINT);  
   int    spread=MarketInfo("EURUSD",MODE_SPREAD);
   double lot_SIZE=MarketInfo("EURUSD",MODE_LOTSIZE);
vladevgeniy
179
vladevgeniy  
Это есть все в справке, согласен. Но нужно формулу, что на что делить и умножать. Почему-то универсальная для всех рынков не получается. Форекс может показывать правильно а на акциях завышать в тысячи раз. Может если разные для разных рынков, то можно переключать через MODE_PROFITCALCMODE. Тоесть можно и отдельные для CFD фьючерсов и форекса. HELP !!!
Игорь Корепин
582
Игорь Корепин  

В своё время моих знаний хватило на это:

//в ф-ции старт (переменные изменены)
//...
if (типордера==OP_BUY) прибыль=комиссия+своп+(кол-во пунктов)*лот*TickValue(символ,время);
else
{
  спред=MarketInfo(символ,MODE_POINT)*MarketInfo(символ,MODE_SPREAD);
  прибыль=комиссия+своп+(кол-во пунктов - спред)*лот*TickValue(символ,время);
}
//...

//+----------------------------------------------------------------------------+
//|  Определение стоимости пункта                                              |
//+----------------------------------------------------------------------------+
double TickValue(string symbol, datetime tbar)
{
double size;
string usd="USD";
switch (MarketInfo(symbol,MODE_PROFITCALCMODE))
{
  case 0:
  {
   int sbar=iBarShift(symbol,0,tbar);
   size=MarketInfo(symbol,MODE_LOTSIZE);
   if (StringSubstr(symbol,3,3)==usd) break;
   if (StringSubstr(symbol,0,3)==usd) size=size/iClose(symbol,0,sbar);
   else
   {
    string BQ=StringSubstr(symbol,0,3)+usd;
    if (iClose(BQ,0,0)==0) BQ=usd+StringSubstr(symbol,0,3);
    if (iClose(BQ,0,0)==0) break;
    int bqbar=iBarShift(BQ,0,tbar);
    if (StringSubstr(BQ,0,3)==usd) size=size/iClose(BQ,0,bqbar)/iClose(symbol,0,sbar);
    else size=size*iClose(BQ,0,bqbar)/iClose(symbol,0,sbar);
   }
  } break;
  case 1:
  {
   size=MarketInfo(symbol,MODE_LOTSIZE);
  } break;
  case 2:
  {
   size=MarketInfo(symbol,MODE_TICKVALUE)/MarketInfo(symbol,MODE_TICKSIZE);
  }
}
if (Currency!=usd) //если валюта депозита другая
{
  BQ=Currency+usd;
  if (iClose(BQ,0,0)==0)
  {
   BQ=usd+Currency;
   size*=iClose(BQ,0,iBarShift(BQ,0,tbar));
  }
  else size/=iClose(BQ,0,iBarShift(BQ,0,tbar));
} 
return(size);
}

Функция не всё учитывает, поэтому возможны ошибки на акциях и др. рынках в силу их специфических особенностей.

vladevgeniy
179
vladevgeniy  
Xupypr писал (а) >>

В своё время моих знаний хватило на это:

Функция не всё учитывает, поэтому возможны ошибки на акциях и др. рынках в силу их специфических особенностей.

 У Вас в коде применен переключатель, вероятно придется тоже на его основе делать. Немного не понятно зачем в функцию время надо передавать. Я пробую таким образом

количество пунктов  / MarketInfo(Symbol(),MODE_TICKSIZE)*MarketInfo(Symbol(),MODE_TICKVALUE);

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


 Лучше конечно если кто-нибудь подскажет формулки)))

 

MetaQuotes Software Corp.
Модератор
185360
MetaQuotes Software Corp.  
Игорь Корепин
582
Игорь Корепин  
vladevgeniy писал (а) >>

Немного не понятно зачем в функцию время надо передавать.



Для того, чтобы вычислить не только текущую прибыль позиции, но и какой она была в прошлом в любой момент времени (здесь ограничение - только по времени закрытия свечи).

Плюс, это синхронизация графиков, когда для расчётов необходим курс базовой валюты к доллару.

Сергей
20
Сергей  
MetaQuotes писал (а) >>
Есть статья Азбука торговли валютами

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

Rashid Umarov
Админ
12297
Rashid Umarov  
Rashid Umarov
Админ
12297
Rashid Umarov  
Вот еще Скрипт для расчета MAE и MFE, больше я Вам предложить ничего не могу. В нем точно есть формулы расчета прибыли.
vladevgeniy
179
vladevgeniy  
Rosh 23.06.2008 17:31
Возможно, эта ветка поможет - 'AccountStopout.. : опубликуйте пожалуста более подробную документацию'

Там обсуждают вариант подсчета с уже открытой позицией. А нас интересует еще не открытая а просто, если предположить, что по инструменту имеется определенное колличество пунктов, необходимо подсчитать сколько за это колличество пунктов заработает позиция по этому инструменту. Варианты с уже открытой позицией никак не подходят. Странно просто, сам мт везде правильно считает у любого брокера. А вот в советнике не удается сделать что-либо универсальное. Может даже у одного брокера считать правильно а у другого нет. Возможно чего-то не учитываю.
123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий