Algoritmyske taal QPILE foar programmearjen hannelsrobots foar QUIK.
Trading robots kinne wurde skreaun yn in spesifike taal, fergelykber mei programma koade. QPILE is ien fan har, it artikel sil dizze taal beskôgje, de QPILE- en
LUA-talen fergelykje , en ek foarbylden fan robots yn dizze taal leverje.
- Algemiene ynformaasje oer QPILE
- Wurkje mei in tafel
- QPILE konstruearret
- Data types
- Utdrukkingen
- Funksjes
- Debuggen programma’s
- QPILE of LUA?
- Hoe meitsje in hannelsrobot op QPILE?
- Trading robots op QPILE – klearebare oplossings
- Bewegende gemiddelde robot
- N. Moroshkin posysje rekkenmasine
- Folume filter
- Opsjes Griken
- TRIX hannelsrobot foar QUIK
- M4 Preprocessor
Algemiene ynformaasje oer QPILE
QPILE is in ôfkoarting dy’t stiet foar QUIK Programmable Interface and Logic Environment.
Dit is in searje kommando’s ynterpretearre troch it QUIK-wurkstasjon. It wurdt benammen brûkt om de priis fan portefúljes fan weardepapieren te berekkenjen. De taal wurdt ek brûkt foar:
- dynamyske herberekkening fan ‘e priis fan aktiva fan kliïnten op it buroblêd fan’ e brokker en yn har portefúljes. Yn it lêste gefal wurdt har totale priis ek opnij berekkene;
- ûntbrekkende yndikatoaren te finen mei har eigen algoritmen en gegevens foar marzjeliening;
- it ûntwikkeljen fan de juste hannelstrategy.
De taal beskriuwt de struktuer fan ‘e tabel: de beneaming fan kolommen en rigen, formules. Yn it lêste kinne wiskundige operaasjes, fariabelen, gegevens fan oare tabellen brûkt wurde foar berekkening. De programmakoade laden fan ‘e QUIK-tsjinner of fan’ e skiif fan ‘e brûker wurdt ferwurke troch de taaltolk, dy’t de wearden yn’ e formules berekkent. De tabellen fan ien programma hawwe ien gegevensboarne, mar de berekkeningen binne net duplikearre en hawwe gjin ynfloed op de effisjinsje fan it systeem. As jo wurkje mei QUIK tabellen, hawwe tabellen op QPILE standert funksjes. QUIK op ‘e wurkflier is foarsjoen fan in QPILE-koade-debugger. https://articles.opexflow.com/software-trading/torgovyj-terminal-quik.htm De taal lit jo nije tabellen mei in opjûne struktuer beskriuwe, sellen markearje mei bepaalde wearden, fjilden berekkenje op basis fan wiskundige en logyske útdrukkingen. De brûker sil notifikaasjes krije yn ‘e foarm fan in lûdsinjaal as in tekstberjocht. Tabellen op QPILE kinne wurde bewurke, printe, kopiearre, eksportearre fia ODBC en DDE tsjinner. De earste gegevens binne fan ‘e QUIK-tabellen:
- transaksjes, ynklusyf foar útfiering en ûnpersoanlik;
- oarders, ynklusyf stop-oarders, foar oer-de-counter-hannels en oarders – rapporten foar hannelingen yn delsettingshannelingen;
- “klantportfolio”, “keapje/ferkeapje”
- gegevens fan de dielnimmers posysjes troch jild, trading accounts, ynstrumint.
Tabellen basearre op QPILE kin net wurde kopiearre nei in tekst triem fia it kontekstmenu en eksportearre nei technyske analyze systemen, en charts kinne net ûntwikkele wurde basearre op harren. QPILE-basearre tabellen kinne net wurde filtere of sortearre.
Wurkje mei in tafel
Om it programma koade te laden, moatte jo it tsjinstenmenu selektearje, dan QPILE-skripts. Jo kinne ek de kombinaasje Ctrl+F11 brûke. Neidat jo moatte klikke op “Tafoegje” en selektearje de winske triem. It hat in .qpl tafoeging en syn namme sil ferskine yn de beskikbere skripts list.
As der in flater is yn it programma, sil it systeem in notifikaasje meitsje yn it “Berjochtfinster”, dat de namme fan it defekte bestân en it linenûmer mei de flater sil befetsje. As der gjin flaters binne fûn yn it bestân, wurde de folgjende gegevens yn ‘e fjilden oanjûn:
- tabel namme;
- oantal kolommen en kliïnten;
- list fan identifiers en kliïnten;
- de list mei parameters en de boarnekoade fan it bestân.
De knop “Download lokaal” lit jo de tabel fan in bestân krije, en “Upload nei tsjinner” sil it programma nei de tsjinner stjoere, sadat alle brûkers der tagong hawwe. Om in tabel te meitsjen, klikje op Tabel oanmeitsje. Selektearje yn ‘e “Beskikbere skripts” it programma dat jo moatte útfiere, set it oantal rigels yn troch it “Filter fan kliïnten”, bepale de fereaske kolommen en har folchoarder.
De berekkening pauze en trochsette, de berekkening opnij begjinne en yn debugmodus, de beskriuwing opslaan yn in bestân, de formule demonstrearje, en skriptparameters binne beskikber yn it kontekstmenu.
QPILE konstruearret
Data types
- String – string.
- Dûbel is in driuwend puntnûmer.
- Kolleksje – in kolleksje.
- Kaart – in assosjatyf array – in folchoarder fan pearen wêrmei jo ynformaasje kinne krije troch kaai.
Utdrukkingen
De arithmetyske operaasjes fan optellen, subtraksje, fermannichfâldigjen, divyzje wurde tapast. De logyske útdrukkingen “en”, “of”, lyk oan, mear, minder, ûngelikens, betingstlike konstruksje “as … dan …” wurde ek brûkt.
Funksjes
Funksjes kinne oeral yn it programma lizze en hawwe ferskillende nammen. Yn totaal binne 18 groepen wiskundige funksjes en funksjes beskikber om de wearden fan tabellen en parameters, assosiative arrays, in list mei tabellen en oare taken te krijen. Earste klas:
- Wiskundige funksjes wêrmei jo de wearde fan ‘e sinus, cosinus, tangens, cotangens fan it argumint kinne weromjaan, de eksponint fan it argumint berekkenje, in willekeurich getal generearje, ensfh.
- Algemiene kommando’s : NEW_GLOBAL om in globale fariabele te initialisearjen en MESSAGE om berjochten te iepenjen.
Funksjes om mei te wurkjen:
- Samlingen fan objekten (Samling) . Se kinne jo in nije kolleksje meitsje, it fereaske oantal eleminten weromjaan, de winske wearden ferfange of ynfoegje.
- Associative Arrays (MAP) . Help by it meitsjen en behearen fan de array.
- Triemmen – wurkje mei tekstbestannen, ûnderhâld fan in log-log fan it programma. De triemnamme kin it paad dernei befetsje.
- Strings .
- Grafiken . Funksjes GET_CANDLE om tagong te krijen ta kearsgegevens en GET_CANDLE EX om in assosjatyf array werom te jaan.
- Applikaasjes . It meitsjen fan oarders en stjoere se nei it hannelssysteem.
- Tags . Harren konstruksje en ynstallaasje op ‘e kaart. Ien of alle labels tafoegje, wiskje, parameters krije en ynstelle foar in spesifyk label.
D’r binne ek funksjes foar:
- Foar tagong ta rigen fan willekeurige QUIK-tabellen en listen mei beskikbere parameters . Tagong ta wurkplak tabel gegevens. Dizze omfetsje GET_ITEM om de MAP werom te jaan en GET_NUMBER_OF om it oantal yngongen werom te jaan.
- Om te wurkjen mei in programmeerbere tafel . Dizze kommando’s wurkje op ‘e EIGEN tabel. It is lêsber troch de standertfunksjes út de foarige paragraaf en troch dizze funksjes. Dizze groep befettet kommando’s foar it tafoegjen, wizigjen en wiskjen fan in rige mei in yndeks, en it folslein wiskjen fan ‘e EIGEN tabel.
Om wearden te krijen brûke:
- Tabellen fan aktuele hannels . It krijen fan útwikselingsynformaasjeparameters mei GET_PARAM (_EX) kommando’s.
- Sitearje finsters . It krijen fan de wearden fan ynstrumint quotes.
- Tabellen fan posysjes troch ynstruminten en jild . It krijen fan gegevens oer in klant, firma, ynstrumint, depo-akkount troch koade.
Tsjinstfunksjes – it werombringen fan de datum fan ‘e aktuele hannelssesje, assosjative searjes, aktuele datum en tiid, it bepalen fan de ferbiningstatus, it ûnderbrekken fan de berekkeningsmodus.
Debuggen programma’s
Stap foar stap kontrôle oer de wurking fan it programma wurdt útfierd yn it finster “Debug”. It wurdt iepene út it kontekstmenu “Berekkenje begjinne yn debugmodus”. It kin ek wurde iepene mei de breakpoint () kommando, en it programma rigel wurdt markearre yn read. It finster befettet fjilden mei programmakoade en fariabele wearden. Oan ‘e ûnderkant fan it finster binne d’r knoppen “Folgjende stap”, “Trochgean mei útfiering”, “Stopje berekkening”. Druk op F5 sil de útfiering fan it programma trochgean, de kombinaasje Shift + F5 sil stopje mei debuggen, de F10-kaai sil rjochtsje nei de folgjende rigel.
QPILE of LUA?
LUA is in nije programmeartaal foar it meitsjen fan hannelsrobots. Lykas QPILE, wurdt it ymplementearre yn ‘e QUIK-terminal. https://articles.opexflow.com/programming/lua.htm In side wijd oan ‘e ûntwikkeling fan hannelsrobots foar hannel toant de foardielen fan’ e LUA-taal boppe QPILE. Dat, it kin funksjonearje as in net-kompilearre skript en bytekoade, foarsjoen fan ûntwikkelders ark en objekt-rjochte programmearring meganismen. Objekten skreaun yn oare programmeartalen kinne wurde ferbûn mei LUA-programma’s. LUA jout 8 gegevens types, ynklusyf metatables. De LUA-taal is multi-threaded, fluch, en transaksjes en terminaleveneminten binne asynchronous. LUA is faker as QPILE, en in protte útwreidingen binne skreaun foar it.
De QPILE-taal is no ôfret. Eksperts op ‘e foarums advisearje it brûken fan LUA. Hoewol brûkbere en effektive programma’s wurde noch altyd brûkt.
De QPILE-taal is lykwols ienfâldich yn ferliking mei LUA, dus as jo gjin ûnderfining hawwe yn programmearring, is it better om QPILE te kiezen. Yn dizze taal kinne jo in ienfâldige robot skriuwe as jo gjin komplekse berekkeningen hoege út te fieren.
Hoe meitsje in hannelsrobot op QPILE?
Om in hannelsadviseur te meitsjen, hawwe jo de folgjende programma’s nedich:
- ITS Quik.
- Notepad ++ koade bewurker.
- Gids foar QPILE.
- XML-plugin foar koadedeteksje yn Notepad ++.
Download en ynstallearje dizze programma’s. Aktivearje de taalsyntaksis troch userDefineLang.xml te pleatsen yn it paad C:\Users\User\AppData\Roaming\Notepad++\
Litte wy earst de folgjende hannelstrategy oanmeitsje. It skript moat berekkenje Hi en Low foar de lêste pear kearsen elke minuut, kontrolearje de hjoeddeistige priis fan it ynstrumint. In posysje wurdt iepene yn de fereaske rjochting as de priis fan it ynstrumint berikt de maksimum of minimale wearde foar de perioade. As in sinjaal foar koarte wurdt ûntfongen, wurdt de lange posysje automatysk sluten. De robot brûkt it GAZP-ark, it tiidframe is ynsteld op 1 min. De hi-low mjitting djipte is ynsteld op 5 kearsen. Om yn te gean Long, wurdt in regel ynsteld en de krusing fan ‘e hjoeddeistige priis fan’ e maksimale wearde foar de perioade. De robot sil Koarte ynfiere as de hjoeddeistige priis de minimale wearde foar dizze 5 kearsen krúst. Skriuw in blok koade yn Notepad ++ mei basisynstellingen en serverdatum en tiid. Dizze koade wurdt werjûn yn ‘e ôfbylding hjirûnder.
De earste 4 rigels koade foarmje de programmakop. Tusken rigels 6 en 44 is it lichem fan it programma, dat befettet de ynhâld fan de robot. Rigels 7 – 12 befetsje brûkersynstellingen, dy’t de koades fan it ynstrumint, groep en kliïnt, it akkountnûmer op ‘e MICEX omfetsje. Dizze wearden feroarje net tidens programma-útfiering. Rigels 13 – 16 binne de begjinwearden fan ‘e fariabelen. Se wurde weromset nei nul op elke iteraasje pass. Rigels 17 – 21 befetsje in yndikaasje om de tsjinner datum en tiid te brûken. Dizze gegevens wurde trochjûn oan de DATETIME-funksje en omboud ta tekstformaat. Rigels 22 – 29 stjoere de ûntfongen gegevens nei de tafel. De koade moat bewarre wurde en de qpl-útwreiding moat wurde oantsjutte.
Iepenje it programma yn QUIK troch op Ctrl+F10 te drukken en it oanmakke qpl-bestân te selektearjen. Brûk de Ctrl+F11-kombinaasje om it finster “Wurkje mei portfolio’s” te iepenjen en de portfolioberekkeningsperioade yn te stellen op 5 minuten. Druk op Ctrl+F12 om de kolommen yn te stellen om yn de tabel wer te jaan. De foto lit it resultaat fan it wurk fan ‘e robot sjen.
Litte wy noch in pear funksjes en betingsten tafoegje oan ús programma.
It blok “Brûkerynstellingen” wurdt oanfolle mei de NUMBER en INTERVAL fariabelen, dy’t brûkt wurde yn ‘e funksje fan it krijen fan de lêste N balken. De DATETIME-funksje stelt de tsjinnerdatum en -tiid yn, en de aktuele datum- en tiidfunksjes CURDATE en CURTIME wurde derfan oproppen. De hjoeddeiske tiid wurdt omboud ta in nûmer op rigel 24. Line 26 stelt de tiid foar it algoritme te rinnen út 10:00:01 oan 18:40:00 UTC.
Meast faak, yndikatoaren, oscillators, statistyske berekkeningen wurde berekkene troch de lêste N kearsen fan de grafyk. QPILE hat gjin funksje foar it sammeljen fan it oantal kearsen N perioaden lyn as sadanich, mar der is in GET_CANDLE funksje dy’t tagong ta de kearsen op de grafyk troch datum en tiid yn tekst opmaak. Us koade befettet de funksje te krijen de lêste N bars OHLC (). It makket in kolleksje mei de parameters fan de lêste kearsen nested yn de COLLECTION list. It programma kontrolearret de INTERVAL-wearde, en as it net binnen it berik 0…60 falt, wurdt in berjocht werjûn dat de wearde net oerienkomt mei it tastiene berik. In MAP-kolleksje mei kearsen wurdt makke yn rigel 88. A FOAR loop polling de grafyk nei de fereaske djipte mei de INTERVAL stap fan de nije nei de âlde kears. Yn rigel 90, nei’t de syklus is ferklearre, giet de robot in ynterval werom. As jo in kears krije mei GET_CANDLE, pleats it yn ‘e BARLIST-kolleksje mei de funksje INSERT_COLLECTION_TEAM. As gefolch fan de wurking fan it kommando OHLC () wurdt BARLIST oanfolle mei de lêste kearsen út it ynstrumint chart yn it bedrach fan NUMBER. It oantal eleminten yn ‘e kolleksje wurdt oanfrege troch it kommando GET_COLLECTION_COUNT () en rapportearre troch de BARCOUNT fariabele. Serverdatum, tiid, wearden fan INSTRUMENT en BARCOUNT fariabelen wurde rapportearre troch SET_VALUE () funksje yn OUTPUT. Dizze array wurdt makke troch it kommando CREATE_MAP (). De gegevens falle yn ‘e oanpaste tabel, dy’t kin wurde sjoen yn’ e foto hjirûnder. de wearden fan de INSTRUMENT en BARCOUNT fariabelen wurde rapportearre troch de SET_VALUE () funksje yn OUTPUT. Dizze array wurdt makke troch it kommando CREATE_MAP (). De gegevens falle yn ‘e oanpaste tabel, dy’t kin wurde sjoen yn’ e foto hjirûnder. de wearden fan de INSTRUMENT en BARCOUNT fariabelen wurde rapportearre troch de SET_VALUE () funksje yn OUTPUT. Dizze array wurdt makke troch it kommando CREATE_MAP (). De gegevens falle yn ‘e oanpaste tabel, dy’t kin wurde sjoen yn’ e foto hjirûnder.
Trading robots op QPILE – klearebare oplossings
Bewegende gemiddelde robot
Demo-robot net geskikt foar echte hannel.
De robot befettet 5 parameters. DATE, TIME, PRICE identifier wearden binne ynsteld op nivo 30. MOVING en TP identifiers binne ynsteld op nul presyzje. Robotkoade op bewegend gemiddelde skreaun ûnder QPILE: [galery columns = “5” ids = “14896,14897,14898,14899,14900,14901,14902,14903,14904,14905,14906,14907”]
N. Moroshkin posysje rekkenmasine
In programma foar it berekkenjen fan ‘e nivo’s fan’ e maksimale tastiene drawdown en it doel foar lange en koarte posysjes by aktuele fraach- en biedprizen. De nivo’s wurde berekkene foar 2 wearden fan it folume fan posysjeyngong. De robot fynt de tastiene posysje folume by it tawizen fan in stop oarder yn ien stap fan de iepening priis mei de berekkening fan it iepenjen fan in posysje yn ‘e rjochting fan’ e bar groei. De fûne nivo’s wurde ynfierd yn it terminalfinster, dy’t dêrnei werjûn wurde yn ‘e priiskaart. Transaksjes wurde fêst foar in opjûne ynstrumint. As in posysje wurdt iepene, begjint de robot syn parameters te berekkenjen. Ofhinklik fan ‘e feroaring yn posysje, wurde de tawiisd oarders oanpast.
Folume filter
Portfoliorobot foar it berekkenjen fan it arithmetysk gemiddelde fan it folume foar kearsen en it fergelykjen mei it gemiddelde produkt troch de X-koëffisjint. Wurket korrekt mei plotte diagrammen yn ‘e selektearre tiidperioade.
Opsjes Griken
Portfolio foar it berekkenjen en werjaan fan “Griken” fan opsjes. It ferskilt fan ‘e Black-Showers-metoade.
TRIX hannelsrobot foar QUIK
It programma is basearre op de TRIX-yndikator. As de yndikator slút boppe de nul line, it oantsjutte nivo, de robot nimt de Long posysje. De posysje wurdt sletten troch Take Profit, Stop Loss of trailing stop.
M4 Preprocessor
Programma foar wurkjen mei QPILE en Lua. Omfettet argiven mei útfierbere bestannen, dokumintaasje en DLL-bestannen mei parsing fan reguliere ekspresje. Om it programma te brûken, moatte jo de útfierbere bestannen útpakke en regexp2 yn it C:\Windows-paad pleatse. Lessen oer QPILE foar QUIK: https://youtu.be/vMTXwDUujpI In skript ynstalleare op QPILE yn ‘e Quik-terminal: https://youtu.be/0B7qL8Svh7I In seksje oer github dy’t it gebrûk beskriuwt fan ‘e QPILE algoritmyske taal ynboud yn ‘e QUIK systeem wurkstasjon leit op de keppeling – https://euvgub.github.io/quik_user_manual/ch8.html. QPILE is in ferâldere taal, mar frij ienfâldich en tagonklik sels foar begjinnende hannelers. Hannelrobots en programma’s dy’t harsels al lang bewiisd hawwe, wurkje der fierder oan. Foar mear komplekse taken is it lykwols better om LUA te brûken.
0к