Limbajul algoritmic QPILE pentru programarea roboților de tranzacționare pentru QUIK.
Roboții de tranzacționare pot fi scrisi într-un anumit limbaj, similar codului programului. QPILE este unul dintre ele, acest articol va lua în considerare această limbă, va compara limbajele QPILE și
LUA și va oferi, de asemenea, exemple de roboți în această limbă.
- Informații generale despre QPILE
- Lucrul cu o masă
- constructe QPILE
- Tipuri de date
- Expresii
- Funcții
- Programe de depanare
- QPILE sau LUA?
- Cum se creează un robot de tranzacționare pe QPILE?
- Roboți de tranzacționare pe QPILE – soluții gata făcute
- Robot mediu în mișcare
- Calculator de poziție N. Moroshkin
- Filtru de volum
- Opțiuni greci
- Robot de tranzacționare TRIX pentru QUIK
- Preprocesor M4
Informații generale despre QPILE
QPILE este o abreviere care înseamnă QUIK Programable Interface and Logic Environment.
Aceasta este o serie de comenzi interpretate de stația de lucru QUIK. Este utilizat în principal pentru a calcula prețul portofoliilor de titluri. Limbajul este folosit și pentru:
- recalcularea dinamică a prețului activelor clienților pe desktop-ul brokerului și în portofoliile acestora. În acest din urmă caz, se recalculează și prețul lor total;
- găsirea indicatorilor lipsă folosind algoritmi și date proprii pentru creditarea în marjă;
- dezvoltarea strategiei corecte de tranzacționare.
Limbajul descrie structura tabelului: numirea coloanelor și a rândurilor, formulele. În cel din urmă, operațiunile matematice, variabilele, datele din alte tabele pot fi folosite pentru calcul. Codul programului încărcat de pe serverul QUIK sau de pe discul utilizatorului este procesat de interpretul de limbă, care calculează valorile din formule. Tabelele unui program au o singură sursă de date, dar calculele nu sunt duplicate și nu afectează eficiența sistemului. Când lucrați cu tabele QUIK, tabelele de pe QPILE au funcții standard. QUIK la locul de muncă este echipat cu un depanator de cod QPILE. https://articles.opexflow.com/software-trading/torgovyj-terminal-quik.htm Limbajul vă va permite să descrieți tabele noi cu o structură dată, să evidențiați celule cu anumite valori, să calculați câmpuri pe baza expresiilor matematice și logice. Utilizatorul va primi notificări sub forma unui semnal sonor sau a unui mesaj text. Tabelele de pe QPILE pot fi editate, tipărite, copiate, exportate prin serverul ODBC și DDE. Datele inițiale sunt din tabelele QUIK:
- tranzacții, inclusiv pentru execuție și impersonale;
- ordine, inclusiv ordine stop, pentru tranzacții extrabursiere și ordine – rapoarte pentru tranzacții în tranzacții de decontare;
- „portofoliu de clienți”, „cumpărare/vânzare”
- date din pozițiile participantului pe bani, conturi de tranzacționare, instrument.
Tabelele bazate pe QPILE nu pot fi copiate într-un fișier text prin meniul contextual și exportate în sistemele de analiză tehnică, iar diagramele nu pot fi dezvoltate pe baza acestora. Tabelele bazate pe QPILE nu pot fi filtrate sau sortate.
Lucrul cu o masă
Pentru a încărca codul programului, trebuie să selectați meniul de servicii, apoi scripturile QPILE. De asemenea, puteți utiliza combinația Ctrl+F11. După ce trebuie să faceți clic pe „Adăugați” și să selectați fișierul dorit. Are o extensie .qpl și numele său va apărea în lista de Scripturi disponibile.
Dacă există o eroare în program, sistemul va efectua o notificare în „Fereastra de mesaje”, care va conține numele fișierului defect și numărul rândului cu eroarea. Dacă nu au fost găsite erori în fișier, următoarele date vor fi indicate în câmpuri:
- numele tabelului;
- numărul de coloane și clienți;
- lista de identificatori si clienti;
- lista de parametri și codul sursă al fișierului.
Butonul „Descărcare local” vă va permite să obțineți tabelul dintr-un fișier, iar „Încărcare pe server” va trimite programul către server, astfel încât toți utilizatorii să îl poată accesa. Pentru a crea un tabel, faceți clic pe Creare tabel. În „Scripturile disponibile” selectați programul pe care trebuie să îl executați, setați numărul de linii prin „Filtrul clientului”, definiți coloanele necesare și secvența acestora.
Întreruperea și reluarea calculului, reluarea calculului și în modul de depanare, salvarea descrierii într-un fișier, demonstrarea formulei și parametrii scriptului sunt disponibile în meniul contextual.
constructe QPILE
Tipuri de date
- String – șir.
- Double este un număr în virgulă mobilă.
- Colecție – o colecție.
- Hartă – o matrice asociativă – o secvență de perechi care vă permite să obțineți informații prin cheie.
Expresii
Se aplică operațiile aritmetice de adunare, scădere, înmulțire, împărțire. Sunt folosite și expresiile logice „și”, „sau”, egal, mai mult, mai puțin, inegalități, construcție condiționată „dacă … atunci …”.
Funcții
Funcțiile pot fi localizate oriunde în program și au nume diferite. În total, sunt disponibile 18 grupuri de funcții și funcții matematice pentru a obține valorile tabelelor și parametrilor, matricele asociative, o listă de tabele și alte sarcini. Clasa întâi:
- Funcții matematice care vă permit să returnați valoarea sinusului, cosinusului, tangentei, cotangentei argumentului, să calculați exponentul argumentului, să generați un număr aleator etc.
- Comenzi generale : NEW_GLOBAL pentru a inițializa o variabilă globală și MESSAGE pentru a deschide mesaje.
Funcții cu care se lucrează:
- Colecții de obiecte (Colecție) . Acestea vă permit să creați o nouă colecție, să returnați numărul necesar de elemente, să înlocuiți sau să introduceți valorile dorite.
- Matrice asociative (MAP) . Ajută la crearea și gestionarea matricei.
- Fișiere – lucrul cu fișiere text, menținerea unui jurnal al programului. Numele fișierului poate conține calea către acesta.
- Coarde .
- Grafice . Funcțiile GET_CANDLE pentru a accesa datele lumânării și GET_CANDLE EX pentru a returna o matrice asociativă.
- Aplicații . Crearea comenzilor și trimiterea lor către sistemul de tranzacționare.
- Etichete . Construcția și instalarea lor pe diagramă. Adăugarea, ștergerea uneia sau a tuturor etichetelor, obținerea și setarea parametrilor pentru o anumită etichetă.
Există și funcții pentru:
- Pentru accesarea rândurilor de tabele QUIK arbitrare și liste de parametri disponibili . Acces la datele din tabelul de la locul de muncă. Acestea includ GET_ITEM pentru a returna MAP și GET_NUMBER_OF pentru a returna numărul de intrări.
- Pentru a lucra cu un tabel programabil . Aceste comenzi operează pe tabelul PROPRIU. Este lizibil de funcțiile standard din paragraful anterior și de aceste funcții. Acest grup include comenzi pentru adăugarea, modificarea și ștergerea unui rând cu un index și ștergerea completă a tabelului PROPRIU.
Pentru a obține valori utilizați:
- Tabele de tranzacții curente . Obținerea parametrilor de schimb de informații folosind comenzile GET_PARAM (_EX).
- Ferestre de citate . Obținerea valorilor cotațiilor instrumentului.
- Tabele de poziții pe instrumente și bani . Obținerea datelor despre un client, firmă, instrument, cont depo prin cod.
Funcții de serviciu – returnarea datei sesiunii de tranzacționare curente, serie asociativă, data și ora curentă, determinarea stării conexiunii, întreruperea modului de calcul.
Programe de depanare
Controlul pas cu pas asupra funcționării programului se efectuează în fereastra „Depanare”. Se deschide din meniul contextual „Începe calculul în modul depanare”. Poate fi deschis și cu comanda breakpoint(), iar linia programului va fi evidențiată cu roșu. Fereastra conține câmpuri cu cod de program și valori variabile. În partea de jos a ferestrei sunt butoanele „Pasul următor”, „Continuare execuție”, „Oprire calcul”. Apăsarea F5 va continua execuția programului, combinația Shift + F5 va opri depanarea, tasta F10 va direcționa la următoarea linie.
QPILE sau LUA?
LUA este un nou limbaj de programare pentru crearea de roboți de tranzacționare. La fel ca QPILE, este implementat în terminalul QUIK. https://articles.opexflow.com/programming/lua.htm Un site dedicat dezvoltării roboților de tranzacționare pentru tranzacționare arată avantajele limbajului LUA față de QPILE. Deci, poate funcționa ca un script necompilat și bytecode, echipat cu instrumente de dezvoltare și mecanisme de programare orientate pe obiecte. Obiectele scrise în alte limbaje de programare pot fi conectate la programe LUA. LUA oferă 8 tipuri de date, inclusiv metatable. Limbajul LUA este multi-threaded, rapid, iar tranzacțiile și evenimentele terminale sunt asincrone. LUA este mai comun decât QPILE și multe extensii au fost scrise pentru el.
Limbajul QPILE este acum depreciat. Experții de pe forumuri recomandă utilizarea LUA. Deși încă se folosesc programe utile și eficiente.
Cu toate acestea, limbajul QPILE este simplu în comparație cu LUA, așa că dacă nu aveți experiență în programare, este mai bine să alegeți QPILE. În acest limbaj, puteți scrie un robot simplu dacă nu aveți nevoie să efectuați calcule complexe.
Cum se creează un robot de tranzacționare pe QPILE?
Pentru a crea un consilier comercial, veți avea nevoie de următoarele programe:
- ESTE Quik.
- Editor de cod Notepad++.
- Ghid pentru QPILE.
- Plugin XML pentru detectarea codului în Notepad++.
Descărcați și instalați aceste programe. Activați sintaxa limbii plasând userDefineLang.xml în calea C:\Users\User\AppData\Roaming\Notepad++\
Mai întâi, să creăm următoarea strategie de tranzacționare. Scriptul ar trebui să calculeze Hi și Low pentru ultimele lumânări în fiecare minut, verificați prețul curent al instrumentului. O poziție este deschisă în direcția necesară dacă prețul instrumentului atinge valoarea maximă sau minimă pentru perioada respectivă. Când se primește un semnal pentru scurtă, poziția lungă se închide automat. Robotul folosește instrumentul GAZP, intervalul de timp este setat la 1 min. Adâncimea de măsurare hi-low este setată la 5 lumânări. Pentru a introduce Long, se stabilește o regulă și intersecția prețului curent a valorii maxime pentru perioada. Robotul va intra pe scurt dacă prețul actual depășește valoarea minimă pentru aceste 5 lumânări. Scrieți un bloc de cod în Notepad++ cu setările de bază și data și ora serverului. Acest cod este prezentat în imaginea de mai jos.
Primele 4 linii de cod formează antetul programului. Între rândurile 6 și 44 se află corpul programului, care conține conținutul robotului. Rândurile 7 – 12 conțin setările utilizatorului, care includ codurile instrumentului, grupului și clientului, numărul contului de pe MICEX. Aceste valori nu se modifică în timpul execuției programului. Liniile 13 – 16 sunt valorile inițiale ale variabilelor. Acestea vor fi resetate la zero la fiecare trecere de iterație. Rândurile 17 – 21 conțin o indicație pentru a utiliza data și ora serverului. Aceste date sunt transmise funcției DATETIME și convertite în format text. Rândurile 22 – 29 trimit datele primite la tabel. Codul trebuie salvat și trebuie specificată extensia qpl.
Deschideți programul în QUIK apăsând Ctrl+F10 și selectând fișierul qpl generat. Utilizați combinația Ctrl+F11 pentru a deschide fereastra „Lucrează cu portofolii” și setați perioada de calcul a portofoliului la 5 minute. Apăsați Ctrl+F12 pentru a seta coloanele de afișat în tabel. Imaginea arată rezultatul muncii robotului.
Să mai adăugăm câteva funcții și condiții la programul nostru.
Blocul „Setări utilizator” este completat cu variabilele NUMĂR și INTERVAL, care vor fi folosite în funcția de obținere a ultimelor N bare. Funcția DATETIME setează data și ora serverului, iar funcțiile curente de dată și oră CURDATE și CURTIME sunt apelate de la aceasta. Ora curentă este convertită într-un număr de pe linia 24. Linia 26 setează ora la care algoritmul va rula de la 10:00:01 la 18:40:00 UTC.
Cel mai adesea, indicatorii, oscilatorii, calculele statistice sunt calculate de ultimele N lumânări ale graficului. QPILE nu are o funcție de colectare a numărului de lumânări în urmă cu N perioade ca atare, dar există o funcție GET_CANDLE care accesează lumânările pe diagramă după dată și oră în format text. Codul nostru conține funcția pentru a obține ultimele N bare OHLC(). Se creează o colecție cu parametrii ultimelor lumânări imbricate în lista COLECȚII. Programul verifică valoarea INTERVAL, iar dacă nu se încadrează în intervalul 0…60, se afișează un mesaj că valoarea nu corespunde intervalului permis. O colecție MAP cu lumânări este creată în linia 88. O buclă FOR care verifică diagrama la adâncimea necesară cu pasul INTERVAL de la noua la vechea lumânare. În linia 90, după ce ciclul este declarat, robotul se întoarce cu un interval. Când primești o lumânare cu GET_CANDLE, plasați-l în colecția BARLIST folosind funcția INSERT_COLLECTION_TEAM. Ca rezultat al operațiunii comenzii OHLC(), BARLIST este completat cu ultimele lumânări din diagrama instrumentului în valoare de NUMBER. Numărul de elemente din colecție este solicitat de comanda GET_COLLECTION_COUNT() și raportat de variabila BARCOUNT. Data serverului, ora, valorile variabilelor INSTRUMENT și BARCOUNT sunt raportate de funcția SET_VALUE() din OUTPUT. Această matrice este creată de comanda CREATE_MAP(). Datele se încadrează în tabelul personalizat, care poate fi văzut în fotografia de mai jos. valorile variabilelor INSTRUMENT și BARCOUNT sunt raportate de funcția SET_VALUE() în OUTPUT. Această matrice este creată de comanda CREATE_MAP(). Datele se încadrează în tabelul personalizat, care poate fi văzut în fotografia de mai jos. valorile variabilelor INSTRUMENT și BARCOUNT sunt raportate de funcția SET_VALUE() în OUTPUT. Această matrice este creată de comanda CREATE_MAP(). Datele se încadrează în tabelul personalizat, care poate fi văzut în fotografia de mai jos.
Roboți de tranzacționare pe QPILE – soluții gata făcute
Robot mediu în mișcare
Robotul demonstrativ nu este potrivit pentru tranzacționare reală.
Robotul include 5 parametri. Valorile identificatorului DATĂ, ORA, PREȚ sunt setate la nivelul 30. Identificatorii MOVING și TP sunt setate la precizie zero. Cod robot pe media mobilă scris sub QPILE:
Calculator de poziție N. Moroshkin
Un program pentru calcularea nivelurilor de drawdown maxim admisibil și ținta pentru pozițiile lungi și scurte la prețurile curente de cerere și ofertare. Nivelurile sunt calculate pentru 2 valori ale volumului de intrare a poziției. Robotul găsește volumul de poziție permis atunci când atribuie un ordin stop la un pas de la prețul de deschidere cu calculul deschiderii unei poziții în direcția ascendentă a barei. Nivelurile găsite sunt introduse în fereastra terminalului, care sunt ulterior reflectate în graficul de preț. Tranzacțiile sunt fixe pentru un instrument dat. Dacă o poziție este deschisă, robotul începe să-și calculeze parametrii. În funcție de schimbarea poziției, comenzile atribuite sunt ajustate.
Filtru de volum
Un portofoliu robot pentru calcularea mediei aritmetice a volumului lumânărilor și compararea acesteia cu produsul mediu prin coeficientul X. Funcționează corect cu diagrame reprezentate într-o perioadă de timp selectată.
Opțiuni greci
Portofoliu pentru calcularea și afișarea „grecilor” de opțiuni. Diferă de metoda Black-Showers.
Robot de tranzacționare TRIX pentru QUIK
Programul se bazează pe indicatorul TRIX. Când indicatorul se închide deasupra liniei zero, nivelul specificat, robotul ia poziția lungă. Poziția este închisă prin Take Profit, Stop Loss sau trailing stop.
Preprocesor M4
Program pentru lucrul cu QPILE și Lua. Include arhive cu fișiere executabile, documentație și fișiere DLL cu analizarea expresiilor regulate. Pentru a utiliza programul, trebuie să despachetați fișierele executabile și să plasați regexp2 în calea C:\Windows. Lecții despre QPILE pentru QUIK: https://youtu.be/vMTXwDUujpI Instalarea unui script pe QPILE în terminalul Quik: https://youtu.be/0B7qL8Svh7I O secțiune despre github care descrie utilizarea limbajului algoritmic QPILE încorporat în Stația de lucru de sistem QUIK situată la link – https://euvgub.github.io/quik_user_manual/ch8.html. QPILE este un limbaj învechit, dar destul de simplu și accesibil chiar și pentru comercianții începători. Roboții de tranzacționare și programele care s-au dovedit de mult timp continuă să lucreze la asta. Cu toate acestea, pentru sarcini mai complexe este mai bine să utilizați LUA.
0к