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 ..