5 цифр обнаружения - страница 2

 
7bit:
Я пытаюсь написать надежный код, который не сломается.

Если вы ищете надежный код, то я бы не стал делать ставку на файловую структуру symbols.raw. Это "внутренняя" и недокументированная файловая структура. Нет гарантий, что она не изменится в будущих версиях.

 

Привет, 7bit,

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

Достаточно взглянуть на демо-фид для The Collective FX, где они тестируют объединенный независимый фид различных поставщиков ликвидности (в отличие от единого согласованного фида из нескольких источников), каждый со своим собственным суффиксом валютной пары (наконец-то мы нашли применение суффиксу?), чтобы осознать масштаб проблемы. Это означает, что в рамках одной платформы вы сможете выбрать EURUSD_fx, EURUSDm или EURUSD_dbfx. Уже одно это может проделать огромную дыру в вашей стратегии, поскольку некоторые из них имеют 4-значные цены, а другие - 5-значные.

Метод "if (Digits == 3 || Digits == 5)" является настолько всеобъемлющим, насколько вы можете найти, поскольку он работает на простой предпосылке, что у вас есть только 2 вида брокеров, т.е. те, которые имеют целые пункты и те, которые имеют 1/10 пунктов. Этот случай охватывает 2/3/4/5 валютных пар и брокеров.

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

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

 
kennyhubbard:


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

Я видел, как GOLD котируется с 1 цифрой у брокера с 4 цифрами. Я не знаю названия брокера, потому что это было, когда мы тестировали мой генератор IRC сигналов на каком-то IRC канале, но один из моих тестеров совершал сделки на GOLD и котировки приходили с 1 цифрой. Я спросил его, и он сказал, что его брокер был 4-значным.

Это был тот самый момент, когда я решил, что подход "3 или 5" должен быть фундаментально несовершенным, и начал искать что-то лучшее.
 
7bit:
Я видел, как GOLD котируется с 1 цифрой у брокера с 4 цифрами. [...] Это был тот самый момент, когда я решил, что подход "3 или 5" должен быть в корне ошибочным, и начал искать что-то лучшее.

На Alpari UK, который обычно является 3/5-значным брокером, золото котируется по 2DP с размером тика 0,05. Где-то на этом форуме я видел упоминание о том, что кто-то торговал казначейскими облигациями США, которые котировались по 3DP. Однако в таком случае размер тика не был бы 0,001.

Один из возможных путей - проверить, что точность символа составляет 3/5 цифр, а также что размер тика равен 0,001/0,00001. В качестве альтернативы, в зависимости от того, чего именно вы пытаетесь достичь, вы можете попробовать обнаружить валютные пары Форекс, проверив, что первые шесть символов состоят из двух известных символов валют (т.е. используя жестко закодированный список распознанных валют). Вы также можете использовать MODE_PROFITCALCMODE как способ обнаружения символов форекс, в отличие от фьючерсов/акций/и т.д., но я подозреваю, что это может быть ненадежным у разных брокеров.

 
Где-то между LotSize, TickSize, TickValue, Point, Margin, и т.д... может быть соотношение, чтобы решить это...
Я слишком ADD прямо сейчас, чтобы понять это :)), но если кто-то заинтересован, вот некоторые ссылки, на которые я ссылаюсь

- от Ais : LotSize,
- от fbj: Кредитное плечо, маржа и т.д.
 
Теория решения находится внизу страницы 1, если только вы все не считаете ее настолько глупой, что не потрудились прокомментировать.
 
Ruptor:
Теория для решения лежит внизу страницы 1, если вы все не считаете ее настолько глупой, что не потрудились прокомментировать.

Говоря лично, я не понял вашего предыдущего сообщения. Я думаю, что в исходном вопросе 7bit спрашивает, как справиться со сценариями, подобными следующему: "Есть внешний параметр, в котором пользователь вводит значение в пунктах. В некоторых случаях размер пункта, который пользователь имеет в виду, отличается от MODE_TICKSIZE, сообщаемого брокером - например, брокер имеет размер тика 0.00001, но пользователь называет пункт 0.0001. Есть ли надежный способ прочитать мысли пользователя и выяснить, когда введенное им значение пункта должно быть скорректировано и на сколько?" Не существует чисто математического ответа на этот вопрос в том виде, в котором вы, похоже, предлагаете. Это вопрос полупроизвольного соглашения о том, что пункт на, например, EURUSD обычно считается равным 0.0001, несмотря на то, что большинство брокеров котируют символ до 5DP.

EDIT: ...именно поэтому с золотом и т.д. все так сложно, потому что существует меньше согласованных конвенций. На Alpari UK золото движется с шагом 0,05. Если бы вы провели опрос среди трейдеров и спросили, сколько пунктов это означает, я думаю, вы получили бы разумное количество голосов за каждый из следующих четырех ответов: 5, 1, 0,5 и 0,05.

 
Ruptor:
Разве это не простой (возможно, не такой простой с точки зрения математики) вопрос определения того, что одно очко относится к данной цене, а затем решить, в каком разряде оно находится по сравнению с цифрами цены?
Простым способом достижения этого может быть взятие цены, добавление пункта и сравнение его с вашим множителем + та же цена, если результат не тот же самый, увеличивайте ваш множитель в цикле, пока они не совпадут.

Руптор,

Вы так тонко выразились, что я, наверное, не понял с первого раза. И до сих пор не понимаю :)). Не могли бы Вы уточнить?

Некоторые брокеры, такие как GCI, также перечисляют фьючерсные символы, такие как S&P 500, IBM, Intel, даже Disney... как тогда это будет применяться?

 
Привет, Камеофокс
Картинка рисует тысячу слов или код в данном случае. pipx - это то, на что вы должны умножить Point, чтобы получить 1/10000 тыс. за пункт, что является обычным значением для торговли.
   double tmpx=MathCeil((Ask/10000)/Point);
   double pipx=1;
   while (tmpx>=10.0){
      pipx*=10;
      tmpx/=10;
   }
Это все еще не защищает от дурака, если валюта движется вверх или вниз в 10 раз по отношению к своей паре, но это невосприимчиво к цифрам брокера на Форекс, я думаю.
 
Ruptor:
[...] Это все еще не защита от дурака, если валюта движется вверх или вниз в 10 раз по отношению к своей паре, но это невосприимчиво к цифрам брокера на Форекс, я думаю.

Я откровенно озадачен этим. Например, если бы цена USDJPY упала ниже 90, тогда этот код начал бы сообщать различные значения pipx на 3/5DP брокере.

В настоящее время, когда USDJPY находится на уровне около 92.5, и у брокера 3/5DP, где Point = 0.001, тогда tmpx/pipx оценивается следующим образом:

  • 92.5 / 10000 = 0.00925
  • 0.00925 / 0.001 = 9.25
  • MathCeil() округляет tmpx до 10
  • pipx устанавливается равным 10

Если цена USDJPY упадет ниже 90 (например, 89,5), то оценка будет выглядеть следующим образом:

.
  • 89.5 / 10000 = 0.00895
  • 0.00895 / 0.001 = 8.95
  • MathCeil() округляет tmpx до 9
  • pipx остается равным 1, а не 10

Другими словами, по совершенно непонятным мне причинам, определение пункта в этом коде чувствительно к изменениям цены, и его множитель меняется от одного порядка величины к другому в зависимости от цены, а не (только) от настроек брокера. Это дало бы разные результаты в разное время на прошлой неделе. У брокера с 2/4DP pipx оставался бы на уровне 1 в течение всего времени, а не колебался бы между 1 и 10.
Причина обращения: