Как получить значение предыдущей свечи на QPILE

14 октября, 2010

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

При разработке программ для автоматической торговли в QUIK на языке QPILE возникает задача определения момента времени появления новой свечи и получение значений предыдущей.

Обычно , именно в момент закрытия свечи и открытия новой и принимается решение о выставлении или снятии заявки.

Привожу фрагмент программы показывающий, как определить в программе данный момент для графика с ИДЕНТИФИКАТОРом   RIZO:

~~~~~~~~~~~~~~~~~~~~~~

NEW_GLOBAL(«CANDLE_OLD»,»   «) ‘предыдущая свеча

FLAG=0  ‘ флаг новой свечи

X_=GET_VALUE(GET_DATETIME (),»DATETIME»)

Date=SUBSTR (X_,6,4) & SUBSTR (X_, 3,2) & SUBSTR (X_, 0,2) ‘текущая дата

Time=SUBSTR (X_,11,2) & SUBSTR (X_, 14,2) & SUBSTR (X_, 17,2) ‘текущее время

CANDLE = (GET_CANDLE_EX («RIZO», Date, Time)

IF (GET_VALUE (CANDLE,»TIME»)-GET_VALUE (CANDLE_OLD,»TIME») <>0)  ‘свеча новая

FLAG=1     ‘ флаг равен 1 в момент появления новой свечи на графике

END IF

‘ добавить в конце программы

IF (FLAG=1)  ‘запоминаем новую свечу

CANDLE_OLD= CANDLE

END IF

~~~~~~~~~~~~~~~~~~~~~~~~

Кроме того на графике выберите “параметры графика”   — можно правой кнопкой мышки

И в  закладке ДОПОЛНИТЕЛЬНО в окне ИДЕНТИФИКАТОР запишите   RIZO

На основе данного фрагмента не трудно  написать программу получения свечи по любому номеру, считая от последней.

Внимание: В тексте программы использованы русские кавычки »

при копировании в QPILE замените их на обычные.

Успехов в учебе

БИБЛИОТЕКА ФУНКЦИЙ QPILE для роботов QUIK

7 октября, 2010

‘——-Бибилиотека функций работа с файлами——12—-

FUNC READ_DATA_IN(_ROB) ‘ чтение исходных данных из файла _ROB -путь к файлу’

‘пример:

‘SECCODE:SBER03/имяГрафика:Заголовок/имяГрафика2:Заголовок

‘ исходные данные в файле записываются так:

‘<имя_парамера> <:> <его_значение>

‘ один параметр в одной строке

‘ ; — коментарий до конца строки

‘ </> -разделитеть кода бумаги и имен графиков

‘<:> -разделитель имени и значения

‘~~~~~~~~~~~~~~~~

‘  для каждого инструмента храним SecCode,ClassCode,Цифра — идентификаторы графиков,начиная с 0

FUNC DEL_F_SPACE(text) ‘удаляем пробелы в начале и в конце строки ‘

FUNC GET_STR(text,_J) ‘удаляем текст от начала строки включая позицию _J

FUNC FIND_S(text,s) ‘поиск позиции символа S

FUNC GET_IND(S) ‘ формируем массив имен индикаторов

FUNC SERV_INFO() ‘ параметры связи

FUNC SET_Sec(s,CCL) ‘формируем массив для инструмента по его коду

‘——-Бибилиотека функций для торговли——14—-

‘ Price — цена. Если «0», то рыночная

‘ SecCode — инструмент, SecCodeF — для фьючерсов

‘ ClassCode — код класса,  ClassCodeF — для фьючерсов

‘ Quantity — количество лотов

‘—————————————

FUNC SET_BUY ( ) ‘Подготовка транзакция для покупки

FUNC SET_SELL ( ) ‘Подготовка транзакция для продажи

FUNC SEND_order ( ) ‘Отправка ордера

FUNC TYPE ()

FUNC TYPE_F ()

FUNC BUY ()

FUNC SELL ()

FUNC BUY_F () ‘Покупка на FORTS’

FUNC SELL_F () ‘Продажа на FORTS’

FUNC STOP_LOSS() ‘Ex_Date=»GTC»- до отмены  или «TODAY»-до конца сессии

FUNC TAKE_PROFIT() ‘Ex_Date=»GTC»- до отмены  или «TODAY»-до конца сессии

FUNC STOP()

FUNC KILL_STOP_LOSS()

FUNC KILL_order () ‘снять ордер с номером OrderNumber

‘——-Бибилиотека функций управления—-31——

FUNC SES_COUNT() ‘ продолжение сессии

FUNC SES_INIT() ‘ начало сессии

FUNC SetTable(Color,MaxCount) ‘отображение в программир таблице содержимого стакана

FUNC RS(n) ‘расчет уровней сопротивления и поддержки

FUNC R_() ‘расчет уровней сопротивления

FUNC S_() ‘расчет уровней поддержки

FUNC LBL(Y,DA,TM,TOP,TEXT,R,G,B,HINT)   ‘BOTTOM

FUNC Int_S()

FUNC Int_OCHL(n)

FUNC Int_RS()

FUNC iMAX_H(n,M) ‘Поиск номера бара максимального значения High M-номер  до которого ищется

FUNC iMIN_H(n,M) ‘Поиск минимального значения High

FUNC iMAX_C(n,M) ‘Поиск номера бара максимального значения Close M-номер  до которого ищется

FUNC iMIN_C(n,M) ‘Поиск номера бара максимального значения Close M-номер  до которого ищется

FUNC iMIN_L(n,M) ‘Поиск минимального значения Low

FUNC iMAX_L(n,M) ‘Поиск максимального значения Low

FUNC iMAX_R(n,M) ‘Поиск номера бара максимального значения High M-номер  до которого ищется

FUNC iMIN_S(n,M) ‘Поиск минимального значения Low

FUNC iMIN_R(n,M) ‘Поиск номера бара максимального значения High M-номер  до которого ищется

FUNC iMAX_S(n,M) ‘Поиск минимального значения Low

FUNC COUNT_Candle(T,D) ‘Поиск номера свечи по дате и времени result — номер отсчета свечи с указанной датой и временем

FUNC BODYHIGH(K)

FUNC BODYLOW(K)

FUNC BODY(k)

FUNC SHADOWHIGH(k)

FUNC SHADOWLOW(k)

FUNC SHADOW(k)

FUNC WHITE_COUNT(K) ‘число белых свечей начиная с «K»‘

FUNC COUNT_WHITE(K) ‘число белых свечей начиная с «K»‘

FUNC COUNT_BLACK(K) ‘число черных свечей начиная с «K»‘

‘FUNC iBeginUpR(K) ‘номер бара начала роста R

FUNC FINE_OCHLD() ‘вычисление параметров дня

FUNC SET_OCHLD() ‘вычисление параметров дня

FUNC  SR_H0(STR,H0)

FUNC SS_L0(STR,L0)

FUNC COR_RS(n)

‘——-Бибилиотека функций ДЛЯ РАБОТЫ С ГРАФИКАМИ—-4——

‘ DateTrade -текущая дата торгов

‘ DAY_FIRST — дата первой слева свечи в истории

‘ Count_CANDLES — счетчик свечей

‘ Start_TIME — время начала сессии

‘ Time_Last — время последней сделки

‘  TIMECUR —

FUNC FIND_FIRST_HISTORY() ‘поиск начала истории

‘ коллекция позволяет сохранить 8192 свечи по 7 значений объем примерно 300 Кбайт по 10 байт на число

‘ лучше хранить числа Запись 25 сек, чтение 2.5 сек.

‘~~~~~~~~~

FUNC CandleR() ‘чтение свечи из графика начиная от начала истории

FUNC SET()

FUNC INSERT()

‘——БИБЛИОТЕКА ФУНКЦИЙ РАБОТЫ с МЕТКАМИ—-8

FUNC WRITE_Label_GRAF(DATEBar,TEMP,STR,R,G,B,BMP,TEXT) ‘работа с метками DATEBAR и TEMP — дата и время метки

FUNC SET_Label_GRAF(IS,Y,TEXT) ‘обновляем метку если изменилось ее положение IS — номер метки

FUNC CREAT_Label_GRAF( ) ‘создание меток в начале работы создаем все необходимые метки

FUNC CREAT_Label_GRAF2( ) ‘создание меток для работы внутри дня

FUNC SET_Label_GRAF2(IS,Y,TEXT,_T,_D) ‘обновляем метку если изменилось ее положение IS — номер метки

FUNC SET_Label_GRAF2R(IS,Y,TEXT,_T,_D) ‘обновляем метку если изменилось ее положение IS — номер метки

FUNC SET_Label_TIME(IS,T) ‘обновляем метку если изменилось ее положение IS — номер метки

‘——-Бибилиотека функций работы с котировками —4——-

‘ ClassCode,SecCode -код класса и бумаги соответсвенно

FUNC WORK_QUOTES(ClassCode,SecCode) ‘работа с таблицей котировок

FUNC WORK_BID()  ‘ в этой функции размещаются функции работы с котировками на покупку

FUNC WORK_OFFER()  ‘ в этой функции размещаются функции работы с котировками на продажу

FUNC QUOTES_WORK_1()  ‘ поиск забора

‘——-Бибилиотека таблиц——8——

FUNC PORTF()                          ‘клиентский портфель

FUNC DEPO()  ‘бумаги

FUNC MONEY()  ‘ деньги

FUNC TABL_ORDERS( ) ‘чтение таблицы заявок

FUNC TABL_STOP_ORDERS() ‘чтение таблицы стоп-заявок

FUNC TABL_TRADES() ‘чтение таблицы сделок

FUNC TABL_FUTURES_HOLDINGS() ‘чтение позиции по лимит.счетам (фьючерсы)

FUNC TABL_FUTURES_LIMITS() ‘чтение ограничений по клиентским счетам(фьючерсы)

‘ORDERS Заявки

‘STOP_ORDERS Стоп заявки

‘TRADES Сделки

‘ALL_TRADES Обезличенные сделки

‘MONEY_LIMITS Лимиты по денежным средствам

‘DEPO_LIMITS Лимиты по бумагам

‘FUTURES_CLIENT_HOLDINGS Позиции по клиентским счетам (фьючерсы)

‘FUTURES_CLIENT_LIMITS Ограничения по клиентским счетам (фьючерсы)

‘NEG_DEALS Таблица заявок на внебиржевые сделки

‘NEGOTIATION_TRADES  Таблица сделок для исполнения

‘NEG_DEAL_REPORTS Таблица заявок-отчетов на сделки РПС

‘POSITIONS Таблица денежных позиций

‘FIRM_HOLDING  Текущие позиции по бумагам

‘ACCOUNT_BALANCE  Текущие позиции по счетам

‘OWN Таблица, создаваемая при расчете программы

FUNC HHMMSS_TO_MIN_SEC(HMS_ ) ‘перевод времени из HHMMSS в минуты MIN2 и секунды SEC2

‘~~~~~~~~~~~~~~~~~~~~~

FUNC SEC_TO_HHMMSS(SEC2)                     ‘перевод времени из секунд в формат HHMMSS

FUNC SUB_TT(_T1,_T2)                                   ‘T1-T2   находит разность времени в минутах формат

FUNC DAT()

FUNC DAT_CORRECT()  ‘ коррекция даты до начала сессии

FUNC INC_D(D_)          ‘ — инкремент  даты на 1

FUNC INC_D_2()           ‘DateGr — инкремент  даты на 1

FUNC INC_T_2()           ‘инкремент время HHMMSS

FUNC INC_TD_2()         ‘инкремент время HHMMSS

FUNC TIME_LAST()

FUNC DEC_D(D_)         ‘декремент даты на 1

FUNC DEC_D_2()         ‘декремент даты на 1

FUNC DEC_T_2()          ‘декремент время HHMMSS

FUNC DEC_TD_2()        ‘декремент время HHMMSS

FUNC time_Start_End()             ‘определение времени начала и завершения сессии

FUNC HistoryDate()       ‘определение самого дальнего доступного торгового дня

FUNC LastDate(TL)                   ‘определение дня последней сессии

FUNC time_last_Candle()                                  ‘определение времени последней свечи на графике

FUNC NORM_T(_t)

FUNC time_graf()                                  ‘определение интервала графика

FUNC TIME_()                                      ‘ формирование переменной time для графика

FUNC INIT()

FUNC SAVE_COL(_C,_M,_I)

‘~~~~~~~~~~~~~~~~~~~ чтение индикаторов

FUNC READ_IND(D_,T_)

FUNC ICHIMOKU(D_,T_) ‘чтение ICHIMOKU

FUNC SAVE_ICHIMOKU(J)

FUNC INSERT_DATA(Int,_D,_t)             ‘запись данных в коллекцию

FUNC SET_DATA(Int,_D,_t)                  ‘запись данных в коллекцию

FUNC READ(_C,Int)                  ‘чтение данных из коллекцию

FUNC READ_DATA(Int)             ‘чтение данных из коллекцию

FUNC CLOSE(Int)

FUNC OPEN(Int)

FUNC LONG(Int)

FUNC SHORT(Int)

FUNC high(Int)

FUNC LOW(Int)

FUNC volume(Int)

FUNC time(Int)

FUNC date(Int)

FUNC Tenkan(Int)

FUNC Kijun(Int)

FUNC Senkou_Span_1(Int)

FUNC Senkou_Span_2(Int)

FUNC Chinkou(Int)

‘FUNC RS(U,NU,Int) ‘для формирования сигнала

FUNC RS_K(U,NU,Int,_X) ‘для формирования сигнала U значение R или S NU -номер бара, Int -номер отсчета, _X -номер экстремума считая с первого после отсчета Int

FUNC rez(Int)

FUNC sup(Int)

FUNC READ_R(Int)

FUNC READ_S(Int)

FUNC COHLV()             ‘чтение данных из ассоц массива

FUNC INIT_DATA()                    ‘очистка массивов сданными

FUNC SET_CANDLES()                                    ‘чтение свечей из графика в коллекцию

FUNC FRACTAL(Jjj) ‘чтение фрактала

FUNC SIGNAL_(JJ) ‘формируем сигналы

FUNC SIG(JJ,_C,_M) ‘запись коллекции

FUNC iMAX(X,n,M) ‘Поиск номера бара максимального значения коллекции X M-номер  до которого ищется

FUNC iMIN_H(X,n,M) ‘Поиск минимального значения High

FUNC sign(D) ‘вычисление знака числа

FUNC BODYHIGH(K)

FUNC BODYLOW(K)

FUNC BODY(k)

FUNC SHADOWHIGH(k)

FUNC SHADOWLOW(k)

FUNC SHADOW(k)

FUNC WHITE_COUNT(K) ‘число белых свечей начиная с «K»‘

FUNC COUNT_WHITE(K) ‘число белых свечей начиная с «K»‘

FUNC COUNT_BLACK(K) ‘число черных свечей начиная с «K»‘

FUNC FINE_OCHLD() ‘вычисление параметров дня

FUNC INIT_DATA_SEC()                       ‘инициализация данных для инструменита под номером Count_1

FUNC SAVE_DATA_SEC()                   ‘сохранение данных для бумаги под номером Count_1

‘~~~~~~~~~~~~59 функции~~

FUNC GET_DATA() ‘инициализация данных инструмента под номером Count_1

FUNC SAVE_DATE(j) ‘сохраненяем данных для даты DATE

FUNC SAVE_CANDLE(J) ‘сохранение данных для CANDLE

FUNC SAVE_DTIME(J,I) ‘сохранение данных для времени DTIME

FUNC SAVE_SESSION(J)         ‘сохраненяем данных торгов

FUNC SAVE_SEC(J) ‘сохранение данных инструмента под номером Count_1

FUNC SAVE_DATA() ‘сохранение данных инструмента под номером Count_1

FUNC GET_DATA() ‘инициализация данных инструмента под номером Count_1

FUNC GET_SEC() ‘инициализация данных инструмента под номером Count_1