![]() |
||||||||||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||||||||||
![]() |
![]() |
![]() |
||||||||||||||||||||||||||||||||||||||||||||
![]() |
Функция TradeQuik() Для вывода сигнала МТС функция TradeQuik() использует возможность Квика периодически просматривать содержимое файла транзакций, читать строки приказов на проведение торговых операций и передавать их в торговую систему. Подобную систему постановки заявок поддерживает и NetInvestor (NiClient). Формат вызова функции TradeQuik приведен ниже:
ExtFml( "msx_ksr.TradeQuik", ShortLong[], "Account", "ClientCode", [Limit|L|Market|M], Price[], Quantity[] , Ident);
где:
Для вывода приказов необходимо к существующей торговой стратегии добавить функцию TradeQuik():
{this simplest strategy combines two
crosses of two moving averages with different periods for demonstration
purpose only}
BS1:=If(Mov(C, 3, S) > Mov(C,
10, S), 1, -1);
В файл инициализации msx_ksr.ini должны быть включены дополнительные секции, необходимые для правильного работы функции.Cекции файла msx_ksr.ini, относящиеся к функции TradeQuik
[TradeQuik]
В секции [TradeQuik] определен общий номер счета и общий код клиента и шаблон строки заявки, которые будут использованы по умолчанию для любой транзакции, а также полный путь к файлу, в который будут записываться приказы для Квика. Эти параметры можно переопределить для каждого базового ряда котировок. Параметр TransId автоматически увеличивается каждый раз на единицу при постановке очередной заявки и служит уникальным номером ее идентификации. Для каждой акции или другого актива, по которому предполагается проведение автоматизированной подачи заявок в msx_ksr.ini файле должна быть определена секция (она создается автоматически при первом вызове функции TradeQuik() ) имеющая вид:
[Drive:\Folder1\Folder2\...\Symbol(P)], где: Drive:\Folder1\Folder2\...\ - полный путь к базе данных Метастока; Symbol - символическое имя базового ряда котировок; (P) - периодичность базового ряда котировок: T для тиковой базы, число от 1 до 60 - для внутридневных баров и одна из букв D,W,M,Q,Y для итоговых данных дня, недели, месяца, квартала или года соответственно. DateTime_XXX_YYY_NNN - день и время последнего обработанного функцией бара базового ряда котировок для клиента YYY по торговому счету XXX с идентификатором торговой стратегии NNN создается автоматически.
Торговый счет, код клиента, шаблон строки заявки и путь к файлу могут быть заданы независимо в нескольких местах. Высший приоритет имеет торговый счет и код клиента заданные как параметры "Account", "ClientCode" при вызове функции TradeQuik(). Если параметры заданы пустой строкой, то ищутся соответствующие пары Account=, ClientCode= ,а также File= и Template= в файле инициализации в секции для текущего базового ряда котировок [Drive:\Folder1\Folder2\...\Symbol(P)] и, если и там параметры не определены, то последним проверяется общая секция [TradeQuik]. Также должны быть определены ClassCode= и SecCode= в секции для базового ряда. Если торговый счет или код клиента или путь к файлу нигде не определены, то функция TradeQuik() возвращает ошибку с соответствующим сообщением, как показано на рисунке ниже, и такая заявка не передается в файл транзакций. Вносить изменения в файл инициализации можно только при выгруженном Метастоке. Template - эта шаблон, по которому будет формироваться строка заявки, записываемая в файл транзакций и имеющая макроопределениями в тех местах, где необходимо подставить фактическое значение параметра. Это необходимо для изменения вида строки при работе с различными типами торговых систем. При форматировании нецелого значения цены в качестве децимального разделителя будет использован символ, определенный в соответствующем разделе операционной системы "Язык и стандарты" на панели управления. Для Квика нижеприведенный шаблон будет записан в файл инициализации при первом запуске Dll (все в одну строку без пробелов), его можно не редактировать:
Template=TRANS_ID=%N; ACCOUNT=%A; CLIENT_CODE=%C; TYPE=%T; CLASSCODE=%M; SECCODE=%S; ACTION=NEW_ORDER; OPERATION=%O; PRICE=%P; QUANTITY=%Q;
Для НетИнвестора шаблон надо будет вставить вручную в файл инициализации в секцию [TradeQuik] или в конкретную секцию символа базового ряда в зависимости от рынка, Для фьючерсов он может выглядеть
так: [TradeQuik]
Для фондовой секции ММВБ - акции 1-го уровня, например EESR, разрешить исполнение по разным ценам, тип ввода - цена секции могут выглядеть так:
[TradeQuik]
При этом непосредственно перед выводом строки заявки в файл транзакций DLL будет просматривать шаблон и при нахождении макроопределения заменять его на фактическое значение параметра, переданное в DLL Метастоком или найденное в файле инициализации.
Пример строки заявки собранной из шаблона для Квика.
TRANS_ID=107; ACCOUNT=SPBFUT00o00; CLIENT_CODE=Metastock; TYPE=L; CLASSCODE=SPBFUT; SECCODE=EERU-12.03; ACTION=NEW_ORDER; OPERATION=S; PRICE=7674; QUANTITY=2; Тоже самое, но для NetInvestor (NiClient) для рынка фьючерсов:
107; SPBFUT00o00; EERU-12.03; S; 2; 7674; L; 001; PSFU; ; ; ; FutAddOrder
Шаблон можно упростить, оставив минимально необходимые макроопределения и заменив удаленные поля на постоянные значения прямо в шаблоне. Таким образом для клиента, работающего самостоятельно с одним счетом, одним клиентским кодом и одной торговой системой, достаточно определить эти пары Account= и Client_Code=, File= и Template= в общей секции [TradeQuik]. Брокеру, создающему разные МТС для разных клиентов на нескольких счетах необходимо задавать и счет и клиентский код как параметры формулы. На одном графике могут быть сразу несколько формул, транслирующих приказы в Квик и если эти формулы отличаются хотя бы одним из параметров: счета и/или кода клиента и/или идентификатора МТС - они будут торговаться отдельно. Для работы в разных торговых
системах необходимо определять свой путь к файлу транзакций
File= в секции для базового ряда котировок.Запись строки
заявки в файл транзакций производится только если параметр
Ident имеет значение больше нуля.
В результате применения формулы TradeQuik к данным на приведенном выше графике в файл транзакций будут записываться следующие строки:
1.При использовании шаблона для Quik:
TRANS_ID=90; ACCOUNT=001; CLIENT_CODE=007; TYPE=M; CLASSCODE=EQBR;
2. При использовании шаблона для NetInvestor (NiClient, фондовая секция ММВБ (акции 1-го уровня, исполнение по разным ценам, тип ввода - цена, децимальный разделитель - точка):
90; 001; S; L; S; ; P; EQBR; EESR; 6.677; 4; 007/; ORDER
Особенности применения формулы TradeQuik, связанные с формированием транзакций: 1. Если индикатор, содержащий функцию TradeQuik() бросается на график первый раз и соответствующая секция не существует, то в файле инициализации будет создана секция базового ряда вида [Drive:\Folder1\Folder2\...\Symbol(P)], а в этой секции - параметр DateTime_XXX_YYY_NNN, а вот параметры ClassCode= и SecCode= надо будет задать вручную. 2. Метасток вызывает функцию из DLL при необходимости обновить график. Такое обновление может быть вызвано как вновь пришедшими данными так и действием пользователя, например изменением размера окна Метастока. В общем виде надо считать, что вызов функции происходит асинхронно, но не реже одного раза за интервал базового ряда данных. Для исключения появления ложных транзакций DLL каждый раз записывает в файл инициализации в параметр DateTime_XXX_YYY_NNN максимальную дату и время, обнаруженные в ряду котировок базового ряда ( время последнего бара), а при следующем запуске игнорирует все торговые сигналы, сгенерированные до этого времени. 3. Транзакции передаются в торговую систему только, если они сформировались на последнем баре и этот бар обрабатывается функцией первый раз. Если по каким-то причинам данные в Метасток поступают пачками сразу из нескольких баров и на этих барах, кроме самого последнего, МТС сформировала торговые сигналы, то они будут полностью игнорированы ввиду невозможности исполнения на момент времени соответствующего бара. 4. Метасток записывает в базу время окончания интервала поэтому в стратегии, вырабатывающей торговые сигналы необходимо использовать только цену открытия, которая будет неизменна даже если включен режим "live bars". Применение других полей текущего бара - High, Low, Close чревато пропуском реального сигнала. Можно использовать Ref(C,-1) которое при внутридневной торговле практически равно текущему Open. 5. Термин "базовый ряд котировок" использован для подчеркивания того факта, что каждый график в Метастоке однозначно привязан к одной из последовательностей котировок в базе, даже, если на этот же график брошены другие ряды котировок на основе которых создана МТС транслирующая сигналы в файл транзакций. Этот базовый ряд определяет минимальное и максимальное значения на оси времени Х. 6. Какого либо внутреннего кумулятивного учета количества лотов в открытой позиции не ведется. 7. Имя символа базового ряда котировок не должно содержать коды символов '[', ']', '\', ';' которые используются в INI-файлах в качестве служебных.
Применение функции TradeQuick при создании МТС подробно описано в статье Артема Зверева "Робот на Metastock" журнал Интернет трейдинг #1 февраль 2010г. |
![]() |
||||||||||||||||||||||||||||||||||||||||||||
![]() |
Замечания и предложения можно оставить на странице обратной связи. |
![]() |
||||||||||||||||||||||||||||||||||||||||||||
![]() |
![]() |
![]() |
||||||||||||||||||||||||||||||||||||||||||||
Обновлено: February 21, 2011 |