Скачать MetaTrader 5

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

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

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

Константа Значение Описание
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 2008.06.17 13:47  
Это есть все в справке, согласен. Но нужно формулу, что на что делить и умножать. Почему-то универсальная для всех рынков не получается. Форекс может показывать правильно а на акциях завышать в тысячи раз. Может если разные для разных рынков, то можно переключать через MODE_PROFITCALCMODE. Тоесть можно и отдельные для CFD фьючерсов и форекса. HELP !!!
Игорь Корепин
582
Игорь Корепин 2008.06.17 14:25  

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

//в ф-ции старт (переменные изменены)
//...
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 2008.06.17 15:38  
Xupypr писал (а) >>

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

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

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

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

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


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

 

MetaQuotes Software Corp.
Модератор
181174
MetaQuotes Software Corp. 2008.06.17 16:20  
Игорь Корепин
582
Игорь Корепин 2008.06.17 16:41  
vladevgeniy писал (а) >>

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



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

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

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

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

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

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