Блог им. Toshkin

Робот под квик для подачи заявки по времени / уровню

По просьбам трудящихся выкладываю свою рабочую лошадку:

4-я строка FIRMS_LIST — «фирма», например из «позиций по клиентским счетам».
9-я ClientCode — «код клиента», например из «таблицы заявок».
10-я Depo — «торговый счет», например из «позиций по клиентским счетам».
11-я ClassCodeList — «код класса бумаги» для FInstrument из «таблицы заявок».
14-я Instrument — «код бумаги» от цены которой зависит выставление заявки.
15-я FInstrument — «код бумаги», по которой выставляется заявка.
21-я Operation «B» — покупка, «S» — продажа.
22 Volume — количество лотов в заявке.
23, 24, 25 — время для заявки по времени.
26 Delta — если 0, заявка пойдет по цене последней сделки на момент срабатывания, если нет — то с указанным сдвигом по цене.
27 PriceControl — если 0 — заявка по времени, -1 — заявка, если цена Instrument падает ниже PCLevel, 1 — заявка, если цена Instrument поднимается выше PCLevel.
28 PCLevel — уровень для PriceControl.

Цена Instrument берется из часовой диаграммы (закрытие предыдущей свечки). Создаем в квике диаграмму на инструмент, интервал 1 час. Правой кнопкой мыши на свечку => «Редактировать» => «Дополнительно», здесь указываем «Идентификатор». Такое же значение присваиваем переменной Instrument.

Последний параметр «Выход» = 0 пока условие для выставления заявки не выполнено, 1 — после выставления заявки.
После выставления заявки, дабы избежать всяких случайностей / неприятностей рекомендую кликнуть правой кнопкой мыши по табличке робота и выбрать «приостановить расчет», после чего закрыть табличку.

Сохраняем в текстовый файл с расширением .qpl
В квике идем в «Сервисы» => «QPILE скрипты...»
нажимаем «Добавить», выбираем файл, жмем «Загрузить локально» и «Создать таблицу», выбираем параметры, которые хотим видеть в таблице.

Для желающих погрузиться в эту тему советую скачать описание языка qpile отсюда: arqatech.com/upload/iblock/04f/Doc725.zip


PORTFOLIO_EX Time_public;
DESCRIPTION Time_public;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST 00000;

PROGRAM

' ОБЪЯВЛЯЕМ КОНСТАНТЫ
  ClientCode = ""
  Depo = ""
  ClassCodeList = «SPBFUT»

'=============================================
  Instrument = «SBER»
  FInstrument = «RIH9»
'=============================================

'=============================================
'==============   Параметры   ================
'=============================================
  Operation = «B»
  Volume = 10
  XHour = 14
  XMin = 40
  XSec = 0
  Delta = 0
  PriceControl = 0   ' -1 — <, 0 — без контроля, 1 — >
  PCLevel = 120.3
'=============================================

  Data = GET_DATETIME()
  Hour = GET_VALUE(Data,«HOUR») + 0
  Min = GET_VALUE(Data,«MIN»)+0
  Sec = GET_VALUE(Data,«SEC»)+0

  Output = CREATE_MAP()

' Не первый расчет
  IF GET_NUMBER_OF(«OWN») > 0

    OwnRow = GET_ITEM(«OWN»,1)

    FClose = GET_PARAM(ClassCodeList,FInstrument,«LAST») + 0

    Output = SET_VALUE(Output,«p_close»,FClose)

    Ext = GET_VALUE(OwnRow,«p_ext») + 0

    IF (Ext = 0) AND (FClose <> 0) AND (Hour = XHour) AND (Min = XMin) AND (Sec >= XSec)
      IF PriceControl = 0
        IF Operation = «S»
          FClose = FClose — Delta
        ELSE
          FClose = FClose + Delta
        END IF
        fNewOrder(Operation,Volume,FClose)
        Output = SET_VALUE(Output,«p_ext»,1)
      ELSE
        Year = GET_VALUE(Data,«YEAR») + 0
        Month = GET_VALUE(Data,«MONTH») + 0
        Day = GET_VALUE(Data,«DAY») + 0
        TextData = Year & fFormDat(Month) & fFormDat(Day)
        TextTime = fFormDat(Hour — 1) & fFormDat(Min) & «00»

        CandlePrice = GET_CANDLE_EX(Instrument,TextData,TextTime)
        Close = GET_VALUE(GET_COLLECTION_ITEM(GET_VALUE(CandlePrice,«LINES»),0),«CLOSE») + 0

        IF ((PriceControl = — 1) AND (Close < PCLevel)) OR ((PriceControl = 1) AND (Close > PCLevel))
          IF Operation = «S»
            FClose = FClose — Delta
          ELSE
            FClose = FClose + Delta
          END IF
          fNewOrder(Operation,Volume,FClose)
          Output = SET_VALUE(Output,«p_ext»,1)
        END IF
      END IF
    END IF

    Output = SET_VALUE(Output,«p_time»,fFormDat(XHour) & ":" & fFormDat(XMin) & ":" & fFormDat(XSec))
'    Output = SET_VALUE(Output,«p_time»,fFormDat(Hour) & ":" & fFormDat(Min) & ":" & fFormDat(Sec))
    MODIFY_ITEM(1,Output)

' Первый расчет (пропускаем из-за глюка — уходит в себя при старте без данных)
  ELSE
    Output = SET_VALUE(Output,«p_ext»,0)
    Output = SET_VALUE(Output,«p_oper»,Operation)
    Output = SET_VALUE(Output,«p_volume»,Volume)
    Output = SET_VALUE(Output,«p_time»,fFormDat(XHour) & ":" & fFormDat(XMin) & ":" & fFormDat(XSec))
'    Output = SET_VALUE(Output,«p_time»,fFormDat(Hour) & ":" & fFormDat(Min) & ":" & fFormDat(Sec))
    IF PriceControl <> 0
      Output = SET_VALUE(Output,«p_level»,PCLevel)
    END IF
    ADD_ITEM(1,Output)
  END IF


' ===========================================
' =====   ФУНКЦИЯ ФОРМАТИРОВАНИЯ ДАТЫ   =====
' ===========================================
FUNC fFormDat(d)
  IF LEN(d) < 2
    d = «0» & d
  END IF
  RESULT = d
END FUNC
' ===========================================


' ==============================================================
' ===========   ФУНКЦИЯ ДЛЯ ВЫСТАВЛЕНИЯ ЗАЯВКИ   ===============
' ==============================================================
FUNC fNewOrder(pOper,pQuant,pPrice)
  TransID = GET_NUMBER_OF(«ORDERS»)+1
  NEW_GLOBAL(«TransParams»,"")
  NEW_GLOBAL(«TransResult»,"")
  TransParams = ""
  TransParams = SET_VALUE(TransParams,«TRANS_ID»,TransID & "")
  TransParams = SET_VALUE(TransParams,«ACTION»,«NEW_ORDER»)
  TransParams = SET_VALUE(TransParams,«CLASSCODE»,ClassCodeList)
  TransParams = SET_VALUE(TransParams,«SECCODE»,FInstrument)
  TransParams = SET_VALUE(TransParams,«ACCOUNT»,Depo)
  TransParams = SET_VALUE(TransParams,«OPERATION»,pOper)
  TransParams = SET_VALUE(TransParams,«PRICE»,pPrice & "")
  TransParams = SET_VALUE(TransParams,«QUANTITY»,pQuant & "")
  TransParams = SET_VALUE(TransParams,«CLIENT_CODE»,ClientCode)
  TransParams = SET_VALUE(TransParams,«TYPE»,«L»)
  TransResult = SEND_TRANSACTION(30,TransParams)
  Result = TransID
END FUNC
' ==============================================================


END_PROGRAM

PARAMETER p_level;
PARAMETER_TITLE Уровень;
PARAMETER_DESCRIPTION Условный уровень выхода;
PARAMETER_TYPE NUMERIC(3,2);
END

PARAMETER p_time;
PARAMETER_TITLE Время;
PARAMETER_DESCRIPTION Время сигнала;
PARAMETER_TYPE STRING(8);
END

PARAMETER p_close;
PARAMETER_TITLE Закрытие;
PARAMETER_DESCRIPTION Цена закрытия свечи;
PARAMETER_TYPE NUMERIC(3,2);
END

PARAMETER p_oper;
PARAMETER_TITLE Операция;
PARAMETER_DESCRIPTION Операция;
PARAMETER_TYPE STRING(4);
END

PARAMETER p_volume;
PARAMETER_TITLE Объём;
PARAMETER_DESCRIPTION Объём;
PARAMETER_TYPE NUMERIC(4,0);
END

PARAMETER p_ext;
PARAMETER_TITLE Выход;
PARAMETER_DESCRIPTION Выход;
PARAMETER_TYPE NUMERIC(1,0);
END

END_PORTFOLIO_EX

  • обсудить на форуме:
  • QUIK
| ★32
8 комментариев
Будет работать под любой версией квика?
avatar
Не знаю, попробуйте. А вы квик не обновляете по религиозным соображениям?
avatar
Антон О., ага, бывает, по меркурианским.) Иногда раздражают глюки после обновления.
avatar
скажите, а у квика дельта есть??
avatar
Дарина Фролова, не понял вас
avatar
Антон О., не пытайся понять блондинку))
avatar

Читайте на SMART-LAB:
Фото
Через каких брокеров покупатели участвуют в наших размещениях ВДО?
👉 Наш канал в MAX 👈 👉 Чат Иволги в MAX 👈 В инфографике приведены размещения ВДО, организатором которых выступала ИК Иволга...
Инвестиции без спешки: торгуем в выходные
Алексей Девятов Рынок часто движется импульсами, тем важнее оценивать активы без спешки, не отвлекаясь на инфошум. Для этого отлично подходят...
Фото
BoE получает аргументы для жесткости, пока доллар теряет импульс
Доллар в пятницу оказался под широким давлением: индекс USD снизился примерно на 0,25%, поскольку рынок ухватился за сообщения о возможном...
Фото
Обновляем стратегию 2026: год трудный, что изменилось, и в каком направлении мы движемся?
Квартальное обновление стратегии. Стратегия Mozgovik была представлена 17 января: https://smart-lab.ru/mobile/topic/1254157/ Что остается в...

теги блога Антон О.

....все тэги



UPDONW
Новый дизайн