Post "scris un robot pe qpile

Pe Internet, puteți găsi multe scenarii pe Qpile, dar nu există aproape nici un ghid simplu pentru "scrierea la QPILE de la zero". Prin urmare, vă prezentăm această serie de lecții. În prima lecție vom examina conceptele de bază ale QPILE, vom configura spațiul de lucru și vom crea baza pentru viitorul robot.






Instrumente de dezvoltare

unde <имя пользователя> - Contul în care sunteți conectat (ă).

Teoria QPILE

Fișierul programului începe întotdeauna cu titlul și se termină cu șirul "END_PORTFOLIO_EX".
Mai multe informații despre structura programului qpl și sintaxa pot fi găsite în manualul utilizatorului și ne referim la descrierea strategiei de tranzacționare.

Strategia de tranzacționare

Implementăm pas cu pas următoarea strategie în cod:
Modelul Qpile o dată pe minut calculează valoarea Hi și Low pentru ultimele câteva lumanari, verifică prețul curent al instrumentului și, dacă depășește prețul maxim sau minim pentru perioadă, deschide poziția în direcția dorită.
Strategia este reversibilă; când semnalul este recepționat scurt, poziția se închide automat și invers. Strategia este educativă și, prin urmare, cel mai probabil nu veți putea să câștigați bani, dar să înțelegeți principiile muncii QPILE este destul de :)

Parametrii sistemului de tranzacționare:

Codul programului

Mai întâi, scriem un bloc de cod, în care vor fi setate setările de bază, precum și data / ora de la serverul QUIK și numele instrumentului din tabel. Acesta ne va servi ca un cadru, pe baza căruia vom adăuga funcționalități suplimentare.

Cod 1.1
PORTFOLIO_EX HI-LOW ROBOT;
DESCRIERERobot pentru ruperea înălțimilor și minelor;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST ALL_FIRMS;

PROGRAMUL
'========= Setările personalizate =============
INSTRUMENT = Codul instrumentului "GAZP"
CLASSCODE = Codul grupului "EQNE"
ACCOUNT = "L00-00000000" 'aici introduceți numărul contului dvs. pe MICEX
CLIENTCODE = "00000" 'aici este introdus codul dvs. de client

'==================== Variabile ==================
HH = 0 'zero maximul pentru
LL = 10000000 'zero minimul pentru

'=============== DATUL ȘI TIMPUL SERVERULUI ===============
SERVERDATE = data serverului GET_INFO_PARAM ("TRADEDATE") în formatul DD.MM.RRRR
SERVERTIME = timpul serverului GET_INFO_PARAM ("SERVERTIME") în format HH: MM: SS
DATETIME (SERVERDATE, SERVERTIME) "apelați funcția date-timp

'=============== Datele din tabel ===============
DELETE_ALL_ITEMS ()
OUTPUT = CREATE_MAP ()
OUTPUT = SET_VALUE (OUTPUT, "SERVERDATE", SERVERDATE)
OUTPUT = SET_VALUE (OUTPUT, "SERVERTIME", SERVERTIME)






OUTPUT = SET_VALUE (IEȘIRE, "INSTRUMENT", INSTRUMENT)
ADD_ITEM (1, OUTPUT)

'=============== FUNCȚII ===============
"FUNCȚIA DATĂ ȘI TIMPUL SERVERULUI
FUNC DATETIME (FSERVERDATE, FSERVERTIME)
CURYEAR = SUBSTR (FSERVERDATE, 6,4) 'anul curent în format text
CURMONTH = SUBSTR (FSERVERDATE, 3,2) 'lună curentă în format text
CURDAY = SUBSTR (FSERVERDATE, 0.2) 'ziua curentă în format text
CURDATE = CURYEAR CURMONTH CURDAY "în format text

CURHOUR = SUBSTR (FSERVERTIME, 0,2) 'ceas curent în format text
CURMIN = SUBSTR (FSERVERTIME, 3,2) 'minute în format text
CURSEC = SUBSTR (FSERVERTIME, 6,2) secunde curente în format text
CURTIME = CURHOUR CURMIN CURSEC "în format text
END FUNC

PARAMETER SERVERDATE;
PARAMETER_TITLE Data;
PARAMETER_DESCRIPTION Data curentă;
PARAMETER_TYPE STRING (10);
END

PARAMETER SERVERTIME;
PARAMETER_TITLE Timp;
PARAMETER_DESCRIPTION Timpul curent;
PARAMETER_TYPE STRING (10);
END

PARAMETRU INSTRUMENT;
Instrumentul PARAMETER_TITLE;
Instrument PARAMETER_DESCRIPTION Tradable;
PARAMETER_TYPE STRING (4);
END

Codul trebuie copiat în Notepad ++ și salvat într-un fișier cu extensia .qpl

Analiza codului

Primele patru linii sunt titlul programului.
Mai departe între liniile PROGRAM și END_PROGRAM este corpul programului. Principala logică a programului este scrisă în corp:
Setările personalizate (codul de instrument, codul grupului, numărul contului de pe MICEX și codul clientului) sunt variabile. care nu se modifică în timpul executării programului.

O variabilă este o zonă de memorie a calculatorului cu o valoare variabilă, definită de program sau de utilizator.


Valorile inițiale ale variabilelor sunt "maxim pentru" și "minim pentru". Aceste variabile vor fi date la valorile inițiale (zero) la fiecare trecere a programului (iterație).

Apoi, vom obține data și ora de la server și le vom transmite funcției DATETIME, pentru a converti aceste date într-un format de text. Acest lucru va fi necesar pentru noi în viitor atunci când implementăm algoritmii programului.

Funcția în QPILE este o subrutină în care argumentele din corpul principal al programului sunt transmise printr-o virgulă pentru anumite procesări. În QPILE, puteți utiliza funcțiile furnizate de limba în sine (de exemplu, funcții pentru lucrul cu tabele) sau puteți defini propriile funcții (definite de utilizator). De obicei, sarcini comune (cum ar fi înregistrarea de informații într-un fișier jurnal, data și ora o cerere la server, rotunjirea numerelor, trimiterea de tranzacții la bursă, etc.) sunt puse în aplicare cu ajutorul funcțiilor. După executarea funcției, programul continuă să funcționeze din locul unde a fost apelată funcția.

Datele obținute sunt afișate în tabel. Parametrii PARAMETER, PARAMETER_TITLE, PARAMETER_DESCRIPTION, PARAMETER_TYPE sunt descriși în instrucțiunile de limbă QPILE, deci nu vom intra în ele în detaliu.

Încărcarea robotului în terminalul de tranzacționare QUIK

Pentru a încărca robotul în QUIK
  1. Setați portofoliul cu combinația de taste CTRL + F10 și selectați fișierul qpl din exploratorul pe care l-am salvat mai devreme.
  2. Setați perioada de calcul a portofoliului în formularul "Lucrul cu portofolii" în 5 minute (se numește prin combinația cheilor CTRL + F11)
  3. Definiți coloanele de afișat în tabel (CTRL + F12). În mod normal, adăugați toate coloanele de afișat în tabel.
  4. Algoritmul va începe automat

Rezultatul programului pe care îl vedeți în captura de ecran:

Post







Trimiteți-le prietenilor: