Цена за трубопровод - страница 6

 
jjc:
Добавляя уточнение к "почти всегда" Гордона, я не могу сразу вспомнить инструмент форекс, где это не так, но это редко бывает, когда брокеры предлагают металлы, индексы и т.д. Например, на контракте Альпари на золото TICKSIZE составляет 0,05 (а Point - 0,01). Насколько мне известно, MarketInfo(Symbol(),MODE_POINT) = MathPow(10, -MarketInfo(Symbol(), MODE_DIGITS))

jjc, Спасибо за ваш ответ:

Я думаю, это потому, что мы используем десятичную систему счисления в качестве математической конвенции при вычислении и восприятии чисел. Если бы вместо этого мы использовали, например, шестнадцатеричную систему, у нас не было бы удобной точки, заканчивающейся на единицу. Примером может служить преобразование того, сколько метров составляет 5 см, мы бы просто умножили его на коэффициент преобразования сотых долей. ( 5 см * 0.01 --> 0.05 м ) -- пройдя полный счет 10[единиц см] -- десять раз. Но если мы используем шестнадцатеричную систему. Нам пришлось бы пройти полный счет 6 - 16 раз с модулем 4.

Таким образом, поинт - это десятичный коэффициент пересчета. Если рыночная конвенция предполагает, что, например, текущий коэффициент цены GBPUSD составляет 1,3535, то это только потому, что мы/они посчитали, что значение десятичного коэффициента пересчета в 5-м месте при покупке 1 фунта стерлингов за 1,3535 доллара США является незначительным для экономики торговли. Но если бы сделка была более крупной (возможно, по стоимости ярдов) и частой. Тогда мы/они будут преследовать его до наименее значимого пенни, каким должно быть соотношение цен. Например, 1,3535665.

Поэтому я согласен, что Point всегда будет = MathPow(10, -MarketInfo(Symbol(), MODE_DIGITS)), как вы и приравниваете.

EDIT : Извините, ребята, первый черновик прошел. Я был и все еще слишком ADD, чтобы опубликовать. Надеюсь, так будет лучше...

 
1005phillip:

Включено в прикрепленный rar-файл. Я уверен, что у вас будут вопросы по использованию, задавайте.

Филипп, я не могу выразить тебе свою благодарность! Это просто потрясающе! Мне нужно время, чтобы разобраться во всем этом. Но с первого взгляда все комментарии понятны, и я без проблем разобрался и с файлом excel. Это ценное дополнение к моему арсеналу. Очень щедро с вашей стороны поделиться этой работой с сообществом Phillip. Еще раз спасибо!

Это верно. Но процентная ошибка - это просто спред в пунктах, деленный на цену спроса (~0,02%-0,05% в зависимости от валютной пары)... это имеет значение, только если вы хотите учесть все до последнего пенни.

Это очень интересно!

В том виде, в котором ваш вопрос написан сейчас, простым ответом будет "да" - каждый кросс без USD соответствует вашему критерию. Но я думаю, что Вы хотели задать другой вопрос - встречал ли я брокера, который предлагает кросс-валютную пару и в то же время не предлагает необходимую валютную пару, содержащую контрвалюту кросс-пары и валюту номинала счета?

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

Допустим, у вас есть счет, деноминированный в евро, и вы покупаете 1 лот GBPUSD. Контрвалютой в GBPUSD является доллар США. Поэтому для расчета прибыли/убытка по позиции GBPUSD вашему брокеру (и вам) также необходимо знать цену EURUSD. (EUR - это валюта вашего счета, USD - контрвалюта кросс-пары, в которой вы открыли позицию).

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

Да, ваша последняя интерпретация моего вопроса является правильной. Плохая формулировка с моей стороны. Это добавит еще немного просветления в характеристику валютных пар. Спасибо...

камея

 
gordon:
"Точка" (MODE_POINT) - это наименьшее возможное изменение цены", следовательно, очевидно, что она должна заканчиваться на 1.

Да, это довольно глупое объяснение. Но я лишь пытался подчеркнуть, что Point будет характерно отличаться от TICK_SIZE, поскольку TICK_SIZE не всегда будет заканчиваться на 1. Брокер будет изменять его размер, чтобы, по их мнению, его значение соответствовало колебаниям / экономической ценности.

"Как я уже говорил, хотя в документации утверждается "Размер тика в пунктах", это явно неточно. Это и в ценовом выражении тоже".

Я не понимаю часть, выделенную жирным шрифтом Гордон... Если вы хотите объяснить...

"MODE_TICKVALUE : Текущая стоимость встречной валюты в пересчете на ее базовый коэффициент."

Это определение неясно... (возможно, английский не является вашим родным языком?).

Да, это мой второй язык. Хотя это не стало помехой, когда дело доходит до создания строк бессмысленного лепета в прошлом или будущем, если на то пошло :))))

Я постараюсь объяснить это в следующем посте. Прошу прощения, так как у меня мало времени. Большое спасибо, как всегда, Гордон!
 
cameofx:
"Как я уже говорил, хотя в документации утверждается "Размер тика в пунктах", это явно неточно. Это и в ценовом выражении тоже".

Я не понимаю часть, выделенную жирным шрифтом Гордон... Если вы хотите объяснить...

Допустим, Point = 0.00001. Если бы MODE_TICKSIZE был в пунктах, то, например, MarketInfo(Symbol(),MODE_TICKSIZE) вернул бы 1, что было бы интерпретировано как 1*Point=1*0.00001=0.00001. Но это не то, что возвращает MarketInfo(Symbol(),MODE_TICKSIZE), он возвращает (например) 0.00001, поэтому он возвращает значение, которое представляет цену, а не пункты. В документации указано "размер тика в пунктах", что явно неточно (возможно, ошибка в переводе с русского).
 
SDC:

Я уже читал эту тему, она полна противоречивой информации.

BarrowBoy - изменение спроса и/или предложения.

Рош - событие "новая цена"

kminler - каждый тик представляет собой закрытую сделку

puncher - тик - это пункт

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

Но теперь я изучаю, как вычислить стоимость пункта, и наткнулся на MarketInfo MODE_TICKVALUE, который, похоже, является статическим заданным значением, что само по себе противоречит тому, что большинство людей говорят о тике, что он просто передает изменение в цене, без конкретной суммы, так как же может существовать такая вещь, как MODE_TICKVALUE, это не имеет никакого смысла, если только большинство людей не ошибаются и 1 тик на самом деле имеет конкретное значение, равное 1 пункту, Моя проблема заключается в отсутствии надлежащей документации, как можно выяснить, что правильно, а что нет, темы форума содержат некоторую информацию, большая часть которой основана на мнениях или предположениях, а не на фактах, что в большинстве случаев не имеет значения, но когда человек пытается написать программу на основе такой отрывочной и противоречивой информации, это очень усложняет жизнь.


Да, меня это тоже беспокоит.

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

 

Я только что прочитала все, что здесь написано. Я действительно измучен и все еще не уверен, как решить проблему.

Итак, я просто скажу, теперь, когда мы, кажется, понимаем мои проблемы, предложение остается в силе: я хотел бы получить метод точного расчета стоимости движения цены от одного из наименьших значений к следующему (например, от x.0001 до x.0002) в соответствии с любым символом, на котором может быть советник, он должен также рассчитывать кредитное плечо. (т.е. если контракт на 100,000 и кредитное плечо 400:1, я могу ожидать, что EURUSD будет стоить 10 или что там у вас.


Взамен у меня есть 2 формулы ручного управления деньгами, которые я могу применить, используя вашу функцию, чтобы получить значение пункта и создать 2 набора функций управления деньгами. Я изучаю и другие методы. Идея, которая пришла мне в голову, состоит в том, чтобы создать пакет управления деньгами, содержащий варианты, основанные на различных гуру, и пользователь может выбрать тот, который работает для него.

Поэтому я буду очень благодарен, если кто-нибудь придумает функцию, которая сможет вывести мне стоимость пункта. Честно говоря, я удивлен, что это еще не стандартная функция в MT4.

Если пункт - это значение, скажем, 1.1234 - 1.1233, и вы можете получить денежную стоимость этого результата, то это то, что я ищу. Для меня термин point здесь так же хорош, как и термин pip.

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

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

 
LEHayes:

Итак, я просто скажу, что теперь, когда мы, кажется, понимаем мои опасения, предложение остается в силе: я хотел бы получить метод точного расчета стоимости движения цены от 1 наименьшего значения до следующего (aka от x.0001 до x.0002) в соответствии с тем, на каком символе может находиться советник.

Ну, частично суммируя то, что было сказано на 6 страницах, наименьшее возможное движение цены задается MODE_TICKSIZE, а его денежная стоимость на весь лот задается MODE_TICKVALUE. С тремя оговорками:

  • MODE_TICKSIZE и MODE_TICKVALUE могут отличаться у разных брокеров в зависимости от количества используемых десятичных знаков. Например, Alpari (5DP) сообщает TS как 0.00001 и TV как 1.00 на EURUSD. FXDD сообщает TS как 0.0001, а TV, соответственно, как 10.00. Попытки стандартизировать MODE_TICKSIZE у разных брокеров являются отдельным вопросом, например, как обсуждалось в https://www.mql5.com/en/forum/124692.
  • MODE_TICKVALUE изменяется со временем, если валюта котировки символа отличается от валюты вашего депозита (например, на USD-счете EURUSD имеет фиксированный TICKVALUE, а USDJPY - плавающий).
  • Cloudbreaker зарегистрировал случаи изменения TICKSIZE (например, TICKSIZE сообщается как 0.0002 и 0.0001 при последовательных вызовах, с соответствующим изменением TICKVALUE). Я лично никогда не видел такого, работая с 15 различными брокерами.
 
gordon:
Допустим, Point = 0.00001. Если MODE_TICKSIZE в пунктах, то, например, мы можем заставить MarketInfo(Symbol(),MODE_TICKSIZE) вернуть 1, что будет интерпретировано как 1*Point=1*0.00001=0.00001. Но это не то, что возвращает MarketInfo(Symbol(),MODE_TICKSIZE), он возвращает (например) 0.00001, поэтому он возвращает значение, которое представляет цену, а не Points. Очевидно, что это ошибка в документации (возможно, ошибка в переводе с русского).
Позволю себе не согласиться с Гордоном, MODE_TICKSIZE выражается в пунктах - Point(s), если быть точным. MODE_TICKSIZE всегда будет X кратно Point. Будь то 1, 2, 5, 35 и т.д. Point IMHO является двойным конвертирующим фактором, чтобы привести нас к последнему знаменательному десятичному знаку соотношения цены. Если брокер посчитает нужным предложить 6-й знак после запятой в качестве выгодной сделки для клиента, тогда он сделает Point равным 0.000001, а цифры = 6.
Цифры в данном случае будут представлять Point в целых числах.
 
LEHayes:

Итак, я просто скажу, теперь, когда мы, кажется, понимаем мои опасения, предложение остается в силе: я хотел бы получить метод точного расчета стоимости движения цены от 1 наименьшего значения к следующему (aka от x.0001 до x.0002) в соответствии с любым символом, на котором может быть советник, он должен также рассчитывать кредитное плечо. (т.е. если контракт на 100,000 и кредитное плечо 400:1, я могу ожидать, что EURUSD будет стоить 10 или что там у вас.

Проверьте включаемые файлы, содержащиеся в rar-файле, который я прикрепил на странице 5... он делает оба этих действия, если я не ошибаюсь в понимании вашего вопроса.

редактировать: в частности, следующие фрагменты кода.

Для tickvalue, используя включаемый файл под названием "Analyze Currency Symbol 2010.06.07.mqh", вы должны:

1. вызываете функцию int SymbolType()

int CalculatedSymbolType=SymbolType();

2. вызов функции CounterPairForCross()

string CalculatedCounterPairForCross=CounterPairForCross();


3. затем вычислить тиковую стоимость по текущей рыночной цене символа:

   switch(CalculatedSymbolType) // Determine the tickvalue for the financial instrument based on the instrument's SymbolType (major, cross, etc)
      {
      case 1   :  Print("Calculated TICKVALUE = ",DoubleToStr(MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_LOTSIZE)/MarketInfo(Symbol(),MODE_BID),6)," (Tick value in the deposit currency - base)"); break;
      case 2   :  Print("Calculated TICKVALUE = ",DoubleToStr(MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_LOTSIZE),6)," (Tick value in the deposit currency - counter)"); break;
      case 3   :  Print("Calculated TICKVALUE = ",DoubleToStr(MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_LOTSIZE)/MarketInfo(CalculatedCounterPairForCross,MODE_BID),6)," (Tick value in the deposit currency - ",AccountCurrency()," is Base to Counter)"); break;
      case 4   :  Print("Calculated TICKVALUE = ",DoubleToStr(MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_LOTSIZE)/MarketInfo(CalculatedCounterPairForCross,MODE_BID),6)," (Tick value in the deposit currency - ",AccountCurrency()," is Base to Counter)"); break;
      case 5   :  Print("Calculated TICKVALUE = ",DoubleToStr(MarketInfo(CalculatedCounterPairForCross,MODE_BID)*MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_LOTSIZE),6)," (Tick value in the deposit currency - ",AccountCurrency()," is Counter to Counter)"); break;
      default  :  Print("Error encountered in the SWITCH routine for calculating tickvalue of financial instrument ",Symbol()); // The expression did not generate a case value
      }


Для рычага, используя включаемый файл под названием "Analyze Currency Symbol 2010.06.07.mqh", вы должны:

1. вызвать функцию int SymbolType()
int CalculatedSymbolType=SymbolType();

2. вызов функции BasePairForCross()

string CalculatedBasePairForCross=BasePairForCross();


3. затем вычислить леверидж по символу по текущей рыночной цене для символа, вызвав функцию SymbolLeverage():

int   CalculatedLeverage=SymbolLeverage();   // Leverage for USDJPY is set to 100:1
Print("Leverage for ",Symbol()," is set at ",CalculatedLeverage,":1");
 
cameofx:
Позволю себе не согласиться с Гордоном, MODE_TICKSIZE выражается в пунктах - Point(s), если быть точным. MODE_TICKSIZE всегда будет X кратно Point. Будь то 1, 2, 5, 35 и т.д. [...]
Это похоже на вопрос семантики... Согласно общепринятой конвенции, когда мы говорим, что "значение находится в x", мы подразумеваем, что x - это используемая "единица". В данном случае Point не является используемой единицей, поэтому MODE_TICKSIZE не в Points. Я согласен, что он кратен Point, но это только потому, что Point - это наименьшее возможное изменение цены, поэтому по определению он должен быть кратен Point.
Причина обращения: