- [АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4.
- [ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда.
- Не правильное возвращаемое значение SymbolInfoDouble
Так всё же есть это в СПРАВКЕ.
Константа | Значение | Описание |
---|---|---|
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);
В своё время моих знаний хватило на это:
//в ф-ции старт (переменные изменены) //... 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); }
Функция не всё учитывает, поэтому возможны ошибки на акциях и др. рынках в силу их специфических особенностей.
В своё время моих знаний хватило на это:
Функция не всё учитывает, поэтому возможны ошибки на акциях и др. рынках в силу их специфических особенностей.
У Вас в коде применен переключатель, вероятно придется тоже на его основе делать. Немного не понятно зачем в функцию время надо передавать. Я пробую таким образом
количество пунктов / MarketInfo(Symbol(),MODE_TICKSIZE)*MarketInfo(Symbol(),MODE_TICKVALUE);
буду эксперементировать отдельно для разных рынков может что и получится.
Лучше конечно если кто-нибудь подскажет формулки)))
Для того, чтобы вычислить не только текущую прибыль позиции, но и какой она была в прошлом в любой момент времени (здесь ограничение - только по времени закрытия свечи).
Плюс, это синхронизация графиков, когда для расчётов необходим курс базовой валюты к доллару.
Попросили вроде бы нормально ответить, как в мт считается
прибыль, какими функциями идет расчет и по какой ф-ле мт считает прибыль. Не
мог не ответить так как меня этот вопрос то же очень интересует, для каждого
рынка своя формула или общая какая то есть? Как в мт можно посмотреть на эту
формулу если никак, то хотелось бы чтобы ее здесь выложили в том виде в котором
она есть в мт.
Возможно, эта ветка поможет - 'AccountStopout.. : опубликуйте пожалуста более подробную документацию'
Там обсуждают вариант подсчета с уже открытой позицией. А нас интересует еще не открытая а просто, если предположить, что по инструменту имеется определенное колличество пунктов, необходимо подсчитать сколько за это колличество пунктов заработает позиция по этому инструменту. Варианты с уже открытой позицией никак не подходят. Странно просто, сам мт везде правильно считает у любого брокера. А вот в советнике не удается сделать что-либо универсальное. Может даже у одного брокера считать правильно а у другого нет. Возможно чего-то не учитываю.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования