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

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

Страницы: Пред. 1 ... 16 17 18 19 20 21 22 23 24 25 26 ... 41 След.
[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
БорисД, Ну так что, господа? Кроме этого визжащего муделя никому нечего сказать? Тема никого больше не интересует?
Подскажите пожалуйста кто знает
 
БорисД, Это одно и то же: голова и есть жопа.

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

А чего ты меня спрашиваешь? Мне почём знать, что ему в головожопу вдарило? Видишь, сайт мой изучает. Только ему уже ничего не поможет...
Подскажите пожалуйста кто знает
 
Владимир, Ой, Борь, прости - это я, разумеется, не тебк. :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()

[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Nikolay, А за какие хреном мне "показывать хоть что-то"? Да плевать мне сто раз на это дело! Борис лично мне симпатичен, и я готов ему помочь. Если это поможет другим новичкам торговать в Квике - ещё лучше.

Вот видите - у Вас "тысячи строк кода и десяток библиотек". А у меня ни одной библиотеки и ни одной тысячи строк кода. Даже восьмисот строк нет. Это в развёрнутом виде - в рабочем скрипте так и вообще ОДНА строка. Правда, длинная. :smile:

Повторяю: В ГРОБУ Я ВИДЕЛ этот "opensource проект", и все GitHub и ZenHub, помноженные друг на друга. Мне вполне хватило Хабра. Я даже поэму про это дело написал - вот она:

ОЙ, БЛИН! Тут, похоже, спойлер разобьётся на тысячу элементов, так что я лучше под тегом кода зашарашу:
Код
Как Иванушка-дурачок на Хабр приходил

Захотелось однажды Иванушке
Пообщаться с профессионалами,
Поделиться своими мыслишками,
Да послушать советы их мудрые.

И погуглил немного Иванушка,
И увидел он ссылки рекламные
На сообщество оф разработчиков
Высочайшепрофессиональное.

Дескать, люди собрались здесь умные,
Уникальнейшим делятся опытом,
Хорошо тут живётся рекламщикам,
Аналитикам и дизайнерам,

Что равны все на Хабре участники,
Что контент только высшего качества,
Что само всё собой регулируют,
В общем, враки масштабов невиданных!

Осмотрелся немного Иванушка,
Почитал публикации местные,
Отобрал для себя интересные
И попробовал прокомментировать.

Но софтина в сообществе строгая!
Ваньке ХРЯСЬ промеж глаз сообщением:
И куда же ты прёшь, деревенщина?
Прямо с рылом свиным, да в калашный ряд!

Сброд ваш в статусе премодерации,
Комментировать вам не положено!
Стань сперва полноправным участником,
Опосля уж писульки подкидывай!

Напиши-ка статью интересную,
Да полезную для разработчиков.
Если выйдет она из Песочницы,
То позволят тебе комментировать.

Написал наш Ванюша статеечку
Про сортир всё про свой, про мочилово.
Не понравилось судьям название
(а ведь Ванька цитировал Путина!)

Что же делать - поправил заглавие,
Пропустили статью модераторы,
День лежит, два лежит, пятый день лежит...
Никому она не интересная!

Посмотрел тогда Ваня статистику
Чем же дышит всё это сообщество?
Оказалось, оно с наслаждением
Интеллект обсуждает искусственный.

Ванька накопипастил заметочек
По такой популярной тематике,
И собрал он их в здоровенный файл
До восьми мегов текста чистого!

И нарезал из файла великого
Сразу три статьи, для надёжности.
Тем же часом пришло приглашение,
Стал Иван-дурак полноправый член!

Комментаторы хлынули сотнями!
Комментарии хлынули тыщами!
Рейтинг Ваньки в топ-300 вскарабкался
(это при миллионе участников)!

Благодарности даже посыпались
За добротный стиль изложения.
Но недолго длилась идиллия:
Написал наш Иван про сортир опять.

То не тёмная туча затучилася,
То не громы ужасные грянули,
То не полчища злобных ворогов -
Налетело на Ваньку сообщество!

Интеллект из них прямо так и прёт!
И кричат, и ногами топают!
Описание, дескать, нечёткое,
И неправильно, дескать, считает он,

Алгоритм его - говно полное,
И он сложность имеет квадратную,
Тесты не репрезентативные,
Интервалы не доверительные,

Алгоритм этот он украл,
И подправил его в hex-редакторе,
А подходы все эти изложены
В документах столетней давности.

Кроме этого, стало сообщество
Оскорбляться взводами и ротами,
Всё засыпали антилайками,
Флудом, визгами поросячьими.

Тычут пальцами в третий том Кнута,
Прочитать его строго наказывают,
Да исходники требуют в студию,
С псевдокодами и блок-схемами.

Но ведь Ванька Кнута уже читывал
Тридцать лет тому и три года как,
И придурков, к Кнуту отсылающих,
Он гонял уж не раз хворостиною.

И поторкал Ванюша сообщество,
Да носами, да прямо по тезисам!
Что же пишете здесь вы бредятину?
Да Кнута-то вы сами читали ли?

Пуще прежнего стадо озлобилось.
Так и гадят ему антилайками,
Так и лепят постами сердитыми
(про Кнута, правда, больше не вякают).

Опустило Ивана сообщество
Вплоть до полной ему невозможности
Ни одной статьи в Хабре написать
И один только коммент в суточки.

А потом пришли модераторы
И немедленно Ваньку забанили.
На неделю забанили целую,
За слова его нецензурные.

Ванька, правда, обычно цитировал
Перл министра свово иностранного.
Но министра на Хабре не банили
Потому как туда он не хаживал.

Пригорюнился Ваня немножечко,
Глядь - а снова открыта Песочница!
За заметку туда - полноправный член!
А заметок у Ваньки - НЕМЕРЯНО!

Двое суток Иван в бане просидел
(ведь заметка на премодерации)
И вот снова он пред сообществом,
Птица-феникс, из пепла восставшая!

Двое суток Иван полноправный член,
Но потом его снова забанили
Тоже, вроде, за нецензурщину,
Но на этот раз дан бессрочный бан!

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

В настоящее время одиннадцать
Полнокровных у Ваньки заметочек.
И сегодня он - полноправный член.
Неизвестно, каким станет к вечеру.

Но теперь у него алгоритм простой:
Захотел написать ты заметочку?
Так пошли ты кого-нить подалее,
Получи ты свой "Read Only",

И Песочница снова откроется!
Зашарашишь туда ты заметочку,
Пара дней - и ты вновь полноправный член!
А заметок у Ваньки - НЕМЕРЯНО!

Кто же в нынешней Битве Эпической
Завоюет Победу Великую?
Наш Иванушка или сообщество?
Не проверить ли тотализатором?

Ставки Ванькою принимаются
Прям на карту его инвалютную.
Ваши выигрыши безразмерные
Вам заплатит Ванюша (наверное).

[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
BlaZed, Совершенно верно: "Читаем ласт из ТТТ, строим свечки самостоятельно, суперсекретная аналитическая функция, отправка транзакции без каких-либо проверок состояния". Оккам, батенька! И, поскольку сервиса для получения свечей здесь просто НЕТ, то я полагаю, что разобью вдребезги любые возможные возражения. А те "лапули" не умеющие писать на "чистом LUA", следовательно идут в жопу - эта ветка НЕ ДЛЯ НИХ.

Здесь на моей памяти никто и никогда не делился наработками. И я тоже не собираюсь. Но базовый каркас...
[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
БорисД, Да "критики" и подтянутся - куда они, нафиг, денутся? :smile:

Я понимаю, что "контроль  его работы в течении дня и перезапуск если отвалился  то  это не сложная задача" - я говорю: НА КОЙ всё это надо, не разобравшись в причинах? Деньги всё-таки. Ну, полежит денёк-другой - и чего? А вот если наторгует по неверным данным...

Да какая разница, что там "брокер в таблицу инструментов периодически накидывает"? Это ЕГО проблемы. А мы будем работать С НАШИМИ инструментами!

Nikolay, Разумеется, "это все равно будет решение для Вас" - каркас каждый настраивает именно под себя, и это правильно. Я же написал про чёрный ящик!

Евгений, Лапуль, не нарывайтесь, а? А то ведь я УМЕЮ вытравливать флудеров. :wink:


Ну что, вопросов по коду, как я вижу, нет (или те, у кого они есть, не осмеливаются их задавать, что монопенисно). Поехали дальше.

В число обязательных умений скрипта должно входить умение работать с файлами. Как минимум, он должен уметь читать данные своего портфеля при старте и писать их обратно в файл по выходу. Я настоятельно рекомендую писать их В ДРУГОЙ файл - у меня это IN.TXT и OUT.TXT. Причина: если что-то случится, то входной файл останется в неприкосновенности. А если всё нормально, то просто перебрасываем OUT в IN, и можно снова запускать скрипт. Кроме того, неплохо бы вести лог событий (у меня это LOG.TXT), в который я почти никогда даже не заглядываю, а если кому интересно ковыряться "в этом во всём", могут брать данные для своих баз данных и анализирлвать что хотят. Здесь, правда, есть нюанс: если Квик отвиснет, то лога последних событий там, скорее всего, не будет - да и хрен бы с ним! :smile:

С файлами всё просто: нужны 5 стандартных утилит, разработанных ещё при царе Горохе: open, close, read, write, seek. Причём seek лично мне даже не нужен, и я лишь буквально на днях узнал, что он тоже имеется в наличии.

Как я уже говорил, при останове скрипта с высокой вероятностью происходит потеря управления, а потому запись нужно выполнять внутри OnStop. Кроме того, из-за риска отвисания Квика в любой момент я сбрасываю дамп текущего состояния на диск каждые 5 минут "чтобы не было мучительно больно".

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

А под словом Оккам имелось ввиду именно это.

Видите ли, ЕСЛИ даже "сам квик периодически отваливается", ТО произошла какая-то страшная ошибка, и подключать сюда какую бы то ни было "автоматику", не разобравшись, что именно произошло есть просто безумие. Так что кому надо - пусть делает себе эту "програмульку которая  отслеживает Квика  работает он или  отвалился  и перезапускала его" - я этим заниматься НЕ БУДУ! У меня, кстати, первую минуту после запуска скрипт "прогревается" и никаких сделок совершать не может - для того, чтобы юзер успел посмотреть, всё ли в порядке и в случае чего остановить скрипт.

Nikolay, Естественно, я думаю за себя. раз я это ни разу не использовал, то и другим не надо. А вот если копму НАДО, то пусть и объясняет, за каким хреном это ему надо. Лично мне все эти "опционы, календарные спреды, роллирование контрактов, корзина продуктов как единая позиция и балансировка, многоступенчатые входы, профиты и т.д. и т.д." АБСОЛЮТНО по барабану!

Именно так: "Что же касается каркаса, то это не так и сложно сделать. По сути это, наверняка, есть у каждого, кто этим занимается".

Для составления ТЗ не обязательно не только понимать как они работают, но даже знать об их существовании. :smile:  У меня, кстати, вообще нет ни OnOrder ни OnTransaction - Оккам, батенька!  :wink: И о "клиент-серверном окружении" ничего знать не надо - по той же причине.

Между прочим, я УЖЕ получил тот самый "конечный результат" и сейчас потихоньку шлифую алгоритмы, чтобы получить уже результат идеальный. Да, меня вообще не интересуют ни фьючерсы, ни облигации, ни шорты, ни что-то ещё - только акции. Мне - хватает, а кому нет - это опять-таки ЕГО проблемы.
Запись в один файл из разных скриптов.
 
Nikolay, Так у меня нет никаких индикаторов. Нет, не было и не будет. :smile: Ну, а если и в самом деле "есть и решения через память", то только так и нужно работать. В моё время это называлось "ОЗУ двойного доступа".
[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
BlaZed, А чему тут верить? Сложно написать скрипт с общими элементами, коих можно по пальцам перечесть? Тоже мне, бином Ньютона!(с) :smile:

Прям уж "невозможно создать универсальный каркас робота до неприличия не раздув его не нужными функциями". Да как два пальца об асфальт!

И на "главный вопрос" есть простые ответы. Оккам рулит!

Графики меня не интересуют, скрипту онит нафиг не нужны - разве что юзеру для ручной торговли.

Что такое "динамически получать инструмент", я не знаю. Колбеков же (по Оккаму) всего две штуки. Не вижу проблем и с расчётом количества лотов, определением цены сделки и прочей подобной хренью. И на формирование trans_id сделаем ОБЩИЙ взгляд. Короче, приводите примеры - для того и ветка. И насчёт монстра не беспокойтесь - уверен, что уложимся в 20-30 кило кода.
Запись в один файл из разных скриптов.
 
Незнайка, Тогда страдайте. :smile:

В очередь, суки, в очередь!(с)
Каждый скрипт, который хочет что-то записать, подаёт заявку, его айдишка попадает в циклическую очередь (по хвосту). Диспетчер берёт очередную айдишку (по голове), и выставляет разрешение для этого скрипта писать. По окончанию записи айдишка сбрасывается, и это сигнал диспетчеру забрать очередной элемент из очереди, если он там есть.

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

Поехали дальше. Скрипт должен работать ДОЛГО - часами или даже днями, неделями и месяцами. А потому он должен содержать "внутре" бесконечный цикл и выходить по команде от пользователя. И здесь нас ожидает крупная неприятность, суть которой мне в своё время разжевал присутствующий в этой ветке Антон: скрипт теряет управление. А это форменное свинство: мы в таком случае можем потерять все данные за время его работы! В результате некоторых своих изысканий я пришёл к выводу, что финальные действия нужно выполнять прямо в прерывании OnStop, хотя это и выглядит просто варварством.

Организация цикла выполняется стандартным образом, установкой флага, который сбрасывается по OnStop (или в любом другом месте, причём в этом случае потери управления как раз и не происходит).

Ещё момент: с мнемоникой переменных и функций определяйтесь лично Вы, как заказчик - мне всё равно, и у меня эти имена, как правило, односимвольные (их я и буду давать "по умолчанию").

Итак, изменённый код нашего скрипта теперь выглядит так:
Код
f=true;   -- признак работы скрипта (false - завершение)
function main()   -- головная программа
 while f do       -- бесконечный цикл до остановки скрипта
  sleep(500);   -- величина самого быстрого прерывания по таймеру
 end;   -- конец бесконечного цикла
end;   -- конец функции main()

function OnStop()   -- вызов по нажатию кнопки "Остановка скрипта"
 f=false;   -- признак окончания бесконечного цикла
 return 500;   -- чтобы заканчивал работу скрипта побыстрее
end;   -- конец функции OnStop()

Здесь уже, похоже, должны появиться какие-то вопросы. Так что перекур до их получения.
[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Евгений, Лапуль, не путайтесь под ногами, плиз! Мы пишем работающий скрипт, здесь и совершенно бесплатно.
[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
БорисД, МЕНЯ такой вариант не устраивает! Уверен, что и его тоже. :smile:

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

Не надо никакого "своего скрипта" - напишем наш. Вот прямо здесь и сейчас! Во-первых, имя файла. Оно должно иметь расширение "lua". Назовём его, скажем, MyFirstProgram.lua. Во-вторых, туда надо бы что-то записать. С именем головной функции тоже проблем нет - она всегда называется main. Два дефиса (ну или минуса) - начало строчного комментария, пробелы, табуляция и переводы строк игнорируются. В принципе, конец строки означает также и конец оператора, записанного в этой строке, но мы на это полагаться не будем и заканчивать операторы будем "на всякий пожарный"! стандартным способом: точкой с запятой. А потому наш первый код выглядит так:
Код
function main()   -- головная программа
 message("Hello, World!");
end;      -- конец функции main()
Что это нам даёт? Очень многое! Если эта программа сработает, значит, в коде ошибок нет, файл лежит в нужном месте, интерпретатор Квика его видит и добросовестно выполняет. Ура, товарищи! Теперь осталось всего-то модифицировать код под наши потребности.

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

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

Ну что, господа, напишем? Что забыл? Где наврал?
[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
БорисД, Так вся эта ветка (как и подавляющее большинство других), в т.ч. и Ваши посты - один сплошной флуд. :smile: Я же предлагал создать здесь нормальный рабочий скрипт, тот самый "Hello, World!", то есть каркас, к которому можно будет подключать свои алгоритмы торговли. Концепция-алгоритм-код. И больше всего в этом должны бы быть заинтересованы именно Вы - заказчик, который хочет стать исполнителем.

У меня нет "файлика со свечами за пару лет. Точнее, я его выбросил - он уже не нужен. И я не знаю, зачем здесь нужны базы данных. Зачем хранить "преданья старины глубокой"? Что здесь вообще хранить? Только содержимое своего портфеля. Раньше собирался хранить свечи, но почти сразу понял, что и это не нужно. Ну, а так - помогу чем могу, конечно, если буду знать как. Так и другие участники форума занимаются примерно тем же самым.
не записывает больше одной сделки в файлик, CSV файл
 
Яна, Главный совет вовсе не про OnTrade - работайте в ОЗУ! Передавать данные через файл - это источник вечных глюков.
[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Anton, Не, для опыта лучше писать в своё удовольствие, ДЛЯ СЕБЯ. Я вот приобрёл опыт на шахматной программе - никакие "аккорды" такого опыта бы не принесли.

Да все мы лохи! Чего нам только ни "затирают"! Любой белиберде верим! :smile:  
не записывает больше одной сделки в файлик, CSV файл
 
Яна, Господи, какой ужас! Для новичка в программировании кода раз в пять больше, чем нужно. :smile:

Пока не глядя на код:
1. Данные об отправленной транзакции Вам не нужны, уверен на 99.999%.
2. Скрипт ничего не должен видеть "в файлике" - работайте в ОЗУ!

Теперь смотрим код:
1. OnTransReply - это информация о транзакции, но никак не о сделке. Лично я пользуюсь только OnTrade, что и другим советую. Кстати, учтите, что прерывания приходят пачками, обычно по три штуки на одно событие. Ага, Вы это вроде как учитываете, но ТАКОЙ учёт от ошибок не гарантирует: если проскочит прерывание с другой айдишкой (а оно проскочит - проверено!), а потом снова прилетит по этой же транзакции, то Вы уже перезапишете свой id_done, и посчитаете неверно.
[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Nikolay, Да пофиг! Гугл видит этот "Quantitative Analysis", а сайт всё равно не открывается.
[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Nikolay, Вон, GRNT опять лихорадит, третий день подряд - опять подпрыгнул на 20%. Я прям утомился его покупать и продавать, и акций уже почти не осталось. Ну какой, какой, какой анализ Вам способен подсказать ТАКОЕ?
[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Nikolay, Ай, бросьте! Я всю жизнь занимался сложными базами данных, причём при конвертации их в "нормальный" формат их объём уменьшался на порядок, а ошибки вычищались десятками тысяч. Пример - OSM. В текущем состоянии не проверял, но года два назад в этом терабайтном гадюшнике лежало 50 (прописью: ПЯТЬДЕСЯТ!) Южных полюсов! Что можно анализировать в таком говне? Кто сказал, что "чем больше данных, тем лучше"?

Не знаю, что там у Вас за "определение" - страничка не хочет открываться.
Не удается получить доступ к сайту
Превышено время ожидания ответа от сайта www.investopedia.com.
[ Закрыто] Ищу спеца по ЛуаКвик, для долгосрочного сотрудничества по созданию робота и его доработкам или для консультаций и наставничества.
 
Nikolay, По-поводу "категоричности" я уже писал:
Я заранее предполагаю, что оппонент адекватен, что он меня уважает, что он предполагает, что и я его уважаю, что все тезисы (мои или его) есть соответствующее IMHO, что это не нужно проговаривать на каждый чих.

Я же спросил: ЗА КАКИМ ХРЕНОМ нужен этот долбаный SQL? КАКИЕ ТАКИЕ "задачи количественного анализа требуют набора статистических данных"? НАФИГА кому сдался этот "большой объем"?

Я когда-то качнул минутные свечи по нескольким сотням тикеров... не помню уже, за год или за полгода. Да, получилось несколько гигов - не такой уж страшный объём. Собрал их в один файл, сортирнул по времени - и всё, вуаля! Анализируй - не хочу! Ах, да - это же у меня где-то до сих пор валяется... вот фрагмент:
202001030959 AFKS 15.25
202001030959 AFLT 103.32
202001030959 AGRO 645
202001030959 ALRS 84.62
...
202001030959 MTLR 62.9
202001030959 NLMK 143.98
202001030959 NVTK 1264.2
...
202001030959 UPRO 2.808
202001030959 VTBR 0.046145
202001030959 YNDX 2712.8

202001031000 AFKS 15.295
202001031000 AFLT 103.18
202001031000 AGRO 647.6
202001031000 ALRS 84.46
...

А потом просто подавал эти данные на аход своей программе (тогда ещё написанной на C), как будто они приходят к ней в реальном времени и отлаживал свои алгоритмы. Потом переписал их на Lua и перебросил вход из файла на ТТТ Квика.

Что вы там "анализировать" собрались? Чем это вам поможет в задачах торговли? На кой это всё хранить? Мне лично этот массив давно уже нафиг не нужен - программа уже работает. И хорошо работает. А если что - подправим алгоритмы по результатам работы уже на реальных данных.
Страницы: Пред. 1 ... 16 17 18 19 20 21 22 23 24 25 26 ... 41 След.
Наверх