Germany | Finland | Saint Petersburg | Drive

Работа с непечатными символами

Опубликовано в QPILE

Практически у всех, кто знаком со "взрослыми" языками при знакомстве с QPILE обязательно возникает вопрос: каким образом можно задать в тексте программы на QPILE непечатный символ? Если проводить аналогию с языком С и его вариациями, как написать на QPILE конструкцию

Symbol = '\t'

Получение объекта из таблицы по его номеру

Опубликовано в QPILE

Еще одна постоянно используемая функция. Возвращает описание объекта (сделка, заявка, условная заявка и т.д.) по его номеру в торговой системе.

Chr() и Ord() в QPILE

Опубликовано в QPILE

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

Inc_Value()

Опубликовано в QPILE

Служебная функция, написанная скорее из эстетических чувств. get_value() есть, set_value() тоже. Часто полем ассоциативного массива являются какие-либо счетчики. Приходится сначала получать из массива значение, увеличивать его, потом записывать назад. Текст портфеля распухает. Для уменьшения количества кликов по клавиатуре сохранил эту функцию.

Разбор коллекции сделок

Опубликовано в QPILE

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

Получение коллекции сделок по номеру заявки

Опубликовано в QPILE

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

Time_Between()

Опубликовано в QPILE

Очень многие роботы, исходя из своего алгоритма, должны в какое-то время выполнять (или наоборот, перестать выполнять) некоторые из своих функций. Я обычно даю возможность пользователю такие промежутки времени задавать самому. Для этого в конфигурационном файле выделяется параметр со значением вида   HH:MM:SS -  HH:MM:SS, то есть начало и конец временного промежутка.  Вот процедура, которая проверяет, попадает ли время (во внутреннем целочисленном формате QPILE) в этот промежуток.

TimeFrame_Translate()

Опубликовано в QPILE

Вот функция, которая переводит количество секунд, которое определяет интервал графика  в "человекочитабельный" вид. Согласитесь, если в таблице, формируемой роботом на экране стоит число 7200 секунд, это одно, а если строка "2 часа" - совсем другая песня. 

' Переводит таймфрейм в секундах в строковое представление. Возвращает строку с названием таймфрейма
' Максимальный таймфрейм - День
' При ошибке возвращается пустая строка
FUNC TimeFrame_Translate(result)
          result = trim(substr(" 1 мин 2 мин 3 мин 4 мин 5 мин 6 мин 10 мин15 мин30 мин1 час 2 часа4 часаДень ",(1+Find_In_List("60,120,180,240,300,360,600,900,1800,3600,7200,14400,86400",result))*6,6))
END FUNC

или макросом (что гораздо удобнее и быстрее)

define(TimeFrame_Translate,trim(substr(" 1 мин 2 мин 3 мин 4 мин 5 мин 6 мин 10 мин15 мин30 мин1 час 2 часа4 часаДень ",(1+Find_In_List("60,120,180,240,300,360,600,900,1800,3600,7200,14400,86400",`$1'))*6,6)))

Майнинг в браузере