Język algorytmiczny QPILE do programowania robotów handlowych dla QUIK

Программирование

Algorytmiczny język QPILE do programowania robotów handlowych dla QUIK.
Roboty handlowe mogą być napisane w określonym języku, podobnym do kodu programu. QPILE jest jednym z nich, w tym artykule rozważymy ten język, porównamy języki QPILE i
LUA , a także podamy przykłady robotów w tym języku.

Ogólne informacje o QPILE

QPILE to skrót oznaczający QUIK Programmable Interface i Logic Environment.

Jest to seria poleceń interpretowanych przez stację roboczą QUIK. Służy głównie do obliczania ceny portfeli papierów wartościowych. Język jest również używany do:

  • dynamiczne przeliczanie cen aktywów klientów na pulpicie brokera oraz w ich portfelach. W tym drugim przypadku przeliczana jest również ich łączna cena;
  • znajdowanie brakujących wskaźników za pomocą własnych algorytmów i danych do kredytu pod zastaw;
  • opracowanie odpowiedniej strategii handlowej.

Język opisuje strukturę tabeli: wyznaczenie kolumn i wierszy, formuły. W tych ostatnich do obliczeń można wykorzystać operacje matematyczne, zmienne, dane z innych tabel. Kod programu ładowany z serwera QUIK lub z dysku użytkownika przetwarzany jest przez interpreter języka, który oblicza wartości we wzorach. Tabele jednego programu mają jedno źródło danych, ale obliczenia nie są duplikowane i nie wpływają na wydajność systemu. Podczas pracy z tabelami QUIK, tabele w QPILE mają standardowe funkcje. QUIK w miejscu pracy wyposażony jest w debugger kodu QPILE. https://articles.opexflow.com/software-trading/torgovyj-terminal-quik.htm Język pozwoli opisywać nowe tabele o zadanej strukturze, podświetlać komórki o określonych wartościach, obliczać pola na podstawie wyrażeń matematycznych i logicznych. Użytkownik otrzyma powiadomienia w formie sygnału dźwiękowego lub wiadomości tekstowej. Tabele na QPILE można edytować, drukować, kopiować, eksportować przez serwer ODBC i DDE. Początkowe dane pochodzą z tabel QUIK:

  • transakcje, w tym egzekucyjne i bezosobowe;
  • zlecenia, w tym zlecenia stop, dla transakcji pozagiełdowych i zleceń – raporty dla transakcji w rozliczeniach;
  • „portfel klienta”, „kup/sprzedaj”
  • dane z pozycji uczestnika według środków pieniężnych, kont handlowych, instrumentów.

Tabele oparte na QPILE nie mogą być kopiowane do pliku tekstowego poprzez menu kontekstowe i eksportowane do systemów analizy technicznej, a wykresów nie można na ich podstawie tworzyć. Tabele oparte na QPILE nie mogą być filtrowane ani sortowane.

Praca ze stołem

Aby załadować kod programu, musisz wybrać menu usług, a następnie skrypty QPILE. Możesz także użyć kombinacji Ctrl+F11. Po kliknięciu przycisku „Dodaj” i wybraniu żądanego pliku. Posiada rozszerzenie .qpl, a jego nazwa pojawi się na liście Dostępne skrypty.
Język algorytmiczny QPILE do programowania robotów handlowych dla QUIKJeśli w programie wystąpi błąd, system wyśle ​​powiadomienie w „Oknie wiadomości”, które będzie zawierało nazwę uszkodzonego pliku oraz numer wiersza z błędem. Jeżeli w pliku nie zostaną znalezione żadne błędy, w polach zostaną wskazane następujące dane:

  • Nazwa tabeli;
  • liczba kolumn i klientów;
  • lista identyfikatorów i klientów;
  • listę parametrów i kod źródłowy pliku.

Język algorytmiczny QPILE do programowania robotów handlowych dla QUIKPrzycisk „Pobierz lokalnie” pozwoli Ci pobrać tabelę z pliku, a „Wyślij na serwer” wyśle ​​program na serwer, aby wszyscy użytkownicy mieli do niego dostęp. Aby utworzyć tabelę, kliknij Utwórz tabelę. W „Dostępnych skryptach” wybierz program, który chcesz uruchomić, ustaw liczbę wierszy poprzez „Filtr klienta”, zdefiniuj wymagane kolumny i ich kolejność.
Język algorytmiczny QPILE do programowania robotów handlowych dla QUIKWstrzymywanie i wznawianie obliczeń, ponowne uruchamianie obliczeń oraz w trybie debugowania, zapisywanie opisu do pliku, prezentacja formuły oraz parametry skryptu są dostępne w menu kontekstowym.

Konstrukcje QPILE

Typy danych

  • Ciąg – ciąg.
  • Double to liczba zmiennoprzecinkowa.
  • Kolekcja – kolekcja.
  • Mapa – tablica asocjacyjna – sekwencja par, która pozwala uzyskać informacje według klucza.

Wyrażenia

Stosowane są operacje arytmetyczne dodawania, odejmowania, mnożenia, dzielenia. Stosowane są również wyrażenia logiczne „i”, „lub”, równa się, mniej, więcej, nierówności, konstrukcja warunkowa „jeśli… to…”.

Funkcje

Funkcje mogą znajdować się w dowolnym miejscu w programie i mieć różne nazwy. Łącznie dostępnych jest 18 grup funkcji i funkcji matematycznych do uzyskania wartości tabel i parametrów, tablic asocjacyjnych, listy tabel i innych zadań. Pierwsza klasa:

  1. Funkcje matematyczne pozwalające na zwrócenie wartości sinusa, cosinusa, tangensa, cotangensa argumentu, obliczenie wykładnika argumentu, wygenerowanie liczby losowej itp.
  2. Polecenia ogólne : NEW_GLOBAL do inicjalizacji zmiennej globalnej i MESSAGE do otwierania wiadomości.

Funkcje do pracy z:

  • Kolekcje obiektów (Kolekcja) . Pozwalają stworzyć nową kolekcję, zwrócić wymaganą liczbę elementów, podmienić lub wstawić żądane wartości.
  • Tablice asocjacyjne (MAP) . Pomoc w tworzeniu i zarządzaniu tablicą.
  • Pliki – praca z plikami tekstowymi, prowadzenie log-logu programu. Nazwa pliku może zawierać ścieżkę do niego.
  • Ciągi .
  • Wykresy . Funkcje GET_CANDLE, aby uzyskać dostęp do danych świec i GET_CANDLE EX, aby zwrócić tablicę asocjacyjną.
  • Aplikacje . Tworzenie zleceń i wysyłanie ich do systemu transakcyjnego.
  • Tagi . Ich budowa i montaż na wykresie. Dodawanie, usuwanie jednej lub wszystkich etykiet, pobieranie i ustawianie parametrów dla konkretnej etykiety.

Dostępne są również funkcje:

  1. Dostęp do wierszy dowolnych tabel QUIK i list dostępnych parametrów . Dostęp do danych tabeli miejsca pracy. Obejmują one GET_ITEM, aby zwrócić MAP i GET_NUMBER_OF, aby zwrócić liczbę wpisów.
  2. Do pracy z programowalnym stołem . Te polecenia działają na tablicy OWN. Jest odczytywany przez standardowe funkcje z poprzedniego akapitu oraz przez te funkcje. Ta grupa zawiera polecenia dodawania, modyfikowania i usuwania wiersza z indeksem oraz całkowitego wyczyszczenia tabeli OWN.

Aby uzyskać wartości, użyj:

  1. Tabele aktualnych transakcji . Pobieranie parametrów wymiany informacji za pomocą poleceń GET_PARAM (_EX).
  2. Cytuj okna . Uzyskanie wartości notowań instrumentów.
  3. Tabele pozycji według instrumentów i pieniędzy . Pozyskiwanie danych o kliencie, firmie, instrumencie, rachunku depozytowym według kodu.

Funkcje serwisowe – zwracanie daty bieżącej sesji giełdowej, serii asocjacyjnej, aktualnej daty i czasu, określanie stanu połączenia, przerywanie trybu naliczania.

Programy do debugowania

Kontrola krok po kroku nad działaniem programu odbywa się w oknie „Debugowanie”. Jest otwierany z menu kontekstowego „Rozpocznij obliczenia w trybie debugowania”. Można go również otworzyć za pomocą polecenia breakpoint(), a wiersz programu zostanie podświetlony na czerwono. Okno zawiera pola z kodem programu i wartościami zmiennych. W dolnej części okna znajdują się przyciski „Następny krok”, „Kontynuuj wykonywanie”, „Zatrzymaj obliczenia”. Naciśnięcie F5 spowoduje kontynuację wykonywania programu, kombinacja Shift + F5 zatrzyma debugowanie, klawisz F10 przekieruje do następnej linii.

QPILE czy LUA?

LUA to nowy język programowania do tworzenia robotów handlowych. Podobnie jak QPILE, jest zaimplementowany w terminalu QUIK. https://articles.opexflow.com/programming/lua.htm Strona poświęcona rozwojowi robotów handlowych do handlu pokazuje zalety języka LUA nad QPILE. Może więc funkcjonować jako nieskompilowany skrypt i kod bajtowy, wyposażony w narzędzia programistyczne i mechanizmy programowania obiektowego. Obiekty napisane w innych językach programowania można podłączyć do programów LUA. LUA udostępnia 8 typów danych, w tym metatabele. Język LUA jest wielowątkowy, szybki, a transakcje i zdarzenia terminalowe są asynchroniczne. LUA jest bardziej powszechny niż QPILE i napisano dla niego wiele rozszerzeń.

Język QPILE jest teraz przestarzały. Eksperci na forach zalecają korzystanie z LUA. Chociaż nadal używane są przydatne i skuteczne programy.

Jednak język QPILE jest prosty w porównaniu do LUA, więc jeśli nie masz doświadczenia w programowaniu, lepiej wybrać QPILE. W tym języku możesz napisać prostego robota, jeśli nie musisz wykonywać skomplikowanych obliczeń.

Jak stworzyć robota handlowego na QPILE?

Aby stworzyć doradcę handlowego, będziesz potrzebować następujących programów:

  1. ITS Quik.
  2. Edytor kodu Notepad++.
  3. Przewodnik po QPILE.
  4. Wtyczka XML do wykrywania kodu w Notepad++.

Pobierz i zainstaluj te programy. Włącz składnię języka, umieszczając userDefineLang.xml w ścieżce C:\Users\User\AppData\Roaming\Notepad++\
Język algorytmiczny QPILE do programowania robotów handlowych dla QUIKNajpierw stwórzmy następującą strategię handlową. Skrypt powinien co minutę wyliczać Hi i Low dla ostatnich kilku świec, sprawdzać aktualną cenę instrumentu. Pozycja jest otwierana w wymaganym kierunku, jeśli cena instrumentu osiągnie maksymalną lub minimalną wartość w danym okresie. Po odebraniu sygnału o zwarciu pozycja długa jest automatycznie zamykana. Robot korzysta z narzędzia GAZP, przedział czasowy jest ustawiony na 1 min. Głębokość pomiaru hi-low jest ustawiona na 5 świec. Aby wprowadzić Long, ustawiana jest reguła i przecięcie aktualnej ceny z maksymalną wartością dla okresu. Robot wejdzie w pozycję Short, jeśli aktualna cena przekroczy minimalną wartość dla tych 5 świec. Napisz blok kodu w Notepad++ z podstawowymi ustawieniami oraz datą i godziną serwera. Ten kod pokazano na poniższym obrazku.
Język algorytmiczny QPILE do programowania robotów handlowych dla QUIKPierwsze 4 wiersze kodu tworzą nagłówek programu. Pomiędzy wierszami 6 i 44 znajduje się treść programu, która zawiera zawartość robota. Linie 7 – 12 zawierają ustawienia użytkownika, które zawierają kody instrumentu, grupy i klienta, numer konta na MICEX. Wartości te nie zmieniają się podczas wykonywania programu. Linie 13-16 to początkowe wartości zmiennych. Zostaną zresetowane do zera przy każdym przejściu iteracji. Wiersze 17 – 21 zawierają wskazanie użycia daty i czasu serwera. Dane te są przekazywane do funkcji DATETIME i konwertowane do formatu tekstowego. Linie 22 – 29 przesyłają odebrane dane do tabeli. Kod należy zapisać i podać rozszerzenie qpl.
Język algorytmiczny QPILE do programowania robotów handlowych dla QUIKOtwórz program w QUIK, naciskając Ctrl+F10 i wybierając wygenerowany plik qpl. Użyj kombinacji Ctrl+F11, aby otworzyć okno „Praca z portfelami” i ustaw okres obliczania portfela na 5 minut. Naciśnij klawisze Ctrl+F12, aby ustawić kolumny do wyświetlenia w tabeli. Zdjęcie przedstawia wynik pracy robota.
Język algorytmiczny QPILE do programowania robotów handlowych dla QUIKDodajmy do naszego programu kilka dodatkowych funkcji i warunków.
Blok „Ustawienia użytkownika” uzupełniono o zmienne NUMBER i INTERVAL, które zostaną wykorzystane w funkcji uzyskania ostatnich N słupków. Funkcja DATETIME ustawia datę i czas serwera, z którego wywoływane są aktualne funkcje daty i czasu CURDATE i CURTIME. Aktualny czas jest konwertowany na liczbę w linii 24. Linia 26 ustawia czas działania algorytmu od 10:00:01 do 18:40:00 UTC.
Język algorytmiczny QPILE do programowania robotów handlowych dla QUIK
Język algorytmiczny QPILE do programowania robotów handlowych dla QUIK
Język algorytmiczny QPILE do programowania robotów handlowych dla QUIKJęzyk algorytmiczny QPILE do programowania robotów handlowych dla QUIKNajczęściej wskaźniki, oscylatory, obliczenia statystyczne są obliczane przez ostatnie N świec wykresu. QPILE nie posiada funkcji do zbierania liczby świec N okresów temu jako takiej, ale istnieje funkcja GET_CANDLE, która uzyskuje dostęp do świec na wykresie według daty i godziny w formacie tekstowym. Nasz kod zawiera funkcję do pobrania ostatnich N słupków OHLC(). Tworzy kolekcję z parametrami ostatnich świec zagnieżdżonych w liście KOLEKCJA. Program sprawdza wartość INTERWAŁ i jeśli nie mieści się w zakresie 0…60 wyświetla się komunikat, że wartość nie odpowiada dozwolonemu zakresowi. W linii 88 tworzona jest kolekcja MAP ze świecami. Pętla FOR odpytuje wykres do wymaganej głębokości z krokiem INTERVAL od nowej świecy do starej. W linii 90, po zadeklarowaniu cyklu, robot cofa się o interwał. Kiedy dostaniesz świeczkę z GET_CANDLE, umieść go w kolekcji BARLIST za pomocą funkcji INSERT_COLLECTION_TEAM. W wyniku działania polecenia OHLC() BARLIST jest uzupełniany ostatnimi świecami z wykresu instrumentu w ilości LICZBA. Liczba elementów w kolekcji jest żądana przez polecenie GET_COLLECTION_COUNT() i zgłaszana przez zmienną BARCOUNT. Data, czas serwera, wartości zmiennych INSTRUMENT i BARCOUNT są raportowane przez funkcję SET_VALUE() w OUTPUT. Ta tablica jest tworzona przez polecenie CREATE_MAP(). Dane trafiają do tabeli niestandardowej, co widać na poniższym zdjęciu. wartości zmiennych INSTRUMENT i BARCOUNT są raportowane przez funkcję SET_VALUE() w OUTPUT. Ta tablica jest tworzona przez polecenie CREATE_MAP(). Dane trafiają do tabeli niestandardowej, co widać na poniższym zdjęciu. wartości zmiennych INSTRUMENT i BARCOUNT są raportowane przez funkcję SET_VALUE() w OUTPUT. Ta tablica jest tworzona przez polecenie CREATE_MAP(). Dane trafiają do tabeli niestandardowej, co widać na poniższym zdjęciu.
Język algorytmiczny QPILE do programowania robotów handlowych dla QUIK

Handel robotami na QPILE – gotowe rozwiązania

Ruchomy przeciętny robot

Robot demonstracyjny nie nadaje się do prawdziwego handlu.
Język algorytmiczny QPILE do programowania robotów handlowych dla QUIKRobot zawiera 5 parametrów. Wartości identyfikatorów DATE, TIME, PRICE ustawione są na poziomie 30. Identyfikatory MOVING i TP są ustawione na zerową precyzję. Kod robota na średniej ruchomej napisany pod QPILE: [galeria kolumn = „5” ids = „14896,14897,14898,14899,14900,14901,14902,14903,14904,14905,14906,14907”]

Kalkulator pozycji N. Moroszkina

Program do obliczania poziomów maksymalnego dopuszczalnego wypłaty oraz celu dla długich i krótkich pozycji przy aktualnych cenach ask i bid. Poziomy są obliczane dla 2 wartości wolumenu wejścia pozycji. Robot znajduje dopuszczalny wolumen pozycji podczas przypisywania zlecenia stop w jednym kroku od ceny otwarcia z obliczeniem otwarcia pozycji w górę słupka. Znalezione poziomy są wprowadzane do okna terminala, które są następnie odzwierciedlane na wykresie cenowym. Transakcje są stałe dla danego instrumentu. Jeśli pozycja jest otwarta, robot zaczyna obliczać jej parametry. W zależności od zmiany pozycji, przypisane zlecenia są dostosowywane.
Język algorytmiczny QPILE do programowania robotów handlowych dla QUIK
Język algorytmiczny QPILE do programowania robotów handlowych dla QUIK

Filtr objętości

Robot-portfolio do obliczania średniej arytmetycznej objętości świec i porównywania jej ze średnim iloczynem współczynnikiem X. Działa poprawnie z wykreślonymi wykresami w wybranym okresie czasu.
Język algorytmiczny QPILE do programowania robotów handlowych dla QUIK

Opcje Grecy

Portfolio do obliczania i wyświetlania „Greków” opcji. Różni się od metody Black-Showers.
Język algorytmiczny QPILE do programowania robotów handlowych dla QUIK

Robot handlowy TRIX dla QUIK

Program oparty jest na wskaźniku TRIX. Gdy wskaźnik zamyka się powyżej linii zerowej, określonego poziomu, robot zajmuje pozycję długą. Pozycja jest zamykana przez Take Profit, Stop Loss lub trailing stop.

Preprocesor M4

Program do pracy z QPILE i Lua. Obejmuje archiwa z plikami wykonywalnymi, dokumentacją i plikami DLL z analizą wyrażeń regularnych. Aby skorzystać z programu, należy rozpakować pliki wykonywalne i umieścić regexp2 w ścieżce C:\Windows. Lekcje na temat QPILE dla QUIK: https://youtu.be/vMTXwDUujpI Instalowanie skryptu na QPILE w terminalu Quik: https://youtu.be/0B7qL8Svh7I Sekcja na github opisująca użycie języka algorytmicznego QPILE wbudowanego w Stacja robocza systemu QUIK znajdująca się pod linkiem – https://euvgub.github.io/quik_user_manual/ch8.html. QPILE to przestarzały język, ale dość prosty i dostępny nawet dla początkujących traderów. Roboty handlowe i programy, które sprawdzają się przez długi czas, nadal nad tym pracują. Jednak w przypadku bardziej złożonych zadań lepiej jest użyć LUA.

info
Rate author

  1. Владимир Геннадьевич Евсеев

    Odpowiedz