ПредишенСледващото

Въпрос: Може ли един пример за това би било в 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. докато след първото задействане не се проведе втората половина флаг и решава от първоначалната стойност. но такава система е работила само няколко цикъла, а след това затвори ..

Свързани статии

Подкрепете проекта - споделете линка, благодаря!