Primim date de la quik pentru un robot de tranzacționare, un robot de tranzacționare

A doua etapă a planului de publicare se mișcă de-a lungul programului.

Deci, în QPILE există următoarele tipuri de date (exemplu):

STRING - string: "Profit" (citatele sunt doar astfel);

DOUBLE - număr în virgulă mobilă: 500,45;

COLECȚIA-colecție este o listă de obiecte, cu indexarea pe o cheie întregă, începând de la zero;

MAP - matrice asociativă - o secvență de date care este identificată prin valoarea și cheia acesteia.

Orice variabilă poate fi atribuită oricăror tipuri de date de mai sus.

Datele de șir sunt folosite pentru a identifica variabilele și valorile din tabele:

INSTRUMENT = "RIM9", în acest caz atribuim valoarea șirului RIM9 la INSTRUMENT.

MESAJ (INSTRUMENT, 1). După ce executați această instrucțiune, QUIK va deschide o fereastră de mesaj cu valoarea variabilei INSTRUMENT. S-ar părea că, chiar și ortografia numelui variabilei în acest caz este mai mare decât valoarea, deci de ce nu scrie codul doar valoarea? Răspunsul este simplu, există roboți, iar noi sunt create, în cazul în care are loc comerțul la un moment dat, am ales în avans a instrumentului. Un cod va fi de zece locuri în care avem nevoie pentru a compara cu o valoare literală, și trecerea la un alt instrument, trebuie să se schimbe în toate cele zece domenii ale scrierilor sale, și atunci când se referă la o variabilă de la începutul programului - doar o singură dată.

Un număr în virgulă mobilă, totul este simplu aici:

Aici am atribuit valori întregi variabilelor, pe care le vom folosi mai târziu în calcule, de exemplu:

A = (MOOVING1 + MOOVING2) * MULTIPLER / 100

Acțiunile în paranteze sunt efectuate în primul rând, toate ca în școală.

În timpul executării programelor, putem schimba dinamic tipul acestor două variabile, de exemplu:

KOEF = "3.14" - string (citate!), Și dacă facem o acțiune matematică cu ea. Apoi primim numărul:

A = KOEF + 0 - ca rezultat, variabila A = numarul 3.14 si invers, daca avem nevoie de un numar pentru a deveni un sir, trebuie sa combinam folosind simbolul , fie cu un șir gol, fie cu textul:

ca rezultat vom obține șirul de text "Coeficient 3.14"

Aceasta se face pentru mai multă flexibilitate, dar există un minus mic: la primirea tabelelor de date digitale, este necesar pentru a pune un zero (sau de a efectua orice alte operații matematice simple cu numere) la ieșire pentru a obține într-adevăr figura. Așa că am făcut primul nostru robotul atunci când prețul primit de la masa tuturor tranzacțiilor: PRET = GET_VALUE (GET_ITEM ( «ALL_TRADES», I), «PRET») + 0. Prin urmare, în cazul în care robotul dvs. de pornire va jura că încercați să compare diferitele tipuri de date, în primul rând, a se vedea în cazul în care pentru a adăuga „plus unu“.

Mergem mai departe - colecții și cartoane. Acestea sunt descrise în detaliu și frumos în "Ghidul utilizatorului QPILE". Nu este nevoie să le copiem aici - le vom discuta mai detaliat când le vom folosi la crearea robotului "Breakout".

Acum cele mai importante - Funcții pentru accesarea rândurilor tabelelor QUIK arbitrare. Pentru a funcționa corect un robot autonom, avem nevoie pur și simplu de următoarele informații ca aer:

  • Balanța curentă - pentru a calcula poziția;
  • Poziția netă actuală este de a evalua situația;
  • Valoarea actuală a GO - în cazul operațiunii FORTS, trebuie, de asemenea, să calculeze poziția;
  • Prețul instrumentului nostru;
  • Venitul / pierderea, ca suma de garanție și venitul acumulat - este de înțeles pentru ce;
  • Data;
  • timp;

Acestea sunt doar parametrii inițiați, în viitor vom avea nevoie de mult mai mult. Toți acești parametri trebuie să fie obținuți de la QUIK, cu fiecare execuție a programului (ne amintim că acesta este cel puțin o dată pe secundă), pentru o evaluare corectă și corectă a situației. Toate acestea sunt luate din locuri diferite, vom lua în considerare totul în ordine (FORTS):

Balanța actuală este luată din tabelul "Restricții la conturile client" din câmpul "Limita pozițiilor deschise" din linia # 1 (variază în funcție de broker):

MoneyCurrentBalance = GET_VALUE (GET_ITEM ("FUTURES_CLIENT_LIMITS", 1), "CBPLIMIT")

Dacă ne uităm la ceea ce a fost scris în propriile noastre cuvinte, obținem "valoarea CBPLIMIT de la linia numărul 1 din tabelul FUTURES_CLIENT_LIMITS.

Descrierea numelor de tabele și a parametrilor disponibili este prezentată în manualul QPILE din secțiunea 8.9.3

Poziția netă curentă:

TP = GET_VALUE (GET_ITEM ("FUTURES_CLIENT_HOLDINGS", 1), "TOTAL_NET")

Valoarea curentă a GO. Aici puțin diferit, tk. GO este disponibil în tabelul valorilor parametrilor curenți, funcția este puțin diferită:

GO = GET_VALUE (GET_PARAM_EX ("SPBFUT", Instrument, "selldepo"), "param_value")

Prețul = GET_VALUE (GET_PARAM_EX ("SPBFUT", Instrumentul, "ultima"), "param_value")

Profit = GET_VALUE (GET_ITEM ( «FUTURES_CLIENT_LIMITS», 1), «VARMARGIN») + GET_VALUE (GET_ITEM ( «FUTURES_CLIENT_LIMITS», 1), «ACCRUEDINT»)

Ce am uitat? Așa este! Adăugați zero la toate datele numerice obținute!

De asemenea, trebuie remarcat faptul că atunci când creați un robot de tranzacționare. datele trebuie primite o dată, de exemplu, poziția netă curentă, în timpul executării programului robot, nu se va schimba și acest lucru nu s-ar întâmpla în QUIK și numai data viitoare când robotul va fi pornit, va fi posibilă obținerea de date noi.

În următorul articol, sub titlul "Robot de tranzacționare", vom discuta algoritmul robot pentru strategia de tranzacționare "Defalcare" și apoi vom continua să îl creăm. Tot ce am discutat astăzi este util pentru noi.

Eugene, în general, într-unul dintre posturile următoare, ar fi interesant să vezi un exemplu de tabel cu modificări ale capitalului de timp cu un interval dat (TimeFrame) 1 min, 5 min, orar. opțional. O astfel de tabelă ar fi utilă apoi exportată la DDE în Excel și va compune graficul Equity. Principala dificultate, după părerea mea, este de a organiza toate informațiile din tabele: diferite limite, variații, venituri acumulate, comisioane de stoc, comisionul brokerului etc. și reflectă într-o singură cifră - starea actuală a contului (în conformitate cu prețurile de pe piață). Ar fi minunat să vă vedeți opțiunea!

Deci, acest tabel poate fi exportat în Excel.

Nu dă un rezultat cu o anumită frecvență

Starea curentă a contului nu este reflectată nicăieri. De exemplu, o comisie de broker se pierde numai dimineața.

Articole similare