Пример за работа с файлове в QLua (Lua), BOT
Последни записи
Пример за работа с файлове в QLua (Lua)
Дмитрий, добре дошъл! Попаднах на това: когато бързите стартирания, моят lua скрипт трябва да стартира автоматично, но скриптът дава грешката ". 32: лош аргумент #1 за 'write' (очаква се низ, има нула)". След това го стартирам ръчно и всичко върви както трябва. Пътят до файла е написан като:
Какво може да повлияе на това или имате ли някакви идеи как да го поправите?
Имате този ред, който връща нещо грешно money = getPortfolioInfoEx (firm_id, client_code, limit_kind) може би в момента, когато скриптът работи, стойностите все още не са заредени в таблицата
Благодаря за отговора! Наистина трябва да проверите за нула там. И числата не са кода на грешката, а номера на реда, където грешката не е залата. Ще го оправя.)))
Предположението ти беше абсолютно правилно. Този запис премахна грешката:
Радвам се, че всичко се е получило при вас!
Всичко е благодарение на добър учител.
Е, днес направо ме похвалиха, благодаря 🙂
Здравей Денис! Грешката се превежда като: на ред 32, аргумент номер 1 във функцията за запис е невалиден (очаква се низ, но вместо това е нула). Вижте какво се опитвате да запишете във файла на ред 32 и защо е нула (нула означава, че няма стойност)
Моля, погледнете, може би нещо не съм разбрал правилно. Има още въпроси: - как да презапиша всичко, което е написано преди това там в началото на отваряне на файл, т.е. по време на предишното изпълнение на скрипта? - как правилно да напиша пътя за местоположението на запис на файла, например до корена на диска с:?
Дмитрий! Правилно ли разбирам, че когато копирам Qlua скрипта, файлът ще бъде записан там? Поне аз все още не съм намерил друга опция с пътя за запис на файла.
Да подадегарантирано да бъде създаден в същата папка като скрипта, трябва да направите следното: f = io.open(getScriptPath().."\\param.ini", "w") https://quikluacsharp.ru/qlua-osnovy/servisnye-funktsii-qlua-lua/
Първо, всички наклонени черти трябва да бъдат екранирани с втора наклонена черта: f = io.open("C:\\param.ini","w"); Второ, за да създадете файл на устройство C, трябва да стартирате терминала като администратор. Трето, за да презапишете цялото съдържание на файл, е достатъчно да го отворите в режим на писане "w", т.е.:
Всяко ново извикване на този код ще презапише съществуващия файл
Брилянтен. Се случи. Просто прекрасно. Утре ще се опитам да допълня скрипта със свободни средства от таблицата с лимити за DS и всичко, което исках е готово. Въпреки че остава да се научи как да създавате таблици от тези данни, т.е. събиране на необходимите данни от различни таблици в една. Благодаря ви, без вас все още щях да се опитвам да овладея ръководството. Благодаря ти!
Радвам се за теб! Моля!
Но не, мисля, че разбирам, оказва се, че main () ще бъде изпълнен веднъж и след това ще остане в цикъл, докато скриптът бъде спрян..
Здравейте, правилно сте разбрали и това се прави, защото докато работи основната функция, работи и скрипта, ако не направите този цикъл, основната функция ще работи 1 път и скриптът ще спре.
И ако isRun е false, тогава main() ще се изпълни без забавяне от 100ms. нали
Добър ден, благодаря ви за помощта и информацията, която споделяте с нас. Има скрипт, който записва данните (цена и обем на Ri) от таблицата с всички сделки във файл. Файлът се създава ежедневно, с името на текущия ден. Имаме нужда от скрипт (пазарен профил), който да чете данните за предходния ден, да обобщава обемите на една цена и да ги показва графично или в таблица. Тези. трябва да видите цената на максималния хоризонтален обем запоследен ден. В момента възникна въпросът при изтеглянето на файла от предишния ден, кажете ми как да го направя. Скрипт за запазване на данни:
Дмитрий, въпросът е по-скоро как да изберете този, който ви трябва от куп файлове. Тези. папката съдържа файлове за всеки ден с име като 09.10.15.txt. Как мога да прочета файла 08.10.15.txt
може би това ще е полезно:
Дмитрий, благодаря, но ще се опитам да изясня. Как да поискате днешната вчерашна дата, след това да я свържете с името на файла и да я прочетете.
Но го намерих: getParamEx("SPBFUT", "RIZ5", "PREVDATE").param_value); вземете датата от предишния търговски ден, благодаря, ще опитам
Колкото и да е странно, но при заявка getParamEx("SPBFUT", "RIZ5", "PREVDATE").param_type) резултатът е 0. Защо е възможно това?
Може би това е стар параметър, който впоследствие е преустановен, защото няма такава колона в таблицата с текущи параметри.
Дмитрий, кажи ми как да разделя получения низ (80549; 30) на две числа, за да ги запиша по-късно в масив. Благодаря ви предварително.
Добър ден Благодаря много за сценария. Много полезна информация и много за научаване.
Юри, съжалявам, но намерих грешка в сценария! Печалбата на фючърсната позиция е изчислена неправилно (ред 675). Коригирах статията, моля, коригирайте я сами.
функция zakritie() -- действия, противоположни на влизане в позиция-- --също изчисляване на средни изходни цени --изчисляване на печалба край
Юрий, кажи ми, трябва ли да купя опцията, която е най-близка до текущата фючърсна цена, или най-близката отгоре, или най-близката отдолу?
Въпросът е премахнат, ще направя полетата в таблицата за въвеждане на кодове за опции и фючърси да се отварят.
Юрий, здравей! Завърши сценария, учи, има достатъчнополучи се много код, така че ако имате въпроси, не забравяйте да попитате!
Честно казано, надявам се, че от вашия пример, както ВИНАГИ, ще стане ясен принципът на действие и вие сами ще можете да направите обратната операция. И в отговор на вашия въпрос, скриптът трябва да запише информация за придобитата позиция, след което бих искал скриптът да запише информация за размера на печалбата и че е готов да събере отново позицията. Трудно е да кажа какво искам, без да разбирам как работи, но за удобство (в моя скрипт) мога да добавя функция: function zakritie()
въпросът е, че попитах като пример за последния пример. Но това, от което наистина се нуждая, е записване във файл (регистриране), тъй като няколко стратегии се търгуват на една сметка и ръцете все още се търгуват, и трябва да се науча как да работя с регистриране.
Юри, кажи ми, моля, как сценарият трябва да разбере, че печалбата е получена и е възможно да се спечели нов страдъл? Тези. схемата е следната: пускаш скрипта, той събира страдъла, записва във файла, че е въведен страдъла. Следващият път, когато скриптът прочете файла, той казва там съответно, че страдълът е въведен и скриптът не прави нищо повече. Имате ли нужда от скрипта, за да изтриете информация от файла при някакво събитие, или ще бъде достатъчно, когато затворите страдъла, просто да изтриете този файл и скриптът да започне отначало?
Юрий, здравей! Промених скрипта ти, реших, че в този случай няма смисъл да използвам файлове, проверете!
Добър ден, по чудо се натъкнах на вашия ресурс. Много добър ресурс, надяваме се да продължи. Наскоро се заех да чета отворени позиции от Quick от таблицата с лимити за ценни книжа + свободни пари и да ги запиша във файл по определен начин. В резултат на това го направих на Qpale (файлът е тук: https://dropmefiles.com/dd32j).Трябва да се прочете от друга програма. Но тестовете показаха, че това не е толкова надеждно, колкото може да се направи в QLua. Бихте ли ми помогнали да преправя посочения код, но на Qlua, опасявам се, че няма да мога да го направя скоро, защото. Qlua все още е "нова врата" за мен))). Благодаря ви за разбирането.
Здравейте! Благодаря ви за милите думи, ресурсът определено ще продължи и ще се развива. Честно казано, изобщо не съм запознат с QPILE, защото. когато започнах да се интересувам от тази конкретна тема, вече имаше QLua. Но твоята задача, както виждам, не е трудна. Ако познавате QPILE, тогава задайте конкретни въпроси, като например как да получите такива и такива данни в QLua, или разрешите такъв и такъв проблем, ще се радвам да ви отговоря.
Ако искате да ви дам готово решение без ваше участие, то това е само срещу пари 🙂
Димитри го разбра. Не съм познавач на QPILE и не съм програмист, просто имам голямо желание да направя това, което започнах. Сглобявам робот, макар и не на Qlua, но в бъдеще има такива планове. Засега правя Amibroker + Quik в комбинация чрез библиотеката от добре познатия български езиков ресурс на Amibroker. Четох отворени позиции чрез посреднически файл, точно затова попаднах тук. Тук има много полезна информация, надявам се да я използвам, когато пиша горния скрипт на Qlua, но след като прочетох частта, вече е бъркотия в главата ми. След това, с ваше разрешение, за момента ще задавам насочващи въпроси, може да е възможно да го направя сам, което няма да е излишно. Мога ли да ви помоля да дадете пример за разчитане от таблицата "Лимити за ценни книжа" на броя закупени лотове за всички инструменти от тази таблица с лимит Т + 2. Писането във файл вече е добре описано от вас, мисля да го пробвам сам и да освободя DS по аналогия с метода на четене на партиди, също ще го пробвам сам. Благодаря все пак.
Това ли ти трябва?
Моля! Просто поставете този код във вашия скрипт (може да няма нищо друго в скрипта), стартирайте скрипта в терминала и вижте какво се показва в съобщенията.
Благодаря за съвета за статията. Вече усуквам кода по аналогия с кода от заглавката на тази тема. Вече публикува съобщение. Друг въпрос. Този код ще изведе само последната стойност от таблицата или това е ограничение на изскачащия прозорец? Опитвам така:
Правилно ли разбирам, че съобщение трябва да се появява на всеки 0,4 секунди? Но по някаква причина скриптът се стартира за възпроизвеждане, но прозорецът се показва 1 път и след затваряне вече не изскача. Въпреки че може би трябва да е така, докато не капе по-дълбоко.
Съжалявам, изглежда разбрах защо възпроизвеждането на съобщението не се върти в кръг, разбрах, когато прочетох уводната ви статия.
Ако имате QUIK 7, тогава "Създаване на прозорец" -> „Всички типове прозорци“ -> „Други“ -> „Таблица със съобщения“, това ще отвори таблица, в която ще бъдат показани всички съобщения. И за да не се показват все още като изскачащи прозорци, направете следното: "Система" - "Настройки" - "Общи настройки" - "Съобщения", премахнете отметката от "Показване на полето за съобщения" там и щракнете върху "OK"
цикълът for минава през всички редове на таблицата с ограничения и за всеки ред, ако ограничението е T0, показва съобщение, но тъй като съобщенията пристигат много бързо, виждате само последното съобщение, въпреки че има няколко от тях, ако имате няколко ценни книжа T0 в таблицата, отворете таблицата със съобщения, както писах в инструкциите и ще ви стане по-ясно как работи скриптът и можете да използвате функцията за съобщения за отстраняване на грешки в скрипта, показвайки необходимата информация на правилните места в скрипта , а в таблицата със съобщения ще видите нещо като дневник на скрипта.
Но е интересноспособен ли е QLua на такова нещо: Има съответен цикъл, повтарящ се на редовни интервали, който приема стойностите на RSIx и ги записва в текстов файл:
t,n,i=getCandlesByIndex("RSI", 0, N-10, 10) Znach = t[9].close Znach1 = t[1].close
l_file=io.open("C:\\RSI\\rsi_i"..".txt", "w") l_file:write(tostring(Znach).."\n") l_file:close()
Но ето въпроса: Започва нов цикъл, взема се нова RSI стойност, записва се във файла и се затваря. Всичко се записва във файла - добре, но може ли да стане така: Така че при започване на нов цикъл и нова стойност на RSI, новата стойност на RSI да не презаписва старата, а да се вмъкне на реда отдолу? И за да могат тези промени да се наблюдават във файла, без да го затваряте и след това да го отваряте?