Robostroy - cumik a bábuknak

Kérdés: Lehetséges-e, hogy 23.40-kor lezárják a piaci pozíció teljes megnyitását?

Az ebben a kiadványban felvetett probléma megoldásához az alábbiakra van szükség:

Szóval, kezdjük el.





Először az idővel dolgozni. Közvetett módon már tudjuk, hogyan. Emlékezzünk a robot kódjára, amelyet az 1-6. Leckében írtunk:

Mint emlékszel, ez a kód egy kimenetet küld a naplóba (a naplófájlba). A fő üzenet mellett a napló tartalmazza a dátumot és az időt. Itt van egy példa:

10/15/14 12:53:58 határérték: 0







10/15/14 12:53:58 OnTransReply

10/15/14 12:53:58 start remember_order

10/15/14 12:53:58 remember_order: az alkalmazás aktív

10/15/14 12:53:58 zászló: 0

Nézzünk egy példát:

Ebben a példában a dátumot datetime táblázatként állítjuk be, konvertáljuk POSIX-ba, majd kinyomtatjuk az eredményt. Az első üzenetet ki kell ugrani itt (három lesz):

Ezután a program visszaalakítja ezt a formátumot a táblázathoz, és megjeleníti a dátumot és az időt a képernyőn, hivatkozva a táblázat mezőkre:

Aztán ugyanúgy megjelenik az aktuális dátum és idő:

És így figyeljen az utolsó két sorra:

Megmutatják, hogyan kell dolgozni egy dátummal táblázatos formában, hogy teljesítsük feladatunkat - zárjuk le a pozíciókat 23.40-kor.

Tehát a dátumot és az időpontot datetime táblaként kell megadnunk, amelyhez a "* t" paraméterrel az os.date () függvényt használjuk, a második paramétert elhagyjuk, mivel meg kell adnunk az aktuális dátumot. A beérkezett időpontban ellenőrizzük az órát (23-nak kell lennie) és a percnek (nagyobbnak vagy 40-nek kell lennie):

Most magának kell végrehajtania a close_all_position függvényt. Mi ez a funkció? Először is, hogy rendezzék az összes nyitott pozíciót, másodsorban minden nyitott pozíciót, hogy kérelmet nyújtsanak be a bezárásra és a piacra.

Amint láthatjuk, a 6. leckében megfogalmazottól eltérően csak egy szűrőt használunk a határértékek szerint, mivel át kell mennünk az összes eszközön, de semmilyen technológiai korlátot nem kell figyelembe venni.

Most fordulunk a piaci ajánlatokhoz. A tőzsdén ez könnyen elvégezhető, csak tegye az "M" értéket a TYPE mezőbe az "L" helyett, és állítsa az árat nullára, itt egy példa:

A sürgős piacon ez a szám nem fog működni. Ott nem lehet "M" típusú alkalmazást elhelyezni.

Hogy legyenek? - kérdezed. Nos, nincs semmi hátunk, hogyan számítsuk ki a piaci árat és tegyük be az alkalmazásba. És hogyan kell kiszámítani? Az aktuális paramétertáblázatok közül választhat:

Az aktuális paramétertábla eléréséhez használja a getParamEx programot, például:

Ez a példa jelenti a kereslet árát:

Ennek megfelelően az ajánlati ár megszerzéséhez a "BID" helyett "OFFER" -t kell használnia. Sajnos nincs osztálykód a futures_client_holding táblában, ezért külön kell megkapni, például:

Most, tényleg, mindannyian tudjátok, hogy írjon egy eljárást az összes pozíció lezárására menetrend szerint. Az 1. mellékletben található egy példa zárjon be minden helyzetben a menetrend készült kis volumenű kereskedelem és a származékos piac (határidős). Csak helyezze be a close_all_position funkció kód és az fn, és a hívás close_all_position feltételek között időellenőrző helyen a kód, amely ellenőrzi az időt, például a fő hurok.

Folytassuk a következő kérdést.

Kérdés: Ув. Megabax kérdés - Mondd meg, hogy lehetséges külső DLL-ek használata a Lua szkriptekben. Ha igen, akkor írja le a hivatkozási függvény szintaxisát? Én csak az Omega alatt írt külső DLL-t használom, és szeretném "kicserélni" a Kvika-ra az LUA árinstrumentumán keresztül.

Szóval először hozzon létre egy új projektet:

Projekt típus "Win32 Project", Visual C ++ nyelv:

A projekt típus kiválasztó párbeszédablakban ne felejtse el megadni a projekt nevét (latin betűkkel, szóközök nélkül), és válassza ki azt a könyvtárat, ahová a projektet be kívánja hozni.

Ezután megnyílik ez az ablak, itt a "Tovább" gombra kell kattintania:

És folytatjuk a párbeszédpanelt az alkalmazási paraméterek beállításához, ki kell választanunk a "DLL könyvtárat", az összes "jelölőnégyzetet" le kell állítani:

Ezt követően megnyitjuk a létrehozott projektet:

Rendszerint a jobb felső sarokban van egy megoldás böngésző, amely megmutatja projekt objektumainkat: C ++ fájlokat, fejlécfájlokat, erőforrásokat stb.

Ahhoz, hogy a dll-ku lehet csatlakoztatni a Lua-script, szükségünk van egy könyvtár lua5.1 és a megfelelő fejléc fájlok (mindezt, valamint a teljes lua eloszlás letölthető a honlapról lua.org, elterjedt, hogy ingyen). A szükséges fájlok a 2. függelékben találhatók (a dll kapcsolódási példány forráskódja a lua scripthez).

Szóval felsorolom ezeket a fájlokat:

Mindegyiket külön könyvtárba kell helyezni, például a contrib-t és a kényelmet, és másolja át ezt a könyvtárat a projekt mappába:

Ezeket a fájlokat a projekthez kell csatlakoztatni. Ehhez hozzon létre egy új mappát a "Fejléc fájlok" mappában:

A saját mappában a fejlécfájlokat a listából adjuk hozzá:

Ezt követően a megfelelő ágban kell megjeleníteni őket:

Még mindig van a lua5.1.lib fájl. A projekt tulajdonságait összekötjük:

A "Konfigurációs tulajdonságok" fáról -> "Zeneszerző" -> "Bevitel":

További függőségekbe lépünk, válasszuk a "Módosítás" lehetőséget:

Hozzáadjuk az elérési utat a contrib / lua5.1.lib könyvtárához:

Kattintson az "OK" gombra, mentse a projektet. Most folytathatjuk a programozást. Nyissa meg a dllmain.cpp fájlt:

Itt látjuk a DllMain funkciót. Ezt így kell tenni:

Itt csatlakoztatjuk a szükséges könyvtárakat, telepítjük az előfeldolgozói irányelveket és összekapcsoljuk a könyvtárakat a lua-val való együttműködésre. Szükségünk van rájuk, hogy megkapjuk a funkció paramétereit a lua szkriptből, és értéket adjunk a függvényeknek, valamint különböző kiegészítő funkcióknak, például a hozzáadott funkciók regisztrálásához stb. Valójában ez a kapcsolat lua5.1.lib.

Ezután a DllMain funkció után elhelyezzük a funkcióinkat, amelyeket a lua parancsfájlból hívunk meg, például:

// Adjon hozzá két számot

statikus int forLua_SummTwoNumbers (lua_State * L)

// kapja meg a függvényhívás első és második paramétereit a veremről a szám minden egyes ellenőrzésével

kettős d1 = luaL_checknumber (L, 1);

kettős d2 = luaL_checknumber (L, 2);

// adja meg a köteg eredményét a veremben

lua_pushnumber (L, d1 + d2);

visszatérés (1); // ez a függvény egy értéket ad vissza

// több szám hozzáadása, hány - előre nem ismert

statikus int forLua_SummAllNumbers (lua_State * L)

const int = lua_gettop (L); // az elfogadott érvek száma

bool isNumberFound = hamis;

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

ha (lua_type (L, i) == LUA_TNUMBER)

res + = lua-szám (L, i);

Felhívjuk a figyelmet arra, hogy nem olyan névvel ellátott funkciókat regisztrálhatunk, amellyel C + + -ot deklaráltunk, hanem mások alatt. A lua parancsfájlból a funkciók neve alatt szerepelnek azok a bejegyzések, amelyek alapján regisztrálták őket.

Most össze tudsz fordítani. Ha a fordítás után nem találtad a fogadott dll-t, akkor megadhatod a kimeneti fájl nevét és elérési útját. Ehhez menjen a projekt tulajdonságaihoz, a "Konfigurációs tulajdonságok" -> "Zeneszerző" -> "Általános" ágban a kimeneti fájlt és az elérési utat adjuk meg, amire szükségünk van:

Ebben a könyvtárban van egy dll.

Másolja a Quik könyvtárba:

Ezenkívül másolja a fájlt a lua5.1.dll könyvtárba. A Lua eloszlásból (vagy a cikkhez csatolt forrásokból) is beszerezhető.

A dll-ki kapcsolódásához a parancsfájlhoz használja a require függvényt, itt egy minta szintaxisa a példánkhoz:

Dron, megpróbáltam valami hasonlóat csinálni, a kezelő alvását használva. Azaz, amikor az OnQuote állapotot a zászlóval jelzi, ha a jel nyitva van, akkor a zászló a következő idézőjeleket küldi a visszatéréshez. amíg az első művelet után nem lesz fél másodperc, és a zászló nem veszi az eredeti értéket. de egy ilyen rendszer csak néhány ciklust dolgozott, majd megállt ..




Kapcsolódó cikkek