Algoritamski jezik QPILE za programiranje trgovačkih robota za QUIK.
Roboti za trgovanje mogu biti napisani na određenom jeziku, slično programskom kodu. QPILE je jedan od njih, članak će razmotriti ovaj jezik, uporediti QPILE i
LUA jezike , a takođe dati primere robota na ovom jeziku.
- Opće informacije o QPILE
- Rad sa stolom
- QPILE konstrukcije
- Tipovi podataka
- Izrazi
- Funkcije
- Programi za otklanjanje grešaka
- QPILE ili LUA?
- Kako kreirati trgovačkog robota na QPILE?
- Roboti za trgovanje na QPILE-u – gotova rješenja
- Robot s pokretnim prosjekom
- Kalkulator položaja N. Moroshkin
- Volumen filter
- Opcije Grci
- TRIX trgovački robot za QUIK
- M4 preprocesor
Opće informacije o QPILE
QPILE je skraćenica koja je skraćenica za QUIK programabilni interfejs i logičko okruženje.
Ovo je niz naredbi koje tumači QUIK radna stanica. Uglavnom se koristi za izračunavanje cijene portfelja vrijednosnih papira. Jezik se takođe koristi za:
- dinamičko preračunavanje cijene imovine klijenata na desktopu brokera iu njihovim portfeljima. U potonjem slučaju, njihova ukupna cijena se također preračunava;
- pronalaženje indikatora koji nedostaju korištenjem vlastitih algoritama i podataka za marginalno kreditiranje;
- razvoj prave strategije trgovanja.
Jezik opisuje strukturu tabele: postavljanje kolona i redova, formule. U potonjem se za proračun mogu koristiti matematičke operacije, varijable, podaci iz drugih tabela. Programski kod učitan sa QUIK servera ili sa diska korisnika obrađuje tumač jezika, koji izračunava vrijednosti u formulama. Tabele jednog programa imaju jedan izvor podataka, ali se proračuni ne dupliraju i ne utiču na efikasnost sistema. Kada radite sa QUIK tabelama, tabele na QPILE imaju standardne funkcije. QUIK na radnom mjestu je opremljen QPILE kodom za otklanjanje grešaka. https://articles.opexflow.com/software-trading/torgovyj-terminal-quik.htm Jezik vam omogućava da opišete nove tabele sa datom strukturom, označite ćelije sa određenim vrednostima, izračunate polja na osnovu matematičkih i logičkih izraza. Korisnik će primati obavještenja u obliku zvučnog signala ili tekstualne poruke. Tabele na QPILE mogu se uređivati, štampati, kopirati, izvoziti preko ODBC i DDE servera. Početni podaci su iz QUIK tabela:
- transakcije, uključujući za izvršenje i bezlične;
- nalozi, uključujući stop naloge, za vanberzansko trgovanje i nalozi – izvještaji o poslovima poravnanja;
- “portfolio klijenata”, “kupovina/prodaja”
- podaci o pozicijama učesnika po novcu, trgovačkim računima, instrumentima.
Tabele zasnovane na QPILE ne mogu se kopirati u tekstualni fajl preko kontekstnog menija i eksportovati u sisteme tehničke analize, a grafikoni se ne mogu razvijati na osnovu njih. Tablice zasnovane na QPILE ne mogu se filtrirati ili sortirati.
Rad sa stolom
Da biste učitali programski kod, potrebno je da izaberete servisni meni, zatim QPILE skripte. Možete koristiti i kombinaciju Ctrl+F11. Nakon toga trebate kliknuti na “Dodaj” i odabrati željeni fajl. Ima ekstenziju .qpl i njegovo ime će se pojaviti na listi dostupnih skripti.
Ukoliko dođe do greške u programu, sistem će u “Prozoru poruka” poslati obaveštenje koje će sadržati naziv neispravne datoteke i broj reda sa greškom. Ako u datoteci nisu pronađeni kvarovi, u poljima će biti naznačeni sljedeći podaci:
- naziv tabele;
- broj kolona i klijenata;
- lista identifikatora i klijenata;
- listu parametara i izvorni kod datoteke.
Dugme “Lokalno preuzmi” omogućit će vam da preuzmete tabelu iz datoteke, a “Pošalji na server” će poslati program na server tako da mu svi korisnici mogu pristupiti. Da biste kreirali tabelu, kliknite na Kreiraj tabelu. U “Dostupne skripte” izaberite program koji treba da izvršite, podesite broj redova kroz “Filter klijenata”, odredite potrebne kolone i njihov redosled.
Pauziranje i nastavak proračuna, ponovno pokretanje proračuna iu režimu za otklanjanje grešaka, čuvanje opisa u fajlu, demonstracija formule i parametri skripte dostupni su u kontekstualnom meniju.
QPILE konstrukcije
Tipovi podataka
- String – string.
- Double je broj u pokretnom zarezu.
- Kolekcija – zbirka.
- Mapa – asocijativni niz – niz parova koji vam omogućava da dobijete informacije po ključu.
Izrazi
Primjenjuju se aritmetičke operacije sabiranja, oduzimanja, množenja, dijeljenja. Koriste se i logički izrazi “i”, “ili”, jednako, više, manje, nejednakosti, uslovna konstrukcija “ako … onda …”.
Funkcije
Funkcije se mogu nalaziti bilo gdje u programu i imati različita imena. Ukupno je dostupno 18 grupa matematičkih funkcija i funkcija za dobivanje vrijednosti tablica i parametara, asocijativnih nizova, popisa tablica i drugih zadataka. Prvi razred:
- Matematičke funkcije koje vam omogućavaju da vratite vrijednost sinusa, kosinusa, tangenta, kotangensa argumenta, izračunate eksponent argumenta, generirate slučajni broj itd.
- Opće naredbe : NEW_GLOBAL za inicijalizaciju globalne varijable i MESSAGE za otvaranje poruka.
Funkcije za rad sa:
- Zbirke objekata (Zbirka) . Omogućuju vam da kreirate novu kolekciju, vratite potreban broj elemenata, zamijenite ili ubacite željene vrijednosti.
- Asocijativni nizovi (MAP) . Pomoć u kreiranju i upravljanju nizom.
- Datoteke – rad sa tekstualnim datotekama, održavanje log-log programa. Ime datoteke može sadržavati putanju do nje.
- Strings .
- Grafovi . Funkcije GET_CANDLE za pristup podacima o svijeći i GET_CANDLE EX za vraćanje asocijativnog niza.
- Aplikacije . Kreiranje naloga i njihovo slanje u sistem trgovanja.
- Oznake . Njihova konstrukcija i ugradnja na grafikonu. Dodavanje, brisanje jedne ili svih oznaka, dobivanje i postavljanje parametara za određenu oznaku.
Tu su i funkcije za:
- Za pristup redovima proizvoljnih QUIK tabela i listama dostupnih parametara . Pristup podacima tablice radnog mjesta. Ovo uključuje GET_ITEM za vraćanje MAP-a i GET_NUMBER_OF za vraćanje broja unosa.
- Za rad sa programabilnom tablicom . Ove komande rade na VLASTITOJ tabeli. Čitljiv je standardnim funkcijama iz prethodnog paragrafa i ovim funkcijama. Ova grupa uključuje komande za dodavanje, izmjenu i brisanje reda s indeksom i potpuno brisanje VLASTITE tablice.
Za dobivanje vrijednosti koristite:
- Tabele tekućih trgovina . Dobijanje parametara informacija o razmjeni korištenjem naredbi GET_PARAM (_EX).
- Prozori za citate . Dobijanje vrijednosti kotacija instrumenata.
- Tabele pozicija po instrumentima i novcu . Dobijanje podataka o klijentu, firmi, instrumentu, depo računu po šifri.
Servisne funkcije – vraćanje datuma trenutne trgovačke sesije, asocijativnog niza, trenutnog datuma i vremena, određivanje stanja veze, prekidanje načina izračunavanja.
Programi za otklanjanje grešaka
Korak po korak kontrola rada programa vrši se u prozoru “Debug”. Otvara se iz kontekstnog menija “Pokreni proračun u režimu za otklanjanje grešaka”. Može se otvoriti i naredbom breakpoint(), a programska linija će biti istaknuta crvenom bojom. Prozor sadrži polja sa programskim kodom i vrijednostima varijabli. Na dnu prozora nalaze se dugmad “Sljedeći korak”, “Nastavi izvršenje”, “Zaustavi proračun”. Pritiskom na F5 nastavit će se izvršavanje programa, kombinacija Shift + F5 će zaustaviti otklanjanje grešaka, tipka F10 će usmjeriti na sljedeći red.
QPILE ili LUA?
LUA je novi programski jezik za kreiranje trgovačkih robota. Kao i QPILE, implementiran je u QUIK terminal. https://articles.opexflow.com/programming/lua.htm Stranica posvećena razvoju trgovačkih robota za trgovanje pokazuje prednosti LUA jezika u odnosu na QPILE. Dakle, može funkcionirati kao neprevedena skripta i bajtkod, opremljen programskim alatima i objektno orijentiranim programskim mehanizmima. Objekti napisani na drugim programskim jezicima mogu se povezati sa LUA programima. LUA pruža 8 tipova podataka, uključujući metatabele. LUA jezik je višenitni, brz, a transakcije i terminalni događaji su asinhroni. LUA je češći od QPILE-a i za njega su napisana mnoga proširenja.
QPILE jezik je sada zastario. Stručnjaci na forumima preporučuju korištenje LUA. Iako se korisni i efikasni programi i dalje koriste.
Međutim, QPILE jezik je jednostavan u poređenju sa LUA, tako da ako nemate iskustva u programiranju, bolje je izabrati QPILE. Na ovom jeziku možete napisati jednostavnog robota ako ne morate izvoditi složene proračune.
Kako kreirati trgovačkog robota na QPILE?
Da biste kreirali trgovačkog savjetnika, trebat će vam sljedeći programi:
- ITS Quik.
- Notepad++ uređivač koda.
- Vodič za QPILE.
- XML dodatak za detekciju koda u Notepad++.
Preuzmite i instalirajte ove programe. Omogućite sintaksu jezika tako što ćete postaviti userDefineLang.xml na putanju C:\Users\User\ AppData\Roaming\Notepad++\
Prvo, napravimo sljedeću strategiju trgovanja. Skript bi trebao izračunati Hi i Low za zadnjih nekoliko svijeća svake minute, provjeriti trenutnu cijenu instrumenta. Pozicija se otvara u traženom smjeru ako cijena instrumenta dostigne maksimalnu ili minimalnu vrijednost za period. Kada se primi signal za kratko, duga pozicija se automatski zatvara. Robot koristi GAZP alat, vremenski okvir je postavljen na 1 min. Hi-low mjerna dubina je postavljena na 5 svijeća. Za ulazak u Long, postavlja se pravilo i presek trenutne cene maksimalne vrednosti za period. Robot će ući u Short ako trenutna cijena prijeđe minimalnu vrijednost za ovih 5 svijeća. Napišite blok koda u Notepad++ sa osnovnim postavkama i datumom i vremenom servera. Ovaj kod je prikazan na slici ispod.
Prva 4 reda koda čine zaglavlje programa. Između redova 6 i 44 nalazi se tijelo programa, koje sadrži sadržaj robota. Redovi 7 – 12 sadrže korisnička podešavanja koja uključuju šifre instrumenta, grupe i klijenta, broj računa na MICEX. Ove vrijednosti se ne mijenjaju tokom izvršavanja programa. Redovi 13 – 16 su početne vrijednosti varijabli. Oni će biti vraćeni na nulu na svakom prolazu iteracije. Redovi 17 – 21 sadrže indikaciju za korištenje datuma i vremena servera. Ovi podaci se prosljeđuju funkciji DATETIME i pretvaraju u tekstualni format. Linije 22 – 29 šalju primljene podatke u tabelu. Kod mora biti sačuvan i qpl ekstenzija mora biti specificirana.
Otvorite program u QUIK-u pritiskom na Ctrl+F10 i odabirom generirane qpl datoteke. Koristite kombinaciju Ctrl+F11 da otvorite prozor “Rad s portfeljima” i postavite period izračunavanja portfelja na 5 minuta. Pritisnite Ctrl+F12 da postavite kolone za prikaz u tabeli. Na slici je prikazan rezultat rada robota.
Dodajmo još nekoliko funkcija i uslova našem programu.
Blok “Korisničke postavke” dopunjen je varijablama BROJ i INTERVAL, koje će se koristiti u funkciji dobijanja zadnjih N traka. Funkcija DATETIME postavlja datum i vrijeme servera, a iz nje se pozivaju trenutne funkcije datuma i vremena CURDATE i CURTIME. Trenutno vrijeme se konvertuje u broj u redu 24. Red 26 postavlja vrijeme za pokretanje algoritma od 10:00:01 do 18:40:00 UTC.
Najčešće se indikatori, oscilatori, statistički proračuni izračunavaju po N posljednjih N svijeća grafikona. QPILE nema funkciju za prikupljanje broja svijeća prije N perioda kao takav, ali postoji funkcija GET_CANDLE koja pristupa svijećama na grafikonu po datumu i vremenu u tekstualnom formatu. Naš kod sadrži funkciju za dobivanje posljednjih N barova OHLC(). Kreira kolekciju s parametrima posljednjih svijeća ugniježđenih u listu COLLECTION. Program provjerava vrijednost INTERVAL, a ako ne spada u raspon 0…60, prikazuje se poruka da vrijednost ne odgovara dozvoljenom rasponu. U redu 88 kreira se kolekcija MAP sa svijećama. FOR petlja koja ispituje grafikon do potrebne dubine sa INTERVAL korakom od nove do stare svijeće. U redu 90, nakon što je ciklus deklarisan, robot se vraća interval unazad. Kada dobijete svijeću sa GET_CANDLE, smjestite ga u kolekciju BARLIST koristeći funkciju INSERT_COLLECTION_TEAM. Kao rezultat rada naredbe OHLC(), BARLIST se dopunjava posljednjim svijećama sa instrument karte u količini BROJ. Broj elemenata u kolekciji se zahtijeva naredbom GET_COLLECTION_COUNT() i izvještava promjenjiva BARCOUNT. Serverski datum, vrijeme, vrijednosti varijabli INSTRUMENT i BARCOUNT se izvještavaju pomoću funkcije SET_VALUE() u OUTPUT. Ovaj niz je kreiran naredbom CREATE_MAP(). Podaci padaju u prilagođenu tabelu, što se može vidjeti na fotografiji ispod. vrijednosti varijabli INSTRUMENT i BARCOUNT se izvještavaju pomoću funkcije SET_VALUE() u OUTPUT. Ovaj niz je kreiran naredbom CREATE_MAP(). Podaci padaju u prilagođenu tabelu, što se može vidjeti na fotografiji ispod. vrijednosti varijabli INSTRUMENT i BARCOUNT se izvještavaju pomoću funkcije SET_VALUE() u OUTPUT. Ovaj niz je kreiran naredbom CREATE_MAP(). Podaci padaju u prilagođenu tabelu, što se može vidjeti na fotografiji ispod.
Roboti za trgovanje na QPILE-u – gotova rješenja
Robot s pokretnim prosjekom
Demo robot nije pogodan za stvarno trgovanje.
Robot uključuje 5 parametara. Vrijednosti identifikatora DATE, TIME, PRICE su postavljene na nivo 30. Identifikatori MOVING i TP su postavljeni na nultu preciznost. Kôd robota na pokretnom prosjeku napisan pod QPILE:
Kalkulator položaja N. Moroshkin
Program za izračunavanje nivoa maksimalnog dozvoljenog povlačenja i cilja za duge i kratke pozicije po tekućim cenama traženja i ponude. Nivoi se izračunavaju za 2 vrijednosti volumena unosa pozicije. Robot pronalazi dozvoljeni volumen pozicije prilikom dodjeljivanja stop naloga u jednom koraku od cijene otvaranja uz izračunavanje otvaranja pozicije u smjeru rasta šipke. Pronađeni nivoi se unose u prozor terminala, koji se naknadno odražavaju na grafikonu cena. Transakcije su fiksne za dati instrument. Ako je pozicija otvorena, robot počinje da izračunava njene parametre. Ovisno o promjeni pozicije, dodijeljeni nalozi se prilagođavaju.
Volumen filter
Portfolio robot za izračunavanje aritmetičke sredine zapremine svijeća i poređenje sa prosječnim proizvodom po X koeficijentu. Radi korektno sa ucrtanim grafikonima u odabranom vremenskom periodu.
Opcije Grci
Portfolio za izračunavanje i prikazivanje “grčkih” opcija. Razlikuje se od metode Black-Showers.
TRIX trgovački robot za QUIK
Program je baziran na TRIX indikatoru. Kada se indikator zatvori iznad nulte linije, navedenog nivoa, robot zauzima Long poziciju. Poziciju zatvaraju Take Profit, Stop Loss ili trailing stop.
M4 preprocesor
Program za rad sa QPILE i Lua. Uključuje arhive s izvršnim datotekama, dokumentaciju i DLL datoteke s raščlanjivanjem regularnog izraza. Da biste koristili program, morate raspakovati izvršne datoteke i postaviti regexp2 na C:\Windows putanju. Lekcije o QPILE-u za QUIK: https://youtu.be/vMTXwDUujpI Instaliranje skripte na QPILE u Quik terminal: https://youtu.be/0B7qL8Svh7I Odjeljak o githubu koji opisuje upotrebu QPILE algoritamskog jezika ugrađenog u QUIK sistemska radna stanica nalazi se na linku – https://euvgub.github.io/quik_user_manual/ch8.html. QPILE je zastarjeli jezik, ali prilično jednostavan i dostupan čak i početnicima. Roboti za trgovanje i programi koji su se dugo dokazali nastavljaju raditi na tome. Međutim, za složenije zadatke bolje je koristiti LUA.
0к