Algoritma lingvo QPILE por programado de komercaj robotoj por QUIK.
Komercaj robotoj povas esti skribitaj en specifa lingvo, simile al programkodo. QPILE estas unu el ili, la artikolo konsideros ĉi tiun lingvon, komparos la QPILE kaj
LUA-lingvojn , kaj ankaŭ provizos ekzemplojn de robotoj en ĉi tiu lingvo.
- Ĝeneralaj informoj pri QPILE
- Laborante kun tablo
- QPILE-konstruaĵoj
- Tipoj de datumoj
- Esprimoj
- Funkcioj
- Sencimigaj programoj
- QPILE aŭ LUA?
- Kiel krei komercan roboton sur QPILE?
- Komercaj robotoj sur QPILE – pretaj solvoj
- Moviĝanta averaĝa roboto
- N. Moroshkin poziciokalkulilo
- Volumo-filtrilo
- Opcioj grekoj
- TRIX komerca roboto por QUIK
- M4-antaŭprocesoro
Ĝeneralaj informoj pri QPILE
QPILE estas mallongigo, kiu signifas QUIK Programebla Interfaco kaj Logika Medio.
Ĉi tio estas serio de komandoj interpretitaj de la laborstacio QUIK. Ĝi estas ĉefe uzata por kalkuli la prezon de biletujoj de valorpaperoj. La lingvo ankaŭ estas uzata por:
- dinamika rekalkulo de la prezo de aktivoj de klientoj sur la labortablo de la makleristo kaj en iliaj biletujoj. En ĉi-lasta kazo, ilia totala prezo ankaŭ estas rekalkulita;
- trovi mankantajn indikilojn uzante siajn proprajn algoritmojn kaj datumojn por marĝena pruntedonado;
- disvolvante la ĝustan komercan strategion.
La lingvo priskribas la strukturon de la tabelo: la nomumo de kolumnoj kaj vicoj, formuloj. En ĉi-lasta, matematikaj operacioj, variabloj, datumoj de aliaj tabeloj povas esti uzataj por kalkulo. La programkodo ŝarĝita de la QUIK-servilo aŭ de la disko de la uzanto estas prilaborata de la lingva interpretisto, kiu kalkulas la valorojn en la formuloj. La tabeloj de unu programo havas unu datumfonton, sed la kalkuloj ne estas duobligitaj kaj ne influas la efikecon de la sistemo. Laborante kun QUIK-tabeloj, tabeloj sur QPILE havas normajn funkciojn. QUIK en la laborejo estas ekipita per QPILE-kodo-sencimigilo. https://articles.opexflow.com/software-trading/torgovyj-terminal-quik.htm La lingvo permesas priskribi novajn tabelojn kun difinita strukturo, reliefigi ĉelojn kun certaj valoroj, kalkuli kampojn surbaze de matematikaj kaj logikaj esprimoj. La uzanto ricevos sciigojn en formo de sonsignalo aŭ tekstmesaĝo. Tabeloj pri QPILE povas esti redaktitaj, presitaj, kopiitaj, eksportitaj per ODBC kaj DDE-servilo. La komencaj datumoj estas de la QUIK-tabeloj:
- transakcioj, inkluzive por ekzekuto kaj nepersonaj;
- orders, including stop orders, for over-the-counter trades and orders – raportoj pri komercoj en setlinterkonsentoj;
- “klienta biletujo”, “aĉeti/vendi”
- datumoj de la pozicioj de la partoprenanto per mono, komercaj kontoj, instrumento.
Tabeloj bazitaj sur QPILE ne povas esti kopiitaj al tekstdosiero per la kunteksta menuo kaj eksportitaj al teknikaj analizsistemoj, kaj diagramoj ne povas esti evoluigitaj surbaze de ili. QPILE-bazitaj tabeloj ne povas esti filtritaj aŭ ordigitaj.
Laborante kun tablo
Por ŝargi la programkodon, vi devas elekti la servomenuon, poste QPILE-skriptojn. Vi ankaŭ povas uzi la kombinaĵon Ctrl+F11. Post kiam vi devas alklaki “Aldoni” kaj elekti la deziratan dosieron. Ĝi havas etendon .qpl kaj ĝia nomo aperos en la Listo de Disponeblaj Skriptoj.
Se estas eraro en la programo, la sistemo faros sciigon en la “Mesaĝa Fenestro”, kiu enhavos la nomon de la misa dosiero kaj la linionumeron kun la eraro. Se neniuj misfunkciadoj estis trovitaj en la dosiero, la sekvaj datumoj estos indikitaj en la kampoj:
- tabelnomo;
- nombro da kolumnoj kaj klientoj;
- listo de identigiloj kaj klientoj;
- la listo de parametroj kaj la fontkodo de la dosiero.
La butono “Elŝutu loke” permesos al vi ricevi la tabelon el dosiero, kaj “Alŝutu al servilo” sendos la programon al la servilo por ke ĉiuj uzantoj povu aliri ĝin. Por krei tabelon, alklaku Krei Tabelon. En la “Haveblaj skriptoj” elektu la programon, kiun vi bezonas ekzekuti, agordu la nombron da linioj per la “Filtrilo de klientoj”, determinu la postulatajn kolumnojn kaj ilian sinsekvon.
Paŭzi kaj rekomenci la kalkulon, rekomenci la kalkulon kaj en sencimiga reĝimo, konservi la priskribon al dosiero, montri la formulon kaj skripto-parametrojn disponeblas en la kunteksta menuo.
QPILE-konstruaĵoj
Tipoj de datumoj
- String – kordo.
- Duoblo estas glitkoma nombro.
- Kolekto – kolekto.
- Mapo – asocieca tabelo – sinsekvo de paroj, kiu ebligas al vi ricevi informojn per ŝlosilo.
Esprimoj
La aritmetikaj operacioj de adicio, subtraho, multipliko, divido estas aplikataj. Oni uzas ankaŭ la logikaj esprimoj “kaj”, “aŭ”, egalas, pli, malpli, neegalaĵojn, kondiĉan konstruon “se … tiam …”.
Funkcioj
Funkcioj povas troviĝi ie ajn en la programo kaj havas malsamajn nomojn. Entute, 18 grupoj de matematikaj funkcioj kaj funkcioj estas disponeblaj por akiri la valorojn de tabeloj kaj parametroj, asociaj tabeloj, listo de tabeloj kaj aliaj taskoj. Unua klaso:
- Matematikaj funkcioj , kiuj ebligas al vi redoni la valoron de la sinuso, kosinuso, tanĝanto, kotangente de la argumento, kalkuli la eksponenton de la argumento, generi hazardan nombron, ktp.
- Ĝeneralaj komandoj : NEW_GLOBAL por pravalorigi tutmondan variablon kaj MESSAGE por malfermi mesaĝojn.
Funkcioj por labori kun:
- Kolektoj de objektoj (Kolekto) . Ili permesas vin krei novan kolekton, redoni la bezonatan nombron da elementoj, anstataŭigi aŭ enmeti la deziratajn valorojn.
- Asociaj Tabeloj (MAP) . Helpu krei kaj administri la tabelon.
- Dosieroj – laborante kun tekstaj dosieroj, konservante protokolon de la programo. La dosiernomo povas enhavi la vojon al ĝi.
- Kordoj .
- Grafikaĵoj . Funkcioj GET_CANDLE por aliri kandelajn datumojn kaj GET_CANDLE EX por redoni asocian tabelon.
- Aplikoj . Kreante mendojn kaj sendante ilin al la komerca sistemo.
- Etikedoj . Ilia konstruo kaj instalado sur la diagramo. Aldonante, forigante unu aŭ ĉiujn etikedojn, akiri kaj fiksi parametrojn por specifa etikedo.
Ekzistas ankaŭ funkcioj por:
- Por aliri vicojn de arbitraj QUIK-tabeloj kaj listoj de disponeblaj parametroj . Aliro al laborejaj tablodatenoj. Ĉi tiuj inkluzivas GET_ITEM por redoni la MAP kaj GET_NUMBER_OF por redoni la nombron da enskriboj.
- Por labori kun programebla tabelo . Ĉi tiuj komandoj funkcias sur la PROPRA tablo. Ĝi estas legebla per la normaj funkcioj de la antaŭa alineo kaj per ĉi tiuj funkcioj. Ĉi tiu grupo inkluzivas komandojn por aldoni, modifi kaj forigi vicon kun indekso, kaj tute malplenigi la PROPRAN tablon.
Por akiri valorojn uzu:
- Tabeloj de aktualaj komercoj . Akiro de interŝanĝaj informaj parametroj per GET_PARAM (_EX) komandoj.
- Citfenestroj . Akirante la valorojn de instrumentaj citaĵoj.
- Tabloj de pozicioj por instrumentoj kaj mono . Akiro de datumoj pri kliento, firmao, instrumento, depo-konto per kodo.
Servaj funkcioj – redonante la daton de la nuna komerca sesio, asocia serio, aktuala dato kaj horo, determini la konektan staton, interrompante la kalkulreĝimon.
Sencimigaj programoj
Paŝo-post-paŝa kontrolo de la funkciado de la programo estas farita en la fenestro “Elimigo”. Ĝi estas malfermita el la kunteksta menuo “Komenci kalkulon en sencimiga reĝimo”. Ĝi ankaŭ povas esti malfermita per la komando breakpoint(), kaj la programlinio estos reliefigita ruĝe. La fenestro enhavas kampojn kun programkodo kaj variaj valoroj. Malsupre de la fenestro estas butonoj “Sekva paŝo”, “Daŭrigi ekzekuton”, “Ĉesigi kalkulon”. Premante F5 daŭrigos la ekzekuton de la programo, la kombinaĵo Shift + F5 ĉesos sencimigi, la F10-klavo direktos al la sekva linio.
QPILE aŭ LUA?
LUA estas nova programlingvo por krei komercajn robotojn. Kiel QPILE, ĝi estas efektivigita en la QUIK-terminalo. https://articles.opexflow.com/programming/lua.htm Retejo dediĉita al la disvolviĝo de komercaj robotoj por komercado montras la avantaĝojn de la lingvo LUA super QPILE. Do, ĝi povas funkcii kiel ne-kompilita skripto kaj bajtkodo, ekipita per programiloj kaj objekt-orientitaj programaj mekanismoj. Objektoj skribitaj en aliaj programlingvoj povas esti konektitaj al LUA-programoj. LUA disponigas 8 datumtipojn, inkluzive de metatabloj. La LUA-lingvo estas multfadena, rapida, kaj transakcioj kaj finaj eventoj estas nesinkronaj. LUA estas pli ofta ol QPILE, kaj multaj etendaĵoj estis skribitaj por ĝi.
La QPILE-lingvo nun estas malrekomendita. Fakuloj pri la forumoj rekomendas uzi LUA. Kvankam utilaj kaj efikaj programoj ankoraŭ estas uzataj.
Tamen, la lingvo QPILE estas simpla kompare kun LUA, do se vi ne havas sperton pri programado, estas pli bone elekti QPILE. En ĉi tiu lingvo, vi povas skribi simplan roboton se vi ne bezonas fari kompleksajn kalkulojn.
Kiel krei komercan roboton sur QPILE?
Por krei komercan konsiliston, vi bezonos la jenajn programojn:
- ĜIA Quik.
- Notepad++ kodredaktilo.
- Gvidilo al QPILE.
- XML-aldonaĵo por koda detekto en Notepad++.
Elŝutu kaj instalu ĉi tiujn programojn. Ebligu la lingvan sintakson metante userDefineLang.xml en la vojon C:\Users\User\AppData\Roaming\Notepad++\
Unue, ni kreu la sekvan komercan strategion. La skripto devus kalkuli Hi kaj Malalta por la lastaj kelkaj kandeloj ĉiun minuton, kontrolu la nunan prezon de la instrumento. Pozicio estas malfermita en la postulata direkto se la prezo de la instrumento atingas la maksimuman aŭ minimuman valoron por la periodo. Kiam signalo por mallonga estas ricevita, la longa pozicio estas aŭtomate fermita. La roboto uzas la GAZP-ilon, la tempokadro estas agordita al 1 min. La alta-malalta mezura profundo estas fiksita al 5 kandeloj. Por eniri Long, regulo estas starigita kaj la intersekco de la nuna prezo de la maksimuma valoro por la periodo. La roboto eniros Mallongan se la nuna prezo transiras la minimuman valoron por ĉi tiuj 5 kandeloj. Skribu blokon de kodo en Notepad++ kun bazaj agordoj kaj servila dato kaj horo. Ĉi tiu kodo estas montrita en la suba bildo.
La unuaj 4 linioj de kodo formas la programkapon. Inter linioj 6 kaj 44 estas la korpo de la programo, kiu enhavas la enhavon de la roboto. Linioj 7 – 12 enhavas uzantajn agordojn, kiuj inkluzivas la kodojn de la instrumento, grupo kaj kliento, la kontnumero sur la MICEX. Ĉi tiuj valoroj ne ŝanĝiĝas dum la ekzekuto de la programo. Linioj 13 – 16 estas la komencaj valoroj de la variabloj. Ili estos rekomencigitaj al nulo sur ĉiu ripeta enirpermesilo. Linioj 17 – 21 enhavas indikon por uzi la servilon daton kaj horon. Ĉi tiuj datumoj estas transdonitaj al la funkcio DATETIME kaj konvertitaj al tekstoformato. Linioj 22 – 29 sendas la ricevitajn datumojn al la tabelo. La kodo devas esti konservita kaj la qpl-etendo devas esti specifita.
Malfermu la programon en QUIK premante Ctrl+F10 kaj elektante la generitan qpl-dosieron. Uzu la kombinaĵon Ctrl+F11 por malfermi la fenestron “Labori kun biletujoj” kaj agordi la kalkulperiodon de biletujo al 5 minutoj. Premu Ctrl+F12 por agordi la kolumnojn por montri en la tabelo. La bildo montras la rezulton de la laboro de la roboto.
Ni aldonu kelkajn pliajn funkciojn kaj kondiĉojn al nia programo.
La bloko “Uzanto-agordoj” estas kompletigita per la variabloj NOMBRO kaj INTERVALO, kiuj estos uzataj en la funkcio akiri la lastajn N stangojn. La funkcio DATETIME fiksas la daton kaj horon de la servilo, kaj la aktualaj datoj kaj horo funkcioj CURDATE kaj CURTIME estas vokataj de ĝi. La nuna tempo estas konvertita al nombro sur linio 24. Linio 26 fiksas la tempon por la algoritmo funkcii de 10:00:01 ĝis 18:40:00 UTC.
Plej ofte, indikiloj, oscilatoroj, statistikaj kalkuloj estas kalkulitaj per la lastaj N kandeloj de la diagramo. QPILE ne havas funkcion por kolekti la nombron da kandeloj antaŭ N periodoj kiel tia, sed ekzistas GET_CANDLE-funkcio, kiu aliras la kandelojn sur la diagramo laŭ dato kaj horo en tekstoformato. Nia kodo enhavas la funkcion akiri la lastajn N stangojn OHLC(). Ĝi kreas kolekton kun la parametroj de la lastaj kandeloj nestitaj en la KOLEKTA listo. La programo kontrolas la INTERVAL-valoron, kaj se ĝi ne eniras la intervalon 0…60, mesaĝo estas montrata, ke la valoro ne respondas al la permesita intervalo. MAPA kolekto kun kandeloj estas kreita en linio 88. A FOR-buklo sondante la diagramon al la postulata profundo kun la INTERVAL-paŝo de la nova al la malnova kandelo. En linio 90, post kiam la ciklo estas deklarita, la roboto reiras intervalon. Kiam vi ricevas kandelon kun GET_CANDLE, metu ĝin en la BARLIST-kolekton uzante la funkcion INSERT_COLLECTION_TEAM. Kiel rezulto de la operacio de la komando OHLC(), BARLIST estas replenigita per la lastaj kandeloj de la instrumenta diagramo en la kvanto de NOMBRO. La nombro da elementoj en la kolekto estas petita de la komando GET_COLLECTION_COUNT() kaj raportita de la variablo BARCOUNT. Servila dato, tempo, valoroj de INSTRUMENT kaj BARCOUNT-variabloj estas raportitaj per funkcio SET_VALUE() en OUTPUT. Ĉi tiu tabelo estas kreita per la komando CREATE_MAP(). La datumoj falas en la kutiman tabelon, kiu povas esti vidita en la suba foto. la valoroj de la variabloj INSTRUMENT kaj BARCOUNT estas raportitaj de la funkcio SET_VALUE() en OUTPUT. Ĉi tiu tabelo estas kreita per la komando CREATE_MAP(). La datumoj falas en la kutiman tabelon, kiu povas esti vidita en la suba foto. la valoroj de la variabloj INSTRUMENT kaj BARCOUNT estas raportitaj de la funkcio SET_VALUE() en OUTPUT. Ĉi tiu tabelo estas kreita per la komando CREATE_MAP(). La datumoj falas en la kutiman tabelon, kiu povas esti vidita en la suba foto.
Komercaj robotoj sur QPILE – pretaj solvoj
Moviĝanta averaĝa roboto
Demoroboto ne taŭga por reala komerco.
La roboto inkluzivas 5 parametrojn. DATO, TEMPO, PREZO-identigilo-valoroj estas agordita al nivelo 30. MOVING kaj TP-identigiloj estas agordita al nula precizeco. Robotkodo sur mova mezumo skribita sub QPILE: [galeriokolumnoj = “5” ids = “14896,14897,14898,14899,14900,14901,14902,14903,14904,14905,14906,14907”]
N. Moroshkin poziciokalkulilo
Programo por kalkuli la nivelojn de la maksimuma permesebla malaltiĝo kaj la celo por longaj kaj mallongaj pozicioj ĉe nunaj postulaj kaj ofertprezoj. La niveloj estas kalkulitaj por 2 valoroj de la pozicio-enira volumo. La roboto trovas la permeseblan pozicion-volumon kiam asignas haltan ordon en unu paŝo de la malferma prezo kun la kalkulo malfermi pozicion en la direkto de la trinkejo-kresko. La trovitaj niveloj estas eniritaj en la fina fenestro, kiuj poste estas reflektitaj en la prezo-diagramo. Transakcioj estas fiksitaj por antaŭfiksita instrumento. Se pozicio estas malfermita, la roboto komencas kalkuli siajn parametrojn. Depende de la ŝanĝo en pozicio, la asignitaj ordoj estas alĝustigitaj.
Volumo-filtrilo
Portfolio-roboto por kalkuli la aritmetikan meznombre de la volumeno por kandeloj kaj kompari ĝin kun la averaĝa produkto per la koeficiento X. Funkcias ĝuste kun grafikaj grafikaĵoj en la elektita tempoperiodo.
Opcioj grekoj
Portfolio por kalkuli kaj montri “grekoj” de ebloj. Ĝi diferencas de la metodo Black-Showers.
TRIX komerca roboto por QUIK
La programo baziĝas sur la TRIX Indikilo. Kiam la indikilo fermiĝas super la nula linio, la specifita nivelo, la roboto prenas la Longan pozicion. La pozicio estas fermita per Take Profit, Stop Loss aŭ trailing stop.
M4-antaŭprocesoro
Programo por labori kun QPILE kaj Lua. Inkluzivas arkivojn kun ruleblaj dosieroj, dokumentado kaj DLL-dosieroj kun regula esprimo-analizo. Por uzi la programon, vi devas malpaki la ruleblajn dosierojn kaj meti regexp2 en la vojon C:\Windows. Lecionoj pri QPILE por QUIK: https://youtu.be/vMTXwDUujpI Instalado de skripto sur QPILE en la Quik-terminalo: https://youtu.be/0B7qL8Svh7I Sekcio pri github kiu priskribas la uzon de la QPILE algoritma lingvo enkonstruita en la QUIK-sistema laborstacio situanta ĉe la ligilo – https://euvgub.github.io/quik_user_manual/ch8.html. QPILE estas malaktuala lingvo, sed sufiĉe simpla kaj alirebla eĉ por komencaj komercistoj. Komercaj robotoj kaj programoj, kiuj pruvis sin dum longa tempo, daŭre laboras pri ĝi. Tamen, por pli kompleksaj taskoj estas pli bone uzi LUA.
0к