Компилятор NKQPL разработан с целью облегчения создания роботов и советников на встроенном, в торговый терминал QUIK, интерпретаторе языка QPILE.

  Возможности компилятора:

1) Организация библиотек функций
2) Организация библиотек макросов
3) Организация отдельных проектов
4) Сборка сложных проектов , включающих большое число функций и макросов
5) Обнаружение ошибок
Некоторые определения:
Макрос — фрагмент кода программы, который имеет свое имя и формальные переменные.

Макрос отличается от функции тем, что при компиляции программы фрагмент заменяющего кода вставляется на место макроса. Таким образом, макрос не увеличивает время исполнения программы, а лишь делает ее более читаемой на этапе разработки.

Как известно, программа на QPILE состоит из трех частей:

  1. «Заголовок» – наименование  определение основных параметров,
  2. «Тело программы» – собственно код программы,
  3. «Описание столбцов таблицы» – определение названий столбцов и формата соответствующих им ячеек программируемой таблицы.

1. Заголовок  программы на QPILE имеет вид:

PORTFOLIO_EX название;
DESCRIPTION описание программы;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST ALL_FIRMID;

PROGRAM   — ‘ ключевое слово начала программы

В среде NKQPL, мы запишем два макроса именами title  в файл   title.qpl.

А в тексте программы запишем :

# title  название , описание программы

Когда компилятор будет собирать нашу программу для запуска ее на исполнение, он подставит в начале программы небоходимые операторы QPILE с указанном в макросе текстом

2. Тело программы  — это собственно программа робота.

Для включения  своих функций  в программу на QPILE предназначен оператор  INCLUDE file1, file2,…,fileN;

который включается в текст программы между заголовком и телом программы.

Таким образом, изначально Вы сами должны постоянно следить за тем,

какие функции и в каких файлах у вас хранятся.

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

При использовании компилятора, вам вообще нет необходимости в операторе INCLUDE

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

       Собирая  программу для исполнения, NKQPL выберет из библиотеки требуемые функции и допишет их  в загружаемый файл портфеля.  При этом, компилятор убирает все комментарии и лишние пробелы.

Таким компилятор уменьшает объем загружаемой памяти.

Кроме того ( опция) , возможна экономия числа переменных, путем определения локальных в теле функции переменных.

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

  Вы можете совершенствовать существующие функции и разрабатывать новые, записывая из в библиотеку .

Для указания компилятору места  хранения библиотечных функций предназначен псевдо оператор:

# pathlib  C:\NK_QPILE  —   путь к каталогу библиотеки LIB

4.      Описание столбцов таблицы

Описание столбцов программируемой таблицы размещается после тела программы.

На описание каждого столбца таблицы требуется 5 строк кода. Ниже представлено описание таблицы одной из моих разработок. Таблица содержит 36 столбцов, что составляет  180 строк плюс две строки – завершение программы и завершение портфеля.

Таким образом, если таблица содержит 36 столбцов, то еще не начиная разработку тела программы, мы должны написать в программу , с учетом заголовка и вставки файлов функций 188 строк .

 END_PROGRAM – оператор окончания тела программы
PARAMETER NAME;
 PARAMETER_TITLE NAME;
 PARAMETER_DESCRIPTION NAME;
 PARAMETER_TYPE STRING(20);  
 END
PARAMETER SECCODE;
 PARAMETER_TITLE SECCODE;
 PARAMETER_DESCRIPTION SECCODE;
 PARAMETER_TYPE STRING(20);  
 END
PARAMETER CLASSCODE;
 PARAMETER_TITLE CLASSCODE;
 PARAMETER_DESCRIPTION CLASSCODE;
 PARAMETER_TYPE STRING(12);  
 END
PARAMETER D;
 PARAMETER_TITLE D;
 PARAMETER_DESCRIPTION D;
 PARAMETER_TYPE STRING(8);  
 END
PARAMETER T;
 PARAMETER_TITLE T;
 PARAMETER_DESCRIPTION T;
 PARAMETER_TYPE STRING(8);  
 END
PARAMETER BS;
 PARAMETER_TITLE BS;
 PARAMETER_DESCRIPTION BS;
 PARAMETER_TYPE STRING(12);  
 END
PARAMETER QR;
 PARAMETER_TITLE QR;
 PARAMETER_DESCRIPTION QR;
 PARAMETER_TYPE NUMERIC(8,2);
 END
PARAMETER DC;
 PARAMETER_TITLE DC;
 PARAMETER_DESCRIPTION DC;
 PARAMETER_TYPE STRING(8);  
 END
PARAMETER DP;
 PARAMETER_TITLE DP;
 PARAMETER_DESCRIPTION DP;
 PARAMETER_TYPE STRING(8);  
 END
PARAMETER TP;
 PARAMETER_TITLE TP;
 PARAMETER_DESCRIPTION TP;
 PARAMETER_TYPE STRING(6);  
 END
PARAMETER Q_N;
 PARAMETER_TITLE Q_N;
 PARAMETER_DESCRIPTION Q_N;
 PARAMETER_TYPE NUMERIC(6,0);
 END
PARAMETER C_B;
 PARAMETER_TITLE C_B;
 PARAMETER_DESCRIPTION C_B;
 PARAMETER_TYPE NUMERIC(6,0);
 END
PARAMETER C_S;
 PARAMETER_TITLE C_S;
 PARAMETER_DESCRIPTION C_S;
 PARAMETER_TYPE NUMERIC(6,0);
 END
PARAMETER P_V;
 PARAMETER_TITLE P_V;
 PARAMETER_DESCRIPTION P_V;
 PARAMETER_TYPE NUMERIC(8,2);
 END
PARAMETER TC;
 PARAMETER_TITLE TC;
 PARAMETER_DESCRIPTION TC;
 PARAMETER_TYPE STRING(8);  
 END
PARAMETER TS;
 PARAMETER_TITLE TS;
 PARAMETER_DESCRIPTION TS;
 PARAMETER_TYPE STRING(10);  
 END
PARAMETER TF;
 PARAMETER_TITLE TF;
 PARAMETER_DESCRIPTION TF;
 PARAMETER_TYPE STRING(10);  
 END
PARAMETER PR;
 PARAMETER_TITLE PR;
 PARAMETER_DESCRIPTION PR;
 PARAMETER_TYPE STRING(8);  
 END
PARAMETER NUM;
 PARAMETER_TITLE NUM;
 PARAMETER_DESCRIPTION NUM;
 PARAMETER_TYPE STRING(16);  
 END
PARAMETER QTY;
 PARAMETER_TITLE QTY;
 PARAMETER_DESCRIPTION QTY;
 PARAMETER_TYPE NUMERIC(8,0);  
 END
PARAMETER PPOZ;
 PARAMETER_TITLE PPOZ;
 PARAMETER_DESCRIPTION PPOZ;
 PARAMETER_TYPE STRING(10);  
 END
PARAMETER PRICE;
 PARAMETER_TITLE PRICE;
 PARAMETER_DESCRIPTION PRICE;
 PARAMETER_TYPE STRING(10);  
 END
PARAMETER PROFIT;
 PARAMETER_TITLE PROFIT;
 PARAMETER_DESCRIPTION PROFIT;
 PARAMETER_TYPE STRING(10);  
 END
PARAMETER VAL;
 PARAMETER_TITLE VAL;
 PARAMETER_DESCRIPTION VAL;
 PARAMETER_TYPE STRING(10);  
 END
PARAMETER COM;
 PARAMETER_TITLE COM;
 PARAMETER_DESCRIPTION COM;
 PARAMETER_TYPE STRING(10);  
 END
PARAMETER OFFER;
 PARAMETER_TITLE OFFER;
 PARAMETER_DESCRIPTION OFFER;
 PARAMETER_TYPE STRING(10);  
 END
PARAMETER BID;
 PARAMETER_TITLE BID;
 PARAMETER_DESCRIPTION BID;
 PARAMETER_TYPE STRING(10);  
 END
PARAMETER STOPLoss;
 PARAMETER_TITLE STOPLoss;
 PARAMETER_DESCRIPTION STOPLoss;
 PARAMETER_TYPE STRING(10);  
 END
PARAMETER TakeProfit;
 PARAMETER_TITLE TakeProfit;
 PARAMETER_DESCRIPTION TakeProfit;
 PARAMETER_TYPE STRING(10);  
 END
PARAMETER OFFSET;
 PARAMETER_TITLE OFFSET;
 PARAMETER_DESCRIPTION OFFSET;
 PARAMETER_TYPE STRING(4);  
 END
PARAMETER OFFSET_UNITS;
 PARAMETER_TITLE OFFSET_UNITS;
 PARAMETER_DESCRIPTION OFFSET_UNITS;
 PARAMETER_TYPE STRING(20);  
 END
PARAMETER SPREAD;
 PARAMETER_TITLE SPREAD;
 PARAMETER_DESCRIPTION SPREAD;
 PARAMETER_TYPE STRING(4);  
 END
PARAMETER SPREAD_UNITS;
 PARAMETER_TITLE SPREAD_UNITS;
 PARAMETER_DESCRIPTION SPREAD_UNITS;
 PARAMETER_TYPE STRING(20);  
 END
PARAMETER MARKET_STOP_LIMIT;
 PARAMETER_TITLE MARKET_STOP_LIMIT;
 PARAMETER_DESCRIPTION MARKET_STOP_LIMIT;
 PARAMETER_TYPE STRING(4);  
 END
PARAMETER MARKET_TAKE_PROFIT;
 PARAMETER_TITLE MARKET_TAKE_PROFIT;
 PARAMETER_DESCRIPTION MARKET_TAKE_PROFIT;
 PARAMETER_TYPE STRING(4);  
 END
PARAMETER PQ;
 PARAMETER_TITLE PQ;
 PARAMETER_DESCRIPTION PQ;
 PARAMETER_TYPE STRING(8);  
 END
PARAMETER R;
 PARAMETER_TITLE R;
 PARAMETER_DESCRIPTION R;
 PARAMETER_TYPE NUMERIC(8,2);
 END
PARAMETER S;
 PARAMETER_TITLE S;
 PARAMETER_DESCRIPTION S;
 PARAMETER_TYPE NUMERIC(8,2);
 END
PARAMETER O;
 PARAMETER_TITLE O;
 PARAMETER_DESCRIPTION O;
 PARAMETER_TYPE NUMERIC(8,2);
 END
PARAMETER H;
 PARAMETER_TITLE H;
 PARAMETER_DESCRIPTION H;
 PARAMETER_TYPE NUMERIC(8,2);
 END
PARAMETER L;
 PARAMETER_TITLE L;
 PARAMETER_DESCRIPTION L;
 PARAMETER_TYPE NUMERIC(8,2);
 END
PARAMETER C;
 PARAMETER_TITLE C;
 PARAMETER_DESCRIPTION C;
 PARAMETER_TYPE NUMERIC(8,2);
 END
PARAMETER V;
 PARAMETER_TITLE V;
 PARAMETER_DESCRIPTION V;
 PARAMETER_TYPE NUMERIC(8,0);
 END
PARAMETER BH;
 PARAMETER_TITLE BH;
 PARAMETER_DESCRIPTION BH;
 PARAMETER_TYPE NUMERIC(8,2);
 END
PARAMETER BM;
 PARAMETER_TITLE BM;
 PARAMETER_DESCRIPTION BM;
 PARAMETER_TYPE NUMERIC(8,2);
 END
PARAMETER BL;
 PARAMETER_TITLE BL;
 PARAMETER_DESCRIPTION BL;
 PARAMETER_TYPE NUMERIC(8,2);
 END
END_PORTFOLIO_EX

При использование NKQPL, мы помещаем описание таблицы в файл OWN.qpl, а в программе пишем одну строку
# OWN
Компилятор вставит описание таблицы при сборке окончательного варианта, а на начальном этапе разработки программы,  вместо 187 строк, мы должны записать всего три строки

# pathLib  C:\NK_QPILE 
# TITLE  название, описание
… тело программы
# OWN

Примечание: компилятор NKQPL распространяется на коммерческой основе.

This entry was posted on Воскресенье, 1 апреля, 2012 at 19:12 and is filed under QUIK и QPILE, торговые роботы (МТС), Фондовый рынок. You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.

Comments are closed at this time.