Stanislav Gribanov
Stanislav Gribanov личный блог
09 февраля 2024, 08:14

Перевод книги "Хакер фондового рынка". Второй час: Функции.

Перевод книги "Хакер фондового рынка". Второй час: Функции.
Ранее:
1. Предисловие.
2. Торговля деньгами.
3. Биржевая цена.
4. Золотоискатели и ломбарды.
5. Тики, бары, свечи.
6. Как работают торговые системы?
7. Технический анализ — смысл и бессмыслица.
8. Трехчасовой курс программирования.
9. Первый урок: Переменные.
10. Разновидность калькулятора.

Второй час: Функции.

Как только вы поймете переменные и функции, вы узнаете, как работает сценарий. Точно так же, как объявляются переменные, вы должны объявить функции, прежде чем сможете их использовать. Вот небольшой пример объявления функции:

function addiere()
{
  var a, b, c;
  a = 3;
  b = 5;
  c = a + b;
}

Функция — это не что иное, как набор деклараций и инструкций, которые затем поочередно выполняются компьютером. Давайте рассмотрим некоторые свойства функций:

► Функция объявляется словом function, за которым следует имя функции и пара скобок ( ). Скобки используются для передачи дополнительных переменных в функцию; подробнее об этом позже. В нашем случае мы не передавали никаких переменных, поэтому скобки пусты.

► Тело функции (список инструкций) должно быть заключено в фигурные скобки { }. Тело состоит из одной или нескольких строк кода, которые могут содержать объявления переменных и утверждения. Для ясности программисты отступают от кода в теле функции на несколько пробелов, чтобы было понятно, что он находится внутри чего-то. Кстати, дополнительные пробелы игнорируются в C, поэтому вы можете поместить их в любом месте кода.

► К именам функций применяются те же соглашения, что и к именам переменных. Однако не следует давать одно и то же имя переменной и функции.

Если вы хотите взломать фондовый рынок, надеюсь, вы можете мысленно конвертировать евро в доллары по курсу 1,36. Что, вы не можете? Хорошо, тогда давайте напишем функцию, которая конвертирует 500 евро в доллары. Итак, мы пишем слово function, а затем имя функции; назовем ее euro_to_dollar:

function euro_to_dollar()
{
  //Быстрая проверка: скобки после имени функции не забыты, и первая фигурная скобка уже есть. В функции нам понадобятся некоторые переменные, которые мы объявим сейчас:
  var Euro = 500;  // Сумма в евро для конвертации
  var Kurs = 1.36;
  //Пока ничего нового. Мы объявили две переменные var и присвоили им начальные значения. Как мне теперь сказать компьютеру, чтобы он конвертировал евро в доллары? <br />  //Как бы я сделал это с помощью калькулятора? Я бы ввел что-то вроде этого: 500 * 1.36
  //Если мы используем переменные вместо чисел, это будет выглядеть следующим образом: Euro * Kurs
  //Поэтому давайте закончим объявление нашей функции следующим образом:
  var Dollar = Euro * Kurs;
  printf("%.f Euro sind %.f Dollar.", Euro, Dollar);
}

Мы также подумали о второй фигурной скобке, так что тело функции теперь находится между двумя скобками. Давайте проверим это прямо сейчас. Запустите Zorro и выберите [Новый сценарий] в самом низу окна прокрутки сценариев. Подождите, пока редактор не откроется с новым пустым файлом. Затем впишите в него следующие строки:

function euro_to_dollar()
{
  var Euro = 500;  // Сумма в евро для конвертации
  var Kurs = 1.36;
  var Dollar = Euro * Kurs;
  printf("%.f Euro sind %.f Dollar.", Euro, Dollar);
}

Теперь сохраните файл (File/Save As) в папке Strategy в Zorro под новым именем, которое должно заканчиваться на ".c", например, «EuroDollar.c». Если теперь вы откроете окно прокрутки сценария Zorro, вы увидите ваш новый сценарий. Выберите его и нажмите [Test].

Перевод книги "Хакер фондового рынка". Второй час: Функции.

Что это значит сейчас? Всегда ли сценарию нужна функция main или run? Действительно, main — это предопределенное имя функции. Главная функция автоматически выполняется при запуске сценария. Функция с именем run, с другой стороны, является не обычной частью языка C, а особенностью Zorro; она содержит торговую стратегию и автоматически выполняется один раз за период бара. Если в сценарии нет ни функции main, ни функции run, Zorro предполагает, что вы допустили ошибку.

Поэтому дайте скрипту то, что ему нужно, и добавьте следующие строки в конце:

function main()
{
  euro_to_dollar();
}

Эта функция main, очевидно, очень короткая — она содержит только один оператор для выполнения функции euro_to_dollar — или «call» на жаргоне программистов. Чтобы вызвать функцию из другой функции, очевидно, нужно написать только имя функции, за которым следуют две скобки и обычная точка с запятой для завершения. Доказательство:
Перевод книги "Хакер фондового рынка". Второй час: Функции.
С помощью функций можно добавлять в язык программирования любые новые команды — это все равно что придумывать новые слова для языка. Важный совет: объявляйте функцию перед строкой, в которой она вызывается. Это происходит потому, что компилятор читает код как страницу книги, сверху вниз. Если бы мы написали сценарий наоборот:

function main()
{
  euro_to_dollar();
}
function euro_to_dollar()
{
  ...
}

 

компилятор говорит следующее: Итак, вот функция main. Она будет выполняться каждый раз. Но что это говорит — вызов euro_to dollar()? Этого я еще не знаю. Я не могу вызвать то, чего не знаю. Я выдал сообщение об ошибке и на этом закончил.

Перевод книги "Хакер фондового рынка". Второй час: Функции.

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

Краткое резюме:

► Мы определяем простые функции через "function Name (...) {...}".

► Если функция имеет имя main или run, она выполняется автоматически. Все остальные функции должны вызываться из уже запущенной функции.

► Не паникуйте из-за сообщений об ошибках компилятора — их почти всегда легко обнаружить и исправить в коде. Не круто просить помощи с ошибками компилятора на форуме программистов!

Продолжение следует...
0 Комментариев

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн