Robostroy - qlua pentru manechine

Întrebare: Este posibil ca la ora 23.40 să se închidă toată deschiderea poziției pe piață?

Pentru a rezolva problema ridicată în această problemă, sunt necesare următoarele:

Deci, să începem. Mai întâi lucrează cu timpul. Indirect, știm deja cum. Să ne amintim o bucată de cod de la robot, pe care am scris-o în lecțiile 1-6:

După cum vă aduceți aminte, această bucată de cod afișează un mesaj către jurnal (în fișierul jurnal). În plus față de mesajul principal, jurnalul conține data și ora. Iată un exemplu:

10/15/14 12:53:58 limită: 0

10/15/14 12:53:58 OnTransReply

10/15/14 12:53:58 începe remember_order

10/15/14 12:53:58 remember_order: aplicația este activă

10/15/14 12:53:58 steag: 0

Să examinăm un exemplu:

În acest exemplu, setăm data ca o tabelă datetime, convertim în POSIX și apoi tipăm rezultatul. Trebuie să ieșim din primul mesaj aici (este vorba de trei):

Apoi, programul convertește din acest format înapoi la tabel și afișează data și ora pe ecran, referindu-se la câmpurile din acest tabel:

Apoi, în același mod, se afișează data și ora curente:

Așadar, atenție la ultimele două linii:

Ele ilustrează modul de lucru cu o dată sub forma unei mese pentru a ne îndeplini sarcina - să închidem pozițiile la 23.40.

Deci, avem nevoie pentru a obține data și ora ca un tabel datetime, pentru care folosim os.date () cu parametrul „* T“, al doilea parametru este omis, pentru că avem nevoie pentru a obține data curentă. La data recepționată, verificăm ceasul (trebuie să fie egal cu 23) și minutul (trebuie să fie mai mare sau egal cu 40):

Acum trebuie să implementăm funcția close_all_position în sine. Ce ar trebui să facă această funcție? În primul rând, pentru a sorta prin toate pozițiile deschise, și în al doilea rând, pentru fiecare dintre pozițiile deschise de a plasa o cerere de închidere, și pe piață.

După cum puteți vedea, spre deosebire de ceea ce am făcut în lecția 6, folosim doar un filtru după tipul de limite, deoarece trebuie să trecem peste toate instrumentele, dar nu trebuie să luăm în considerare limitele tehnologice.

Acum ne întoarcem la ofertele de pe piață. Pe piața de capital, acest lucru este ușor de făcut, puneți doar valoarea "M" în câmpul TYPE în loc de "L" și setați prețul la zero, iată un exemplu:

Cu piața urgentă, acest număr nu va funcționa. Acolo nu puteți pune o aplicație de tipul "M".

Cum sa fii? - întrebi. Ei bine, nu mai avem nimic, cum să calculam prețul pieței și să-l punem în aplicare. Și cum să calculezi? Puteți lua din tabela de parametri curente:

Pentru a accesa tabela de parametri curente, folosiți getParamEx, de exemplu:

Acest exemplu va raporta prețul cererii:

În consecință, pentru a obține prețul de ofertă, trebuie să utilizați "OFERTA" în loc de "BID". Din păcate, nu există cod de clasă în tabelul futures_client_holding, va trebui să fie primit separat, de exemplu, astfel:

Acum, de fapt, știți cu toții, pentru a scrie procedura de închidere a tuturor pozițiilor la un program. În Apendicele 1, veți găsi un exemplu de închidere a tuturor pozițiilor în funcție de orar, pentru volume mici de tranzacționare și pentru piața futures (futures). Doar introduceți în codul close_all_position funcția și fn, precum și condițiile de apel close_all_position prin cec timp la locul codului, care va verifica timpul, de exemplu, în bucla principală.

Continuăm la următoarea întrebare.

Întrebare: Ув. întrebarea megabax - spune-mi că este posibil să folosiți dll-uri externe în scripturile Lua. Dacă da, atunci ați putea descrie sintaxa funcției de referință? Eu folosesc DLL-ul extern scris sub Omega și aș dori să-l "tweak" la lista de prețuri în Kvika prin LUA.

Deci, mai întâi, creați un nou proiect:

Tipul de proiect "Win32 Project", limbajul Visual C ++:

De asemenea, în dialogul de selecție a tipului de proiect nu uitați să specificați numele proiectului (cu litere latine, fără spații) și selectați directorul în care doriți să plasați proiectul.

Apoi, veți deschide această fereastră, aici trebuie să faceți clic pe "Următorul":

Și vom trece la dialogul pentru setarea parametrilor aplicației, trebuie să selectați "Biblioteca DLL", toate casetele de selectare ar trebui să fie oprite:

După aceea, vom deschide proiectul creat:

De regulă, în colțul din dreapta sus avem un browser de soluție care arată arborele obiectelor noastre de proiect: fișiere C ++, fișiere antet, resurse etc .:

Pentru ca dll-ku să fie conectat la scriptul lua, avem nevoie de biblioteca lua5.1 și de fișierele antet corespunzătoare (toate acestea, precum și distribuția completă de lucru pot fi descărcate de la lua.org, acestea vor fi distribuite gratuit). Fișierele necesare sunt prezente în Anexa 2 (codul sursă al exemplului de conexiune dll la scriptul lua).

Deci, voi lista aceste fișiere:

Toate acestea trebuie să fie puse într-un director separat, de exemplu, contrib și pentru comoditate, copiați acest director în folderul proiectului:

Acum trebuie să conectați aceste fișiere la proiect. Pentru a face acest lucru, creați un folder nou în dosarul "Header Files":

Și în folderul însuși adăugăm toate fișierele antet din listă:

După aceea, acestea trebuie afișate în ramura corespunzătoare:

Mai avem dosarul lua5.1.lib. Îl conectăm prin proprietățile proiectului:

Căutând arborele "Configuration Properties" -> "Composer" -> "Input":

Mergem în dependențe suplimentare, alegeți "Schimbați":

Adăugăm calea către biblioteca noastră contrib / lua5.1.lib:

Faceți clic pe "OK", salvați proiectul. Acum putem trece la programare. Deschideți fișierul dllmain.cpp:

Aici vedem funcția DllMain. Ar trebui făcută astfel:

Aici conectăm bibliotecile necesare, instalăm directivele preprocesorului și conectăm bibliotecile pentru a lucra cu lua. Avem nevoie de ele pentru a obține parametrii funcției din scriptul lua și pentru a returna orice valoare funcțiilor, precum și pentru diferite funcții auxiliare, cum ar fi înregistrarea funcțiilor adăugate și așa mai departe. De fapt, aceasta este conexiunea lua5.1.lib.

Apoi, după funcția DllMain, vom plasa funcțiile noastre, care vor fi chemate din scriptul lua, de exemplu, acestea:

// Adăugați două numere

static int forLua_SummTwoNumbers (lua_State * L)

// primiți primul și al doilea parametru ai apelului funcției din teanc cu fiecare verificare a numărului

dublu d1 = luaL_checknumber (L, 1);

dublă d2 = luaL_checknumber (L, 2);

// pune rezultatul adăugării pe stivă

lua_pushnumber (L, d1 + d2);

retur (1); // această funcție returnează o valoare

// adăugarea mai multor numere, câte - care nu sunt cunoscute în avans

static int pentru Lua_SummAllNumbers (lua_State * L)

const int n = lua_gettop (L); // numărul de argumente adoptate

bool esteNumberFound = false;

pentru (int i = 1; i <= n; ++i)

dacă (lua_type (L, i) == LUA_TNUMBER)

res + = lua_tonumber (L, i);

Rețineți că putem înregistra funcții care nu sunt sub denumirile prin care le-am declarat în C ++, ci în altele. Din scriptul lua, funcțiile sunt numite sub numele în care au fost înregistrate.

Acum puteți compila. Dacă după compilare nu ați putut găsi DLL-ul primit, atunci puteți specifica numele și calea specifică a fișierului de ieșire. Pentru a face acest lucru, du-te la proprietățile proiectului, în ramura „Configuration Properties“ -> „Linker“ -> „General“ a pus o cale de fișier de ieșire și ceea ce avem nevoie:

Este în acest director că vom avea un dll.

Copiați-l în directorul cu Quik:

În plus, trebuie să o copiați și în directorul lua5.1.dll. De asemenea, poate fi luată din distribuția lua (sau din sursele atașate articolului).

Pentru a conecta dll-ki la script, utilizați funcția necesită, aici este o sintaxă de exemplu pentru exemplul nostru:

Dron, am încercat să fac ceva similar, folosind somnul operatorului. Adică, atunci când intră în condiția OnQuote cu steagul, în cazul în care semnalul este deschis, atunci steagul trimite următoarele citate către returne. până după prima operație nu va dura o jumătate de secundă și drapelul nu va lua valoarea inițială. dar un astfel de sistem a funcționat doar câteva cicluri, apoi sa oprit ..

Articole similare