• Demo счет NinjaTrader, регистрируется в брокерской компании NinjaTrader Brokerage . NinjaTrader™, LLC
    Ссылка на демо счет NinjaTrader
    Фид на соединении Continuum/CQG.
    Для справки: Continuum - это брэнд CQG, и ни чем они не отличаются друг от друга.
  • Сколько я реально плачу комиссии?
    Подробнее по ссылке

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

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 ? По сути, это ж возвращаемое по умолчанию значение... Судя по комментарию.
 

thinarthrill

Well-Known Member
NinjaTrader
#2
В круглых скобках - параметр вызываемого метода. В квадратных скобках - порядковый номер элемента массива. Т.е. последнее (intbarsAgo=0) значение 14-периодного ATR. Если указать например ATR(14)[1] - предпоследнее значение (предпоследний бар) 14-периодного ATR.
 

hoz

Member
NinjaTrader
#3
В круглых скобках - параметр вызываемого метода. В квадратных скобках - порядковый номер элемента массива. Т.е. последнее (intbarsAgo=0) значение 14-периодного ATR. Если указать например ATR(14)[1] - предпоследнее значение (предпоследний бар) 14-периодного ATR.
Я это понял ещё тогда , когда прочёл справку. Но это ж не C#'овский синтаксис! А часто можно встретить, что торговые эксперты и индикаторы под NT7 пишутся на C#. Вот в чём вопрос.
Почему порядковый номер бара в квадратных скобках вообще... Сколько не встречал синтаксисов, в том числе, и канкретно к торговым платформам, не попадались такие варианты. Обычно, как в том же Си, но не так.
С чего бы то вдруг?
 

diushych

Member
NinjaTrader
#4
да нормальный С#, эт типо сокращенная запись.
//функция возвращает массив значений.
double[] func(int i);
//получить элемент массива
val = func(i)[n];

И да, в си такое тоже нормально ;)
 

hoz

Member
NinjaTrader
#6
В C# обращение к элементам массива через квадратные скобки []
Да, но перед квадратными скобками круглых нет...
Вот создаётся новы массив на 10 элементов, например в C#:
Код:
int[] myArr = new int[10];
Кто-то приведёт нормальный пример из C# чтоб был подобен тому что я выше привёл?
 

diushych

Member
NinjaTrader
#7
ну ок, перевожу ;)

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

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

// ну и соответственно
if (GetCurrentAsk() < atrVal)
 

thinarthrill

Well-Known Member
NinjaTrader
#9
Вопрос собсно в чем? Почему С# в нинзе, адаптированный под торговлю на финансовых рынках, отличается от C# для прикладных приложений? Вопрос риторический)) Почему после круглых скобок с параметрами метода стоят квадратные с номером элемента? Как сказал diushych, полагаю для облегченного/сокращенного доступа к данным. Тут ж куда не ткни одни массивы баров да индикаторов с историческими временными рядами.
 

hoz

Member
NinjaTrader
#10
Вопрос собсно в чем? Почему С# в нинзе, адаптированный под торговлю на финансовых рынках, отличается от C# для прикладных приложений? Вопрос риторический)) Почему после круглых скобок с параметрами метода стоят квадратные с номером элемента? Как сказал diushych, полагаю для облегченного/сокращенного доступа к данным. Тут ж куда не ткни одни массивы баров да индикаторов с историческими временными рядами.
И в чём, собственно говоря, облегчение? Например, можно было используя нормальный синтаксис заменить такую конструкцию:
Код:
ATR(14)[0]
На такую:
Код:
ATR(14, 0)
По-моему, это было бы не сложнее, а куда проще и понятнее)
 

Muratik

Well-Known Member
NinjaTrader
#11
Накачал видеокурсов по C диез (#).
Надо научиться разговаривать по русский с программистами на NinjaTrader.:happy: