• Уважаемые форумчане, друзья и посетители!
    Форум останавливает свою работу с 1 июня на неопределенное время.
    Сохраните все что для вас важное с форума.
    Всем удачи и всего наилучшего в этой жизни.

Программирование Что за синтаксис такой?

hoz

Member
NinjaTrader
  • #1
Вроде как по заявлениям разработчиков, на данный момент, пишутся торговые роботы на C#. Это проавда? Или это типа C#, но не совсем то?
Да бы понять язык, решил я поиграться очередной раз с визуальным конструктором. Открыл его код. И сразу появились вопросы...
Вот такая строка спокойно компилируется:
Код:
if (GetCurrentAsk() < ATR(14)[0])
Меня сразу смутило то, что на конце имеется [0]
Это ещё с чего? Обычно параметры методов в круглых кавычках. Я б не удивился, если б было так, например:
Код:
if (GetCurrentAsk() < ATR(14, 0))
С чем это связано? Если посмотреть в справку из программы нажав F1, или пройти по ссылке можно увидеть следующее:
Syntax
ATR(intperiod)
ATR(IDataSeriesinput, intperiod)

Returns default value
ATR(intperiod)[intbarsAgo]
ATR(IDataSeriesinput, intperiod)[intbarsAgo]
Почему код пишется так как указано после Returns default value ? По сути, это ж возвращаемое по умолчанию значение... Судя по комментарию.
 
  • #2
В круглых скобках - параметр вызываемого метода. В квадратных скобках - порядковый номер элемента массива. Т.е. последнее (intbarsAgo=0) значение 14-периодного ATR. Если указать например ATR(14)[1] - предпоследнее значение (предпоследний бар) 14-периодного ATR.
 
  • Like
Реакции: knowledgebase
  • #3
thinarthrill сказал(а):
В круглых скобках - параметр вызываемого метода. В квадратных скобках - порядковый номер элемента массива. Т.е. последнее (intbarsAgo=0) значение 14-периодного ATR. Если указать например ATR(14)[1] - предпоследнее значение (предпоследний бар) 14-периодного ATR.
Я это понял ещё тогда , когда прочёл справку. Но это ж не C#'овский синтаксис! А часто можно встретить, что торговые эксперты и индикаторы под NT7 пишутся на C#. Вот в чём вопрос.
Почему порядковый номер бара в квадратных скобках вообще... Сколько не встречал синтаксисов, в том числе, и канкретно к торговым платформам, не попадались такие варианты. Обычно, как в том же Си, но не так.
С чего бы то вдруг?
 
  • #4
да нормальный С#, эт типо сокращенная запись.
//функция возвращает массив значений.
double[] func(int i);
//получить элемент массива
val = func(i)[n];

И да, в си такое тоже нормально ;)
 
  • Like
Реакции: knowledgebase
  • #5
В C# обращение к элементам массива через квадратные скобки []
 
  • Like
Реакции: knowledgebase
  • #6
thinarthrill сказал(а):
В C# обращение к элементам массива через квадратные скобки []
Да, но перед квадратными скобками круглых нет...
Вот создаётся новы массив на 10 элементов, например в C#:
Код:
int[] myArr = new int[10];
Кто-то приведёт нормальный пример из C# чтоб был подобен тому что я выше привёл?
 
  • Like
Реакции: Muratik
  • #7
ну ок, перевожу ;)

ATR(14)[0] // сокращенный эквивалент следующего кода

double[] atr = ATR(14); //функция возвращает массив
double atrVal = atr[0]; //извлечение 0-го элемента массива

// ну и соответственно
if (GetCurrentAsk() < atrVal)
 
  • Like
Реакции: knowledgebase, Muratik, thinarthrill и ещё 1 человек
  • #8
diushych, в итоге, у Вас нет данного варианта в коде) Так что вопрос остаётся открытым..
 
  • Like
Реакции: Muratik
  • #9
Вопрос собсно в чем? Почему С# в нинзе, адаптированный под торговлю на финансовых рынках, отличается от C# для прикладных приложений? Вопрос риторический)) Почему после круглых скобок с параметрами метода стоят квадратные с номером элемента? Как сказал diushych, полагаю для облегченного/сокращенного доступа к данным. Тут ж куда не ткни одни массивы баров да индикаторов с историческими временными рядами.
 
  • Like
Реакции: Alexander и Георгий
  • #10
thinarthrill сказал(а):
Вопрос собсно в чем? Почему С# в нинзе, адаптированный под торговлю на финансовых рынках, отличается от C# для прикладных приложений? Вопрос риторический)) Почему после круглых скобок с параметрами метода стоят квадратные с номером элемента? Как сказал diushych, полагаю для облегченного/сокращенного доступа к данным. Тут ж куда не ткни одни массивы баров да индикаторов с историческими временными рядами.
И в чём, собственно говоря, облегчение? Например, можно было используя нормальный синтаксис заменить такую конструкцию:
Код:
ATR(14)[0]
На такую:
Код:
ATR(14, 0)
По-моему, это было бы не сложнее, а куда проще и понятнее)
 
  • #11
Накачал видеокурсов по C диез (#).
Надо научиться разговаривать по русский с программистами на NinjaTrader.
 
  • Like
Реакции: Георгий
Назад
Верх Низ