Владимир (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 21 След.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
БорисД, Не смеши мою задницу! Мне АБСОЛЮТНО плевать на этого Евгения. Много чести чего-то там выяснять. Да и не звонил он никуда. Это у меня там друг зам мэра (служили вместе). Предыдущие поколения троллей раскапывали и мой домашний адрес, имена детей и прочую хрень. И тоже грозились приехать, прислать своих родственников, знакомых... все головожопые похожи, как обнояйцевые близнецы.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
БорисД, А тебе-то какая разница?  :smile: Мы уже выяснили, что ни тебе, ни мне здесь делать особо нечего, а прямая связь у нас уже есть. Просто я с детства не перевариваю распальцованных дураков и редко спускаю им такое поведение.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Евгений, Лапуль, нормальные люди, когда хотят "доказать кто я есть" цитируют МЕНЯ, а не высказывания разных шавок с битыми мордами обо мне. :wink:  
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Alexey Ivannikov, Ну что, есть ещё вопросы? Вытравить этого тролля несложно, но вы же меня и забаните. :smile:  
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
БорисД, Не вижу смысла, Борь. Если бы была обратная связь... здесь есть люди, мнение которых мне интересно и которые почти наверняка оказались бы полезны а обсуждении, но они молчат, как партизаны. А разговаривает вот это.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Евгений, Эвона какие раскопки!  :smile: Лапуль, Вы бы само обсуждение в Вики почитали, а не жалобы этого доцента, который считал себя крутым и, получив несколько щелчков по носу, тоже побежал жаловаться. А я в этой зоне раз эдак в сто более профессионален, чем в биржевой торговле - впоследствии я книгу по сложным базам данных написал. Впрочем, Ваш уровень интеллекта всё равно не позволит Вам что-либо там увидеть. Тем более, что Вы целенаправленно пытаетесь найти какую-то грязь, и я уже написал, ПОЧЕМУ Вы это делаете. Что же до стиля - вот подробное описание моего "идеального стиля общения" (в конце страницы) - подробное и без суфлёров.
http://sint.wc.lt/about.htm
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Alexey Ivannikov, Ок, у меня никаких претензий ни к Вам лично, ни вообще к службе техподдержки нет и не было.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Alexey Ivannikov, Да мы тут с Борисом поговорили - нам тут и так делать особо нечего: конструктивные разговоры здесь почти никогда не ведутся, моё предложение насчёт свечей (единственное, что меня здесь ещё интересует - всё остальное прекрасно работает) зарегистрировали уже дважды, но я уже и не надеюсь, что это когда-то будет реализовано - что тут ещё делать? Выслушивать таких вот "ораторов"?
GetItem не работает с пользовательскими таблицами
 
Alex, Даже в голову никогда такое не приходило. Таблица же моя! Я и так прекрасно знаю, что там за Item сидят и какой там NumberOf.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
БорисД, Ты думаешь, в первый раз? Сюда посмотри: https://forum.quik.ru/messages/forum10/message50034/topic5945/#message50034

Да плевать сто раз на это тупорылое говно! В жизни ни от кого не прятался! Пущай дрочит чего хочет!
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
БорисД, Не совсем так. Фотка эта действительно много лет висит у меня на сайте, прямо на морде, но в Раменском меня найти можно, я там бываю. Иногда. Ну, а где я сейчас нахожусь, из всех посетителей этого форума знаешь только ты. И я. Ах, да - мы ж с тобой одно и то же лицо! :smile:

Всё это хорошо, но народ в ветке наглухо замолчал. Боюсь, что навсегда... :sad:  
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Евгений, Лапуль, ты окончательно иопнулся? С какого хера я буду какому-то визжащему мудаку что-то "доказывать"? Лапуль, мне АБСОЛЮТНО насрать, что там в евойной головожое творится! Как правильно заметил Борис, этим ты лишний раз продемонстрировал, что как опер ты есть полное говно. Как и психиатр. Как и программист. Причём во всех трёх случаях пытавшийся корчить из себя профи. И Борис тоже никакому дебилоиду не должен ничего доказывать. Мне НАСРАТЬ, отстанешь ты от меня или нет - я вытравливаю головожопых много лет и на ПОЛНОМ автопилоте, при этом никогда не бегал к мамке жаловаться - куда ты, нафиг, денешься, "опер" сраный?
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
БорисД, Я уже говорил как это сделать: давать права модератора хозяину ветки - это автоматически снимает буквально ВСЕ вопросы.

Так он дурак, а ты нет!  :smile: Бронштейн говорил: "Шахматы - это простая игра". А оскорбить невозможно даже теоретически  -  можно лишь оскорбитьСЯ. Я тыщу раз говорил головожопым: "Хоть вы там все уссытесь, хоть усритесь, хоть мониторы слюнями забрызгайте - оскорбить меня у вас НЕ ПО-ЛУ-ЧИТ-СЯ!"

Ладно, я снова ушёл...
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Евгений, Ха-ха-ха! Лапуль, ты прелесть! Врач, который "с больными не связывается" - это НЕЧТО! Психиатр обдолбанный... :wink:  
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Евгений, Лапуль, так ты опер, психиатр или программист? А, понятно: ты тупорылое говно. Кстати, помницца, ты как "опер" грозился меня отсюда в понедельник убрать. Лапуль, напоминаю: сегодня уже вторник. :wink:  
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
БорисД, Так, ладно - скоро мне опять уходить, письмо твоё я ещё даже не читал - посмотрю поближе к вечеру.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Евгений, Лапуль, есть один неубиенный индикатор: это ты пасёшься на моём сайте, а не я на твоём - кому ны, нафиг, нужен?  :wink:

БорисД, Ох, не согласен! Именно модерация способна убить любое общение. Вытравить визжащее говно - не проблема, на том же "Хоботе" дискуссии длились месяцами, иногда даже годами, а число участников исчислялось десятками, модераторы, в основном, писали в ветках поств как обычные пользователь, а не "махали шашками", но редко какая шавка осмеливалась там вонять. Но пришло "новое поколение" модераторов, и теперь там тихо, как в могиле - профессионалы оттуда ушли, практически поголовно. А в своём "открытом письме Цукербергу" я когда-то писал:
Ещё задолго до своего появления на Facebook (и, возможно, до появления самого Facebook) я заявлял, что анонимные модераторы, действующие по непрописанным правилам, есть САМОЕ мерзкое, что я вообще видел в Интернет. Подтверждаю и сейчас: за все свои двадцать с лишним лет пребывания в Сети ничего более омерзительного я не видел.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
БорисД, Боря, я сейчас заглянул в начало ветки - оказывается, именно этот придурок что-то вякал про "цену вопроса". Я тогда сразу сказал: "Передо мною лох". Теперь понятно, почему он здесь пасётся - быдло, получившее щелчок по носу частенько начинает биться в истерике. :smile:  
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
БорисД, Я абсолютно уверен, что организация диалога на Lua просто не может не быть интересной подавляющему большинству пользователей - даже тем, кто реализовал свой диалог на внешних библиотеках (а для этого нужна определённая квалификация). Я в своей жизни написал немало диалоговых программ и знаю об этом практически всё.

Это у тебя "впереди длительные выходные", а у меня, пенсионера, все дни рабочие. :smile: Не знаю, я планировал одну поездку, но мой друг, к которому я собирался ехать, на операцию ложится, и я сейчас плохо представляю, где и что я буду делать в ближайшие дни.

А сегодня и завтра я часто буду вдали от компа (вот прям ща ухожу), так что разговаривать буду, в основном, только утром и вечером. Письмишко я тебе с утра послал... Завтра у меня тоже вакцинация. :smile:  
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
БорисД, Темой или визгами в ней? Думаю, скорее последнее. Ты же сам говорил, что
та придурь рейтинг ветки поднимает. :smile:  
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
БорисД, Ну так что, господа? Кроме этого визжащего муделя никому нечего сказать? Тема никого больше не интересует?
Подскажите пожалуйста кто знает
 
БорисД, Это одно и то же: голова и есть жопа.

Не, это врождённое - ТАК нажраться невозможно.

А чего ты меня спрашиваешь? Мне почём знать, что ему в головожопу вдарило? Видишь, сайт мой изучает. Только ему уже ничего не поможет...
Подскажите пожалуйста кто знает
 
Владимир, Ой, Борь, прости - это я, разумеется, не тебк. :smile:  
Подскажите пожалуйста кто знает
 
БорисД, Что там делать на Канарах, придурок? Хрустальная мечта закомплексованного идиота, никогда носа не высовывавшего из своего Усть-Задрищенска? Ты хоть немного головожопой-то шевели: ЕСЛИ у тебя "несколько тысяч скриптов", ЗНАЧИТ все они полное говно. Все до единого, включая последний. Лапуль, неужели ты даже до этого допереть не способен?
Подскажите пожалуйста кто знает
 
Евгений, Ну чего, лапуль, заткнулся или ещё повизжишь?
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Евгений, Повизжи, лапууль, повизжи - по "методике" говно должно отвизжаться. :wink:  
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
БорисД, Завтра посмотрю на свежую голову - устал я чего-то...
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Евгений, Я уже объяснял здесь пару раз: лапуля - это термин такой, доказавший свою ВЫСОЧАЙШУЮ эффективность в вытравливании головожопых - они на него клюют как на опарыша. И одновременно индикатор, что я уже к собеседнику не испытываю никаких чувств, кроме презрения. Доступно, лапуль? Хотя куда тебе - почитай свои вчерашние высеры - ты же КЛИНИЧЕСКИЙ дебил, лапуль!  :wink: Опер хренов. Подросток прыщавый, видать. Впрочем, какая разница? Это всё равно не лечится.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
БорисД, Борь, мы же, вроде, на "ты" перешли. :smile:

Да какое уж тут "согласие"...  :sad: Кроме закомплексованного визжащего придурка - ничего, даже после провокации. Схему организации диалога на Lua я привёл, и вряд ли можно выжать из языка больше. А подача/снятия заявок и вообще примитивна: заполнил поля нужными значениями, да послал транзакцию. Или получил прерывание и считал что нужно. Если не считать отсутствие какого-либо сервиса для получения свечей (имеющееся здесь убожество язык не поворачивается назвать "сервисом"), то больше и желать нечего.

Ладно, метать бисер мне тоже неохота. А с тобой отдельно разберёмся. :smile:  
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Что ж вы, черти, приуныли? Где критика? Мне обратная связь нужна! :wink:

Теперь визуализация, то бишь таблицы Квика. У меня их всего две, и больше мне почти наверняка не потребуется: одна висит постоянно, а во второй рисуется всплывающее меню. Такая схема, на мой взгляд, обладает змеиной гибкостью и обеспечивает всю необходимую функциональность. У меня, правда, есть три режима выдачи, а в новой версии даже всплывающее меню "едино в трёх лицах", но в "каркас" попадёт лишь одно из таких "лиц" и лишь один режим: "выдаём всё", причём  и то, и другое в кастрированном виде. Остальное уж как-нить сами, если кому что потребуется.

Нарисовать таблицу просто - вот примерный блок кода. У меня он вынесен в отдельную функцию для возможности исправления ошибки ПО QUIK (исчезновение текста в ячейках таблицы), а вы как хотите.
Код
T=AllocTable();   -- ID таблицы визуализации
SetTableNotificationCallback(T,E);
AddColumn(T,0,"",true,QTABLE_STRING_TYPE,0);
AddColumn(T,1,"Тикер",true,QTABLE_STRING_TYPE,8);
AddColumn(T,2,"Кол",true,QTABLE_STRING_TYPE,5);
AddColumn(T,3,"Курс",true,QTABLE_STRING_TYPE,10);
AddColumn(T,4,"%",true,QTABLE_STRING_TYPE,6);
AddColumn(T,5,"Цена",true,QTABLE_STRING_TYPE,10);
AddColumn(T,6,"%",true,QTABLE_STRING_TYPE,6);
CreateWindow(T);   -- создаем таблицу визуализации результатов
SetWindowPos(T,10,0,800,500);   -- положение и размер таблицы
Важными здесь являются две строки: а) подключение обработчика событий (у нас же не просто таблица, а меню!) и б) нулевой столбец (невидимый). Дело в том, что при сортировке или каких-то иных действий строки могут перетасоваться, а в нулевом столбце сидит индекс данного тикера в нашей таблице Lua. Так что где бы ни находилась строка, по которой мы шлёпнули правой кнопкой мыши, мы всегда знаем, что это за тикер и вызываем... правильно, контекстное меню именно для него. Но пока нам не хило бы заполнить эту таблицу значениями. У меня это делается в полуторасекундном прерывании, как организовать это прерывание я уже тыщу раз рассказывал, если что непонятно - спрашивайте.

Для начала надо набить её строками (это у меня тоже отдельная функция с той же целью), примерно так:
Код
local i;   -- параметр цикла
Clear(T);   -- обнуляем таблицу
for i=1,N do -- цикл по тикерам
 a[i][6]=InsertRow(T,-1);end;
Обратите внимание: не только таблица Квика должна знать индекс элемента в таблице Луа, но и наоборот.

А потом набиваем значениями:
Код
for i=1,N do -- цикл по тикерам (прорисовка таблицы)
 s=a[i][4];   -- предыдущее и последнее значение курса
a[i][4]=tonumber(getParamEx(a[i][0][0],a[i][0][1],"LAST").param_value);
Я ещё активно пользуюсь цветом, который у меня задаётся в так называемой "безопасной" палитре (00, 33, 66, 99, CC, FF). Неохота расписывать эту хрень - потренируйтесь сами (младший байт - R, средний - G, старший - B), цвет и текст задаются
Код
SetColor(T,a[i][6],-1,k,l,-1,-1);
SetCell(T,a[i][6],0,i);   -- нулевой столбец
SetCell(T,a[i][6],3,string.format("%1.2f",a[i][4]));
В общем, как-то так. Как это выглядит "в натуре", я уже показывал. Где-то у меня эта хрень валялась... ага, вот она:

Так, а что я ещё хотел? Да, пожалуй всё - хватит с вас! Ах, да - контекстное меню вызывается из мейна по глобальной переменной (ID тикера, по которому кликнули мышой) и коду её состояния, который может находиться в следующих состояниях:
0 - контекстного меню нет, и не надо
1 - контекстного меню нет, надо нарисовать
2 - меню есть, и слава богу
3 - меню есть, надо его убить
4 - меню есть, надо его убить и нарисовать новое.

Кажись, всё. Ах, да - ещё подача и снятие заявок, да получение сделок по OnTrade... знаете, а мне это надоело: визжать тут УХ какие мастера водятся, а как чуть до дела - тишина. МЁРТВАЯ тишина!

Такшта приостанавливаю я свои "дозволенные речи" до получения обратной связи. :smile:  
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Продолжим.

Для того, чтобы добить наш парсер, нам нужно предварительно разобраться со структурами данных. Их здесь две разновидности: таблицы Квика и таблицы Луа. Первые нам понадобятся чуть позже, для визуализации результатов работы скрипта и организации диалога с пользователем, а вторые представляют собой конструкции вида "key-value". Больше в языке фактически ничего и нет. Мозгов здесь не требуется - нужна только аккуратность, особенно с этой дурацкой "динамической типизацией", когда интерпретатор может в любой момент поменять тип данных, в зависимости от того, какая моча ему в голову ударит. Для удобства мы будем по умолчанию считать все значения строками, а вот ключи я рекомендую считать индексами, то есть мы делаем вид, что эти таблицы Луа являются обычными массивами. Ключи лично я нумерую "по-сишному", с нуля, при этом в нулевом элементе сидит, как правило, информация обо всём массиве, а в ячейках с ключами, представленными натуральными числами - о его элементах. Такой подход позволяет крутить циклы по этим таблицам (в т.ч. двойные, тройные) обычным образом. Второе: поскольку любой элемент мы также можем объявить таблицей, мы фактически имеем дело с деревом объектов, обращаться к листьям которого можно как к элементам многомерного куба: v=a[i][j][k][l];
Наконец, нужно помнить, что при инициализации этих таблиц элементы нумеруются с единицы, например:
o={1,0}; -- реверс 0-1
Здесь ключами этих элементов станут 1 и 2.

Заведём в блоке глобальных переменных такую вот конструкцию:
a={}; -- основная таблица для работы

Таким образом, наш парсер будет выглядеть приблизительно так:
Код
for l in F:lines() do    -- цикл по строкам файла данных
 _=_+1;   -- считана очередная строка
 s=l:sub(1,1);   -- первый символ строки может быть командой
 if s=="_" then loadstring(l:sub(2))();goto Q;end;
 if s=="-" then goto Q;end;    -- строка закомментирована
 i=l:find("\9");   -- разделитель кода класса и кода тикера
 if i==nil then goto q;end;   -- обязан быть во входном файле
 N=N+1;   -- добавлена строка нового тикера
 a[N]={};   -- общая информация по тикеру
 a[N][0]={};   -- справочная информация по тикеру
 a[N][0][0]=l:sub(1,i-1);   -- первым должен идти код класса тикера
 l=l:sub(i+1);   -- остаток строки из файла
 i=l:find("\9");   -- разделитель кода тикера и количества лотов
 if i==nil then goto q;end;
 a[N][0][1]=tonumber(l:sub(1,i-1));
 l=l:sub(i+1);   -- остаток строки из файла
 i=l:find("\9");   -- разделитель количества лотов и средней цены
 if i==nil then goto q;end;
 a[N][1]=tonumber(l:sub(1,i-1));
 l=l:sub(i+1);   -- остаток строки из файла
 i=l:find("\9");   -- разделитель последнего столбца
 if i==nil then goto q;end;
 a[N][2]=tonumber(l:sub(1,i-1));   -- средняя цена по всем лотам тикера
 if l:sub(i+1,1)~="#" then goto q;end;   -- контроль, что это именно наш файл
-- остальные данные добираем из ТТТ
 a[N][3]=0;   -- сумма затрат по тикеру
 a[N][0][2]=tonumber(getParamEx(a[N][0][0],a[N][0][1],"LOTSIZE").param_value);
 if a[N][0][2]==0 then a[N][0][2]=1;end;
 a[N][4]=tonumber(getParamEx(a[N][0][0],a[N][0][1],"LAST").param_value);
 a[N][5]=tonumber(getParamEx(a[N][0][0],a[N][0][1],"LASTCHANGE").param_value);
 a[N][6]=0;   -- код строки тикера в таблице визуализации
::Q::   -- метка эмуляции continue в цикле по строкам
end;   -- конец цикла по строкам входного файла
F:close();   -- закрываем входной файл
Вроде, так. Писал "вслепую", код не запускал, да и не собираюсь. Разумеется, дерево каждый может формировать по своему вкусу. Нужно только следить, чтобы WriteDump записал данные в том же виде - ведь при следующем запуске выходной файл станет входным.

Если кого-то раздражают повторяющиеся куски кода, может попробовать упаковать это дело в цикл, но, честно говоря, не советую. Для этой конструкции входного файла, возможно, и получится, но если понадобится запихнуть туда что-то более сложное - вряд ли. Объём кода и так небольшой, выполняется практически мгновенно даже при тысячах тикеров - чего ещё надо?

А теперь займёмся визуализацией. Перекур!
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
БорисД, Да откуда у него робот? Вон, чуть выше - этого придурка даже из оперов выгнали - пришлось переквалифицироваться в программисты. :smile:  
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
БорисД, Ну... я ить тоже "собственного робота создал и продавать его не собираюсь". :smile:  
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
БорисД, Да ладно, Борис, "не трогай Джавдетв".  :smile: Как говорится, "грешно смеяться над больными людьми". Этому придурку явно невдомёк, что угрозы - один из надёжнейших индикаторов труса.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Евгений, Что, головожопое в истерике? Ну, шайбу!  :smile:  
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Евгений, Лапуль, Вы дурак и трус. Нормальные люди не бегают к мамке жаловаться - тем более, по столь идиотским поводам. :wink:  
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Итак, структуры. Самая простая, конечно, у лог-файла. Формат там свободный - допустим, вот такой:
Код
Сделка 3699451517 по заявке 23096891843 Покупка SNGS: 36.21*1=3621.0
Сделка 3700211939 по заявке 23101571931 Покупка NLMK: 208.34*1=2083.4
Сделка 3700217106 по заявке 23101608106 Продажа OZON: 3914.0*1=3914.0
Сделка 3700698360 по заявке 23104613958 Продажа RUAL: 41.125*10=4112.5
Сделка 3700712138 по заявке 23104724596 Покупка LKOH: 6147.0*1=6147.0
Можно ставить метку о дате/времени, давать информацию о заявках, отладочную печать и вообще всё, что в голову взбредёт. Как выводить - тоже все знают:
F:write("Заявка "..xxx..": "..string.format("%1.3f",yyy).."\n");
Или что-то в этом духе.

А вот входной (он же выходной) файл уже требует внимания - он предназначен не [только] для юзера, но и для компа.

В соответствии с Оккамом, мультивалютная торговля в "каркас" не попадает - торгуем только на рубли, так что возьмём в брокеры Сбер, который на валюту не торгует и не собирается это делать. Причём я не согласен с Антоном: парсер должен быть именно свой, чтобы юзер имел возможность положить туда всё, что ему требуется, а не укладываться в прокрустово ложе стандартных парсеров.

Теперь подумаем, что там должно лежать. Информация о портфеле, конечно! Но тут нюанс: портфель не есть нечто застывшее, а потому включаем сюда те акции (кто хочет - облигации, фьючерсы и всё остальное, я не хочу), которые теоретически могут оказаться в нашем портфеле. Выглядеть этот файл будет примерно так:
Код
_AC="<торговый счёт>";   -- торговый счёт
_CC="<код клиента>";   -- код клиента
_M=1000;      -- количество свободной валюты
- это забугорные акции, торгующиеся за рубли
FQBR   AMD-RM   0   7012   #
FQBR   CSCO-RM   0   3789   #
FQBR   IBM-RM   1   9526   #
FQBR   INTC-RM   2   4154.33   #
FQBR   KHC-RM   0   2782   #
FQBR   TWTR-RM   3   4253   #
FQBR   UBER-RM   0   2973   #
FQBR   VTRS-RM   4   1183.17   #
- это рублёвые акции
TQBR   AFLT   1   70.44   #
TQBR   ALRS   0   141.9   #
TQBR   CHMF   1   1697   #
TQBR   GAZP   0   322.2   #
TQBR   GMKN   1   23152   #
TQBR   LKOH   2   6928   #
TQBR   MGNT   0   5303   #
TQBR   MTLR   15   138.75   #
TQBR   NLMK   1   275.7   #
TQBR   OZON   2   4362   #
TQBR   RASP   1   412.82   #
TQBR   RUAL   0   64.3   #
TQBR   SBER   1   333.33   #
TQBR   VSMO   0   24140   #
TQBR   VTBR   2   0.05129   #
TQBR   YNDX   0   4874.4   #
- акции с повышенным инвестиционным риском
TQPI   GRNT   50   0.6259   #
TQPI   SIBG   10   0.4305   #
TQPI   TUCH   42   1.684   #
Обратите внимание на первые 4 строки. У меня сделано так: строки, начинающиеся с символа "-" - это комментарии. Строки с первым символом "_" - это куски кода на Lua, заглатываемые парсером через loadstring. Все остальные строки - информация о тикерах (одна строка - один тикер). То есть мы имеем таблицу о пяти столбцах через табуляцию: код класса, код инструмента, количество лотов (не акций!) в портфеле, цена (средняя по всем лотам) одной акции (не лота). Последний столбец обозначает конец строки - хрен его знает, какой там символ конца строки, да и мне удобнее видеть, где строка кончается.

И на третью строчку посмотрите, которая "количество свободной валюты". Не скрипта собачье дело, сколько денег у меня на счёте лежит. Я ему дал тыщу рублей в зубы, и пусть выкручивается как знает!

У меня это дело выглядит заметно сложнее, но для "каркаса" и так сойдёт. :smile:

Вопросы?
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
За 30 лет, разумеется - очепятка.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Евгений, Лапуль, я в жизни ни от кого не прятался - у меня за 40 лет пребывания в Инете даже ника никогда не было, кроме rybvv, что означает Рыбинкин Владимир Владимирович. :wink:  
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Евгений, Лапуль, Вы меня не интересуете АБСОЛЮТНО. Отстали Вы, не отстали - по барабану. А раз уж откопали мой сайт прочтите там страничку с "методикой вытравливания головожопых".
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Евгений, Ну вот, лапуль, я же говорил - быдло от программирования обращает внимание не на тему, а на автора.  :wink: Предыдущие поколения головожопых откапывали даже мой домашний адрес, имена детей...


ALL
К сожалению, вынести из OnStop "неприличные" действия не удалось, а потому функция приобрела почти окончательный вид. Приводить полный код скрипта уже не стоит, ящетаю - только отдельных модулей или даже их фрагментов. Код OnStop у нас теперь выглядит так:
Код
function OnStop()   -- вызов по нажатию кнопки "Остановка скрипта"
 F:close();   -- закрываем лог-файл и сообщаем юзеру
 WriteDump();   -- записываем дамп состояния
 message("Файл результатов записан!");
 f=false;   -- признак окончания бесконечного цикла
 DestroyTable(T);   -- убиваем таблицу визуализаци и меню
 if m~=0 then DestroyTable(t);end;
 return 500;   -- чтобы заканчивал работу скрипта побыстрее
end;   -- конец функции OnStop()
function OnStop()      -- вызов по нажатию кнопки "Остановка скрипта"
end;            -- конец функции OnStop()
Заодно поправим список глобальных переменных (как я уже сказал, с мнемоникой определяйтесь сами, а пока они будут вот такими:
Код
f=true;   -- признак работы скрипта (false - завершение)
N=0;   -- количество доступных тикеров
m=0;   -- флаг состояния контекстного меню
T=0;   -- ID таблицы визуализации результатов
t=0;   -- ID таблицы контекстного (всплывающего) меню
CC="?";   -- код клиента
AC="?";   -- торговый счёт
Ну, а теперь начнётся АМБУЛА. :smile: То бишь структуры данных и парсер. Здесь уже начинаются кое-какие "ноухавные" вещи, которые я раскрывать не хочу, так что в "каркас" всё это дело попадёт в кастрированном виде.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Anton, Ну тогда Оккам рулит, обойдемся без pcall. :smile:  
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Anton,
1) Понятно. Я, как правило, сам организовывал буферизацию файловых операций (кстати, и буфер у меня был именно 4К), а потому не в курсе даже про сишный fflush.

2) Понятно. Насчёт "вынести бизнес-код из мейна" я согласен, но когда какая-то падла начинает чего-то чистить... Я программист, я и решаю, что есть мусор, а что нет :smile: .

Да, наверное, этот вариант завершения предпочтительнее - меня просто тошнит от необходимости выполнять завершающие действия в OnStop. Согласен даже смириться с наличием pcall - думаю, здесь и сам Оккам возражать не станет. Но ведь окна (в смысле, таблицы Квика) всё равно надо убивать? Или под "окнами" подразумевается что-то другое?
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Nikolay, Да чего там сложного? Я тоже Инет первый раз увидел в Мадриде в 1992, а в 1995 был уже сисадмином первого городского провайдера. И друзей немало появилось, хотя с некоторыми мы первоначально ругались так, что пух и перья летели. И в реале не раз встречались. Был такой случай: договорились мы о встрече в какой-то кафешке, прихожу - вижу, в углу столы сдвинуты и человек 15 сидит. Подхожу, спрашиваю, не здесь ли встреча? Да, говорят, а ты кто? Называюсь, в ответ... аплодисменты. Начинаю знакомиться - да я же всех знаю!

А вот в этих долбаных "социальных сетях" действительно "общаться конструктивно сложно" - они заточены именно под визги. Такие времена...  :smile:  
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
БорисД, Это не "поднятие темы" - это её замусоривание. Тем более, что ветки здесь не редактируются. Когда-то это мне тоже было интересно - я даже собрал коллекцию их высказываний обо мне, но они настолько уныло однообразны в массе, настолько предсказуемы, что мне это дело быстро надоело.

Вот кусочек моего давнего поста об этом на одном программистском форуме от 27.08.2009 10:24:
Они тщательно оберегают свою собственную задницу. Свой статус якобы программистов, якобы профессионалов. А "корпоративные интересы" заставляют их объединяться в стаи: пуще огня они боятся любой свежей мысли - даже не из своей "профессиональной" зоны - ибо каждая такая мысль есть риск вскрытия факта полного отсутствия оных в их собственных головах. На такие мысли они дружно набрасываются всей толпой.

Существует множество индикаторов, позволяющих отличить эту породу от других (ведь даже они сами с легкостью это делают). Вот некоторые:

1. Для "подтверждения" своих... мыслей они тычут пальцем в мегатонные доки, которые они якобы изучили (или хотя бы читали). Например, в трехтомник Кнута. Однако в последнее время (видимо, нарвавшись пару раз на тех, кто этого самого Кнута все-таки читал) предпочитают ссылаться на некие абстрактные "учебники" или там "документацию". Профессионал же не позволяет себе подобного НИКОГДА - он просто не умеет этого делать.

2. Они трусливы: своего личного мнения они не имеют, и отождествляют себя с толпой, используя при этом "ключевые слова" типа "всех", "всегда" и т.п.

3. Они никогда не кусают "своих", даже за совсем уж неприличные глупости. Здесь есть, правда, два исключения: "паханам" это дозволено. Но быть паханом опасно: поверженного вожака с наслаждением разрывает на куски вся свора (второе исключение).

4. Основное внимание они обращают не на тему, а на автора (одно время мне было забавно наблюдать за всплесками интереса к нашему сайту). У автора выискиваются разные "козюлины" с тем, чтобы сказать: как может этот идиот, который даже [содержимое найденной козюлины] вообще что-то говорить о [название темы].

5. Они используют слэнг, который (в отличие от слэнга профессионала) чрезвычайно неустойчив, как и колебания любой моды вообще. Помнится, меня чрезвычайно раздражало, когда хлынувшая в программирование вся эта толпа дружно начала чего-то там "юзать". Теперь это уже неприлично (подумаешь, какой-то несчастный класс) - теперь модно скорее "либать".

6. Они мерно "разговаривают" между собой, тщательно изображая, что их круг интересов резко отличается от темы - спрашивается, чего они тогда тут делают? Время от времени какая-нить сопля имитирует демарш - дескать, ее трепетная душа не может более этого идиот[изм]а выносить. Не верьте - никуда она нафиг не денется.

И т.д. - вы сами легко пополните этот перечень. Вот от таких "нахлебников" мне всегда хотелось ветку очистить.

Уже и с тех пор сколько лет прошло - новое поколение подросло. А визги всё те же, практически дословно.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Anton, Не, не, не - никаких ДЛЛ! :smile:

Насчёт констант и вообще мнемоники я согласен, но это не моё - мне всё равно как что называть. В своём любимом С я использую для этого #define или enum, а здесь... не заслуживает этот язык такого уважения.  :smile: Кстати, что за зверь flush и на кой он нужен? А onMainInit зачем? Почему этого не сделать прямо в main? OnInit я сразу же похоронил. Оккам также запрещает пользоваться error и pcall.

Идея с runStatus интересная - у меня похожая техника применяется для всплывающих меню. Но я не совсем врубился, что происходит. Можно описание процесса на русском языке?

Нет, я просто не хотел что-либо делать в OnStop - меня как программиста просто корёжит от такой "технологии". Но что делать? Сначала я пытаюсь разобраться с файлами, и здесь сбоев не случается, а потом пытаюсь убить открытые таблицы, и здесь уже пофиг, закроются они или нет. А вот когда сам Квик падает, причём в самых безобидных ситуациях - тут уже "против лома нет приёма".

БорисД,
Достойно это соревнование организовать, ч одной стороны, очень просто (достаточно наделить хозяина ветки правами модератора этой ветки, как это сделано, например, в Фейсбуке), с другой - этого не будет сделано никогда.

Евгений, Лапуль, Вы мне уже надоели. У Вас просто НА ЛБУ написано, что Вы есть полуграмотный неуч, который пыжится корчить из себя что-то состоятельное. Уймитесь по-хорошему, пожалуйста.

Nikolay, А Вы правила читали? Цитирую:
Обращаем Ваше внимание, что мы не занимаемся написанием скриптов для клиентов, такова позиция Компании, поэтому обращаться к нам с такими просьбами смысла не имеет. Однако мы не запрещаем искать такого рода услуги у нас на Форуме, подобного вида темы/сообщения не возбраняются.
Эта ветка как раз одна из немногих, которая почти идеально подходит к разделу "Программирование на языке Lua".

БорисД, Да я гонял троллей годами и стадами - у меня даже "методика вытравливания головожопых" имеется (на сайте у меня есть). А такой "пиар" привлекает не тех, кого хотелось бы видеть.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
БорисД, Ого разговорились! Ладно, пока не до этого - попозже почитаем, что тут: деловой разговор или визги поросячьи. :smile:  
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Anton, Посмотрел, не удержался.  :smile: Нет, не согласная я! Код парсера не такой уж и большой, но у меня там вовсе не таблица - там дерево! Там информация о моих сделках, о состоянии кошелька по разным валютам, всякие там коды клиента и номера счетов, статусы и рейтинги тикеров и всякая прочая лабуда. А в новой версии, когда сделки ещё и распределены по разным таймфреймам, деревце довольно ветвистое. Да и файл состоит отнюдь не "только из команд и комментариев" - их там никак не больше 5%. Что мне делать с этой несчастной "луа-таблицей"? Тем более, записанной "по-реляционному". Нафига все эти "classcode" и "seccode"? Сам порядок следования элементов говорит о том, что это за элемент, а тип разделителя полей и субполей позволяет запихнуть туда дерево (в принципе, даже граф общего вида, но это уже речь не про торговлю на бирже). Нет, мы пойдём другим путём, нам такой парсер не нужен. :smile:  
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Anton, Вы один их немногих на этом форуме, чьё мнение мне всегда интересно. Пока занят, так что почитаю и отвечу позже. Возможно, даже завтра.
Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Несколько удивлён практически полным отсутствием какой-либо конкретики. Впрочем, и я пока что ничего не написал, и работа с файлами довольно примитивна - по крайней мере, для тех, кто хоть как-то знаком  с программированием. Ладно, продолжим. Поскольку я сбрасываю дамп не только по выходу, но и каждые 5 минут (или, как говорит Борис, раз в час), целесообразно вынести её в отдельную функцию, примерно так:

А вот не буду расписывать - просто приведу новый вариант кода скрипта. Надо же хотя бы попытаться разговорить народ - ведь следующим этапом должны быть структуры данных, таймер и парсер, а это уже потихоньку становится не совсем уж простым делом. В общем, код новый, мудифицированный:
Код
f=true;   -- признак работы скрипта (false - завершение)
N=0;   -- количество доступных тикеров

function main()   -- головная программа
 local i,j,k,l,s,_;   -- переменные для текущих надобностей
 F=io.open(getScriptPath().."//IN.TXT","r");
 i=F;   -- костыль от дебилизма с goto
::q::   -- метка аварийного выхода
 if i==nil then f=false;message("Файл бракованный, строка ".._);return;end;
 _=0;   -- счётчик строк входного файла
 for l in F:lines() do    -- цикл по строкам файла данных
  _=_+1;   -- считана очередная строка
  s=l:sub(1,1);   -- первый символ строки может быть командой
  if s=="_" then loadstring(l:sub(2))();goto Q;end;
  if s=="-" then goto Q;end;    -- строка закомментирована
  i=l:find("\1");   -- разделитель кода класса и кода тикера
  if i==nil then goto q;end;   -- обязан быть во входном файле
  N=N+1;   -- добавлена строка нового тикера
-- здесь должен быть парсер - пора определяться оо структурами
::Q::   -- метка эмуляции continue в цикле по строкам
 end;   -- конец цикла по строкам входного файла
 F:close();   -- закрываем входной файл
 TC=os.time()-1615141312;   -- идентификаторы транзакций
 F=io.open(getScriptPath().."//LOG.TXT","a");
 if F==nil then goto q;end;   -- не удалось открыть лог-файл - авария
 message("Скрипт запущен, акций: "..N);
 while f do       -- бесконечный цикл до остановки скрипта
  sleep(500);   -- величина самого быстрого прерывания по таймеру
 end;   -- конец бесконечного цикла
end;   -- конец функции main()

function OnStop()   -- вызов по нажатию кнопки "Остановка скрипта"
 F:close();   -- закрываем лог-файл и сообщаем юзеру
 WriteDump();   -- записываем дамп состояния
 message("Файл результатов записан!");
 f=false;   -- признак окончания бесконечного цикла
 return 500;   -- чтобы заканчивал работу скрипта побыстрее
end;   -- конец функции OnStop()

function WriteDump()   -- запись текущего состояния портфеля в файл
 local i;   -- дескриптор файла
 i=io.open(getScriptPath().."//OUT.TXT","w");
 if i==nil then return;end;   -- не удалось открыть файл - авария
 i:write("Нужно определиться со структурами данных файла и ОЗУ\n");
 i:close();   -- закрываем выходной файл
end;   -- конец функции WriteDump()

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 21 След.
Наверх