Автор: Николай Камынин

Ниже приведена программа портфеля,  позволяющая проверить запаздывание времени последней сделки отностительно времени сервера QUIK и времени Вашего компьютера

PORTFOLIO_EX TEST_NK;
DESCRIPTION Тест_Времени_Сбербанк 22.03.2010;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST FIRMID;
PROGRAM
‘—————
st=CREATE_MAP()
T1=SUBSTR (get_value(GET_DATETIME(), «Datetime»),11,8) ‘текущее время’
st=SET_VALUE(st,»T1″,T1)
T3=0+GET_VALUE(GET_PARAM_EX(«EQBR», «SBER03», «TIME»),»param_value») ‘ время сделки’
T5=GET_INFO_PARAM («SERVERTIME») ‘время сервера
st=SET_VALUE(st,»T5″,T5)
T3=SUBSTR (T3,0,2) & «:» & SUBSTR (T3,2,2) & «:» & SUBSTR (T3, 4,2) ‘переводим в HH:MM:SS
st=SET_VALUE(st,»T3″,T3)
T4=60*(60*SUBSTR (T3,0,2) + SUBSTR (T3, 3,2))+ SUBSTR (T3, 6,2)
T2=60*(60*SUBSTR (T1,0,2) + SUBSTR (T1, 3,2))+ SUBSTR (T1, 6,2)
T6=60*(60*SUBSTR (T5,0,2) + SUBSTR (T5, 3,2))+ SUBSTR (T5, 6,2)
T7=T6-T4 ‘разность сервера и сделки
st=SET_VALUE(st,»T7″,T7)
T8=T2-T4 ‘разность текущего и сделки
st=SET_VALUE(st,»T8″,T8)
T9=T2-T6 ‘разность текущего и сервера
st=SET_VALUE(st,»T9″,T9)
ADD_ITEM(1,st)

END_PROGRAM
PARAMETER T1;
PARAMETER_TITLE TimePC;
PARAMETER_DESCRIPTION TimePC;
PARAMETER_TYPE STRING(8);
END
PARAMETER T3;
PARAMETER_TITLE TimeLast;
PARAMETER_DESCRIPTION TimeLast;
PARAMETER_TYPE STRING(8);
END
PARAMETER T5;
PARAMETER_TITLE TimeSERV;
PARAMETER_DESCRIPTION TimeServer;
PARAMETER_TYPE STRING(8);
END
PARAMETER T7;
PARAMETER_TITLE SERV_Last;
PARAMETER_DESCRIPTION Server_Last;
PARAMETER_TYPE NUMERIC(3,0);
END
PARAMETER T8;
PARAMETER_TITLE PC_Last;
PARAMETER_DESCRIPTION PC_Last;
PARAMETER_TYPE NUMERIC(3,0);
END
PARAMETER T9;
PARAMETER_TITLE PC_SERV;
PARAMETER_DESCRIPTION PC_SERV;
PARAMETER_TYPE NUMERIC(3,0);
END
END_PORTFOLIO_EX

Как выясинлось в процессе исследований и консультаций с разработчиками QUIK  дял более стабильной работы надо снять флаг «Запрашивать данные раз в …»   в НАСТРОЙКА/ОСНОВНЫЕ/ПОЛУЧЕНИЕ ДАННЫХ

При этом получаются следующие данные, например, по акции Сбербанка сегодня:

TimePC TimeLast TimeSERV SERV_Last PC_Last PC_SERV
14:58:07 14:58:07 14:58:06 -1 0 1
14:58:05 14:58:05 14:58:05 0 0 0
14:58:04 14:58:04 14:58:04 0 0 0
14:58:03 14:58:02 14:58:03 1 1 0
14:58:02 14:58:02 14:58:02 0 0 0
14:58:01 14:57:54 14:58:01 7 7 0
14:58:00 14:57:54 14:58:00 6 6 0
14:57:59 14:57:54 14:57:59 5 5 0
14:57:58 14:57:54 14:57:58 4 4 0
14:57:57 14:57:54 14:57:57 3 3 0
14:57:56 14:57:54 14:57:56 2 2 0
14:57:55 14:57:54 14:57:55 1 1 0
14:57:54 14:57:54 14:57:54 0 0 0
14:57:53 14:57:52 14:57:53 1 1 0
14:57:52 14:57:52 14:57:52 0 0 0
14:57:51 14:57:49 14:57:51 2 2 0
14:57:50 14:57:49 14:57:50 1 1 0
14:57:49 14:57:47 14:57:49 2 2 0
14:57:48 14:57:47 14:57:48 1 1 0
14:57:47 14:57:47 14:57:47 0 0 0
14:57:46 14:57:42 14:57:45 3 4 1
14:57:45 14:57:42 14:57:44 2 3 1
14:57:44 14:57:42 14:57:43 1 2 1
14:57:43 14:57:42 14:57:42 0 1 1
14:57:42 14:57:40 14:57:42 2 2 0
14:57:41 14:57:40 14:57:41 1 1 0
14:57:40 14:57:40 14:57:40 0 0 0
14:57:39 14:57:38 14:57:38 0 1 1
14:57:38 14:57:38 14:57:37 -1 0 1
14:57:37 14:57:34 14:57:37 3 3 0
14:57:36 14:57:34 14:57:35 1 2 1
14:57:35 14:57:34 14:57:35 1 1 0
14:57:34 14:57:34 14:57:33 -1 0 1
14:57:33 14:57:31 14:57:33 2 2 0
14:57:32 14:57:31 14:57:32 1 1 0
14:57:31 14:57:31 14:57:30 -1 0 1
14:57:30 14:57:29 14:57:30 1 1 0
14:57:29 14:57:29 14:57:29 0 0 0
14:57:28 14:57:27 14:57:27 0 1 1
14:57:27 14:57:26 14:57:26 0 1 1
14:57:26 14:57:26 14:57:25 -1 0 1
14:57:25 14:57:25 14:57:24 -1 0 1
14:57:24 14:57:24 14:57:23 -1 0 1
14:57:23 14:57:22 14:57:22 0 1 1
14:57:22 14:57:21 14:57:21 0 1 1
14:57:21 14:57:20 14:57:20 0 1 1
14:57:20 14:57:18 14:57:19 1 2 1
14:57:19 14:57:18 14:57:18 0 1 1
14:57:17 14:57:17 14:57:17 0 0 0
14:57:16 14:57:16 14:57:16 0 0 0
14:57:15 14:57:15 14:57:15 0 0 0
14:57:14 14:57:14 14:57:14 0 0 0
14:57:13 14:57:10 14:57:13 3 3 0
14:57:12 14:57:10 14:57:12 2 2 0
14:57:11 14:57:10 14:57:10 0 1 1
14:57:10 14:57:10 14:57:10 0 0 0
14:57:09 14:57:09 14:57:09 0 0 0
14:57:08 14:57:07 14:57:08 1 1 0
14:57:07 14:57:07 14:57:07 0 0 0
14:57:06 14:56:59 14:57:05 6 7 1
14:57:05 14:56:59 14:57:05 6 6 0
14:57:04 14:56:59 14:57:04 5 5 0
14:57:03 14:56:59 14:57:03 4 4 0
14:57:02 14:56:59 14:57:01 2 3 1
14:57:01 14:56:59 14:57:01 2 2 0
14:57:00 14:56:59 14:57:00 1 1 0
14:56:59 14:56:59 14:56:59 0 0 0

Tags: , ,

Автор: Николай Камынин

Чтобы не запускать каждый день QUIK в рукопашную, я написал скрипт для AutoIt.

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

 Ниже приведен текст скрипта:

 ; AutoIt Version: 3.0

; Language:       Русский

; Platform:       Windows

; Author:         Николай Камынин(kamnik@mail.ru)

#include <Date.au3>

$TimeStart=»10:05:00″  ‘ это время запуска QUIK

$NowDate=_NowCalcDate()

$iYear=StringMid( $NowDate,1,4)

$iMonth=StringMid( $NowDate,6,2)

$iDay=StringMid( $NowDate,9,2)

$DateToWeek=_DateToDayOfWeek ( $iYear, $iMonth, $iDay )

IF (($DateToWeek>1) and (7>$DateToWeek)) Then

$DiffToSecStrat=_DateDiff(‘s’, _NowCalc(), «» & $NowDate & » » & $TimeStart)

Sleep($DiffToSecStrat*1000)

Run(«Здесь_указать путь_вызова QUIK», » Здесь_указать_рабочий_каталог_QUIK»)

WinWaitActive(«Идентификация пользователя»)

Send(«здесь_надо_написать_свой_логин»)

Send(«{TAB}»)

Send(«Здесь_можно_записать_пароль «) ; Если пароль вводить руками, то этот и следующий оператор убрать

Send(«{ENTER}»)

 Если поместите этот скрипт в АВТОЗАГРУЗКУ, то QUIK будет автоматически запускаться в рабочие дни недели

Если у Вас на столе имеется ярлык для запуска QUIK, то из него можно узнать  путь_вызова QUIK» и рабочий_каталог_QUIK

Tags: ,

Автор: Николай Камынин

Написание торговых роботов относится к области создания программ обработки данных в реальном времени.

Отличительной особенностью таких программ является повторное исполнение программы для каждого отсчета(сделки).  Время исполнения в идеале не должно превышать времени до следующей сделки.  

Характерной особенностью таких программ является стремление, по возможности, не использовать циклы и не накапливать поступающие данные, а обрабатывать их в темпе поступления. 

Поэтому такие программы строятся как последовательность условных операторов.

 Максимальное быстродействие я реализую следующим образом:

 Основное тело программы представляет собой условный оператор проверки времени последней сделки, если время не обновилось — новой сделки нет, ничего не делается.

Если время изменилось, то читается значение свечи и индикаторов для времени последней  сделки.

 Эти значения записываются в коллекции свечей и индикаторов.

Таким образом, сделка порождает выполнение последовательности действий:

1) Чтение свечи и запись в коллекцию свечи;

2) Чтение индикатора 1 и запись в коллекцию 1-го индикатора;

3)Чтение индикатора N-го и запись в коллекцию N-го индикатора;

После этого исполняются условные операторы для выдачи торговых операций:

4)Проверка условий исполнения торговых операций;

5)Если условия верны, послать торговую операцию;

6) Проверить состояние счета и позиций

 На этом исполнение программы заканчивается до прихода информации о новой сделке.

На этом исполнение программы заканчивается до прихода информации о новой сделке.

Таким образом, торговые роботы,  использующие для принятия решений графики функций, имеют одинаковую структуру.  При этом при исполнении п.1-3 производится контроль неизменности интервала времени графика, если интервал изменился ( пользователь QUIK решил его переключить), то программа очищает историю и загружает ее заново c новым интервалом. Таким образом, исключается возможность ошибки принятия решений при разном масштабе времени в исторических данных)

За исключением п.4, который представляет собой также набор условных операторов.

Tags: ,