Въпрос: Може ли един пример за това би било в 23.40 затваря всички отворени позиции на пазара?
За да реши проблема, повдигнат в тази задача изисква следното:
Така че нека да започнем. На първо място, да работи с времето. Косвено, ние вече знаем как е. Нека да си припомним част от код на робота, който пише в клас 1-6:
Както си спомняте, това част от кода се показва съобщение в лог файл (в лог файл). Освен основните съобщения в дневника има дата и час. Ето пример:
15/10/14 12:53:58 граница: 0
10/15/14 12:53:58 OnTransReply
15/10/14 12:53:58 започва remember_order
10/15/14 12:53:58 remember_order: приложение е активно
15/10/14 12:53:58 флаг: 0
Нека разгледаме един пример:
В този пример, ние ще поискаме от датата като таблица дата и час, той се обърне към POSIX, а след това извежда резултата. Ние трябва да скочи първото съобщение тук е (ще има три):
Програмата превръща това формат обратно в таблицата, и показва датата и часа на екрана, позовавайки се на полетата в тази таблица:
И след това просто показва текущата дата и час:
Така че, обърнете внимание на последните два реда:
Те илюстрират как се работи с датата в таблица, за да постигне целта си - да затвори позицията на 23.40.
Така че, ние трябва да се датата и часа като таблица час и дата, за която ние използваме os.date () с "* т" параметър, вторият параметър е пропуснат, защото ние трябва да се текущата дата. Проверката дата получил часовника (трябва да е равно на 23) и минути (трябва да са по-големи или равни на 40):
Сега ние трябва да се приложи функция самата close_all_position на. Какво трябва тази функция? На първо място, да сортирате всички отворени позиции, и второ, за всяка отворена позиция, за да изложат на приложението да се затвори, а на пазара.
Както можете да видите, за разлика от това, което направиха в клас 6, ние използваме само един филтър от типа на граници, защото трябва да премине през всички инструменти, но ние не трябва да се помисли най-различни технологични ограничения.
Сега стигаме до пазара на приложения. Фондовият пазар е да се направи лесно, просто трябва да се сложи в полето ТИП към «М» вместо «L», а цената да се сложи нула тук е един пример:
С пазара на деривати това няма да работи. Там не може да изложи тип «М» приложение.
Как е възможно това? - Вие питате. Е, ние нямаме друг избор, както за изчисляване на пазарната цена и да го пуснат в дадено приложение. И как да се изчисли? Вие може да бъде взето от текущата таблица с параметри:
За достъп до текущата таблица параметър използване getParamEx, така:
Този пример показва цената на търсенето:
Съответно, за да се получи на цената на предлагане трябва да се използва «оферта» вместо «BID». За съжаление, на масата не futures_client_holding клас код, той ще трябва да получат отделно, например, по следния начин:
Сега, по-точно казано, вие знаете, за да се напише процедура насрочено за затваряне на всички позиции. В Приложение 1 ще намерите пример затворите всички позиции по график, изработен за малки обеми на търговия и за пазара на деривати (фючърси). Просто поставете в close_all_position функция код и Fn, и условията на повикване close_all_position чрез проверка на времето на мястото на своя код, който ще проверява времето, например, в основната линия.
Преминете към следващия въпрос.
Въпрос: UV. megabax въпрос - може да каже Lua скриптове, за да се използват външни DLL. Ако отговорът е да, може ли да се опише лечение? P.S функция синтаксис. Просто използвайте vneshneyudll podOmega писмен и искам да я "върже" с цените на структура Quick cherezLUA.
Така че, първо да създадете нов проект:
Вид на проекта «Win32 проект», Visual C ++ език:
Просто напишете в диалоговия прозорец за избор на проект, не забравяйте да включва името на вашия проект (с латински букви, без интервали) и да изберете директорията, където можете да поставите на проекта.
Тогава тук е Ще се отвори прозорец с вас, тогава вие трябва да кликнете върху "Напред":
И стигаме до диалога на настройки на програмата, е необходимо да изберете "DLL библиотека", всички "отмятане" Изпускане:
След това ще се създаде проекта:
Като правило, в горния десен ъгъл представяме Solution Explorer, което може да се види в дървото на обекти от нашия проект: Files C ++, включват файлове и други ресурси:
За да ни DLL-ку може да бъде свързан към Луа-скрипт, ние се нуждаем от lua5.1 библиотека и съответните заглавни файлове (всичко това, както и разпределение на пълно работно Луа може да бъде изтеглен от интернет страницата lua.org, тя се разпространява безплатно). Необходимите файлове се намират в Приложение 2 (източник DLL връзка пример за Lua на скрипта).
Така че, ние списък на файловете:
Всички те трябва да бъдат поставени в отделна директория, например, допринесоха и за удобство копирате тази директория в папката на проекта:
Сега ние трябва да се свържете тези файлове към проекта. За да направите това, в папката "заглавните файлове", създаване на нова папка:
В папката самата ще добави всички заглавни файлове от списъка:
След това те трябва да се появи в подходящия бранш:
Все още имаме lua5.1.lib файл. Той е свързан чрез свойствата на проекта:
Търсим в дърво, "конфигурация имоти" -> "свързваща" -> "Въведете" ключови:
Отиди на допълнителни зависимости, изберете "Промяна":
Добавяне на пътя към нашата библиотека вноската / lua5.1.lib:
Натиснете бутона "ОК", с изключение на проекта. Сега можем да отидете на програмиране. Dllmain.cpp отворите файла:
Тук виждаме функция DllMain. Това трябва да се направи, както следва:
Тук можем да включва необходимите библиотеки, определени директиви Препроцесорът и да се свързват библиотеката за работа с Lua. Имаме нужда от тях, за да получите от параметрите на функцията Луа-скрипт и функционира върне никаква стойност, както и различни помощни функции, като например регистрация на нови характеристики и така нататък. Всъщност, това е lua5.1.lib на връзката.
Освен това, след като DllMain ние поставяме нашите функции, които ще бъдат призовани от Луа-скрипт, например, са както следва:
// Добавянето на две числа
статични INT forLua_SummTwoNumbers (lua_State * L)
// получи първа и втора параметрите на функцията обаждане от стека с всеки тест за броя на
двойно d1 = luaL_checknumber (L, 1);
двойно d2 = luaL_checknumber (L, 2);
// място резултат на прибавянето на стека
lua_pushnumber (L, D1 + D2);
връщане (1); // това връща единична стойност
// добавяне на няколко номера, колко - не е известно по-рано
статични INT forLua_SummAllNumbers (lua_State * L)
конст Int п = lua_gettop (L); // брой аргументи приет
BOOL isNumberFound = фалшива;
за (INT I = 1; и <= n; ++i)
ако (lua_type (L, I) == LUA_TNUMBER)
ВЕИ + = lua_tonumber (L, I);
Моля, имайте предвид, че не можем да се регистрирате на функциите по тези имена, с която ние ги обявяват в C ++, и по другата. От Луа-скрипт функции се наричат с тези имена, при които са регистрирани.
Сега можете да компилирате. Ако след компилация не можете да намерите в резултат на DLL, можете да посочите конкретно име и път на изходния файл. За да направите това, отидете на свойствата на проекта, в бранша "конфигурация имоти" -> "свързваща" -> "General" сложи пътя на изходния файл и това, което ние трябва:
Той е в тази директория и се появяват DLL-ка тук.
Копирайте го в директорията с Quik-ти:
Освен това, вие също трябва да копирате директория QUICK lua5.1.dll. Тя също може да бъде взето от Lua на разпределение (или свързан към източник на изделие).
За да се свържете с DLL-ки sriptu употреба изисква функция, тук е синтаксис проба за нашия пример:
Dron, опитвайки се да направят нещо подобно, като се използва операторът на сън. Това означава, че на входа на OnQuote състояние с флаг, ако сигналът за откриване, знамето изпраща следния цитат на returne. докато след първото задействане не се проведе втората половина флаг и решава от първоначалната стойност. но такава система е работила само няколко цикъла, а след това затвори ..
Свързани статии