Anton, оно понятно, что какой-то формальный повод был. Но меня прежде всего интересовало - неужели не было никакого другого, более мягкого решения? Если, как вы предположили, дело в распараллеливании, то разве нельзя было просто ввести дополнительный параметр - идентификатор ядра?
27.02.2017 05:38:19 Alexey Ivannikov написал: валерий написал: У меня версия 7215 бкс. Если открыта ТОС например с выводом всех фьючерсов без фильтра, а потом создать вторую ТОС с каким-то одним фьчерсом, то и в первой все остальные кроме этого перестают выводиться (???). Впрочем и раньше замечал - по непонятным причинам переставали выводиться какие-то фьючерсы и приходилось перезагружать ТОС.Добрый день.
Ошибка будет исправлена в одной из очередных версий программы. Приносим извинения за причиненные неудобства.
Надеюсь не три года ждать опять. Тем более что проблема была не только не решена, а наоборот. Там автоменялся только общий фильтр на потоке, а теперь оба: и общий и в самих таблицах. И возможности сидеть на старой версии нет. Из-за непонятно зачем кому-то нужных 19 знаков в номере. Кстати интересно, может кто скажет зачем? Зачем 19 знаков?
Evgeniy Karnaukhov написал: можно настроить таблицу самостоятельно в её настройках с помощью фильтра инструментов
В том-то и дело, что нет. Вроде и можно, но фильтры постоянно слетают. Писал про это ещё 4 года назад. Обещали исправить, но стало ещё хуже. Пример. Талиц всех сделок нет. В потоке обезличенных сделок выбираем класс фьючерсы без фильтрации инструментов. Создаём окно ТВС. Квик предлагает класс фьючей без фильтра, что естественно. Принимаем и получаем ТВС со всеми фьючами. Создаём второе окно ТВС. Теперь в фильтре выбираем SiZ0. Получаем ТВС с одним выбранным фьючом. Вроде всё нормально. Но в первом окне, которое без фильтра внутри класса, начинает с этого момента идти только тот же SiZ0. Смотрим общий фильтр - он слетел, то есть поменялся на тот который установили в последнем окне, то есть на SiZ0. Снимаем фильтр. Теперь уж совсем вроде нормально. В первое окно вернулись все фьючи, а во втором только Си. Но заходим в окно 2 и видим - теперь там фильтр слетел. Но при этом получается, что продолжает работать. То есть фильтр работает один, а в настройках показывает другое. Глупо получается. Даже если работает, то чтобы запомнить какой фильтр в какой таблице надо записывать на бумажке. А если в окне надо поменять настройки, то фильтр ставить заново. А потом и снова общий фильтр на потоке. А если ещё таблицу создать, то там вообще непонятно что. Вроде простая логика и когда-то так и было. Общий фильтр на потоке и в рамках его выбор фильтра в конкретном окне. Зачем какое-то автоизменение, да ещё непонятно в какой логике. В общем, если 4 года назад я как-то приспособился, то сейчас пока совсем не получается. Всё как в пословице: Хвост вытащил — нос завяз, нос вытащил — хвост завяз.
Вот и я оказывается понял неправильно. Нужно выделить в таблице один фьючерс и он отфильтруется в таблице сделок. Но мне бы нужно именно группу. И к сожалению фильтры инструментов в самой таблице сделок, где по идее можно сделать группу, это та еще история. О чем, как посмотрел, давно идут холивары на форуме. А воз и ныне там. А я ведь помню время (давно на рынке), кода фильтры сделок работали нормально. Общий фильтр потока и конкретный в рамках общего фильтр в таблице. Вроде всё просо и фильтры не слетали и не изменялись сами по себе. Еще в версии 7,2,1,5, где косяки были, но кое как справлялся. А в 8-й,причем на которую вынуждено приходится переходить, никак не могу сладить с "автопомощью" или "автонастройкой" фильтрации.
Evgeniy Karnaukhov, нет понимаете неправильно. Поясню. В таблице торгов пара ликвидных фьючерсов. Сделки идут постоянно. Влючаю якорь - горит красным. В настройках потока выбираю класс Фортс без фильтра инструментов. Опция "с текущего момента" не включена. Создаю таблицу всех сделок. Автоматом получаю весь Фортс. Нажимаю на цепочку, выбираю красный. Ничего не меняется. По прежнему идет весь Фортс без фильтрации по инструментам в таблице торгов.
Попробовал по совету техподдержки воспользоваться таким простым и удобным способом настройки фильтрации таблиц с обезличенными сделками. Упс! Ничего не вышло. Квик 8,7,1,3. Горят красненький якорь и красненькая цепочка. А реакции (связи) никакой. Может кто подскажет?
s_mike@rambler.ru, маленький, но без участия такой код за день вырастет с 40КБ до десятка МБ. Оно конечно некритично, но некрасиво. И не знаю сбросится ли память при пересменке, если квик не закрываешь. Агрессивность сборщика это setstepmul
Игорь, нет, дело не в string.rep. Если поставить единичку вместо 500, то сборщик опять не вызывается. Похоже дело в медленном накоплении мусора. Может как-то можно настроить сборщика на такое, но я погуглил и внятного разъяснения не нашёл. Так что или методом тыка подбирать или просто и грубо установить предел памяти для активации сборщика.
А вот так сборщик работает хорошо - память сбрасывает:
Код
local stopped = false
function OnStop(flag)
stopped = true
end
function f11()
local fpath = getScriptPath() .. "\\tos11.log"
local f = io.open(fpath, "w+")
local fstr = string.rep("asd,qwe\n",500)
f:write(fstr)
f:flush()
f:close()
f = nil
fstr = nil
end
function main()
while not stopped do
f11()
sleep(100)
end
end
Странно, но ему похоже не нравится именно, когда в файл ничего не пишешь.
Вот такой простенький код даёт 1 МБ прироста памяти в час. Некритично, но непонятно почему. Так и должно быть или я что-то делаю не так?
Код
local stopped = false
function OnStop(flag)
stopped = true
end
function f11()
local fpath = getScriptPath() .. "\\tos11.log"
local f = io.open(fpath, "w+")
f:close()
f = nil
end
function main()
while not stopped do
f11()
sleep(100)
end
end
s_mike@rambler.ru, Я как-то так и думал. И как понимаю выхода нет? Или можно управлять порядком? По алфавиту? А что скажете про скорость? Не в курсе getCandlesByIndex вообще так работает или только в индикаторах?
написал простейший индикатор берущий данные из другой области диаграммы
Код
function RF()
return function(index)
if C(index) then
ind, n, l = getCandlesByIndex (Settings.tag, 0, index - 1, 1)
return ind[0].close
end
return nil
end
end
Вроде работает. Но. При загрузке квика выдает нули. Чтобы появились данные нужно нажать "применить" или "ОК". И что еще хуже, просто на глаз видно, что индикатор запаздывает причем до нескольких секунд. Что-то у меня не так или так и задумано?
Алексей, Ха. Вы будете смеяться, но я оказался прав от Арки можно ожидать и невероятного. Если график индикатора в каком-то окне сместить (Дополнительно - сдвиг графика), то сместятся и его индексы, то есть уже не будут совпадать с индексами аналогичных свечей второго графика.
Алексей написал: Ответ просто: ДА, можно быть уверенным.
Спасибо. Я тоже уверен и трудно было бы представить другую логику, но за время общения с Аркой я усвоил - от нее можно ожидать и невероятного. Хотелось бы услышать их подтверждение.
Понятно, что свечи на одном графике синхронизированы. Но можно ли быть уверенным, что и индексы у свечек с одинаковым временем всегда одинаковые (тогда можно искать соответствующую свечу на втором графике по индексу, а не таймстампу)? Мало ли как Арка их считает... Хочу знать наверняка от авторов.
Если два графика расположены в двух областях одной диаграммы, то нужно ли бары обязательно синхронизировать по времени баров или можно быть уверенным, что если индексы совпадают, то и время тоже?
Обновлять не хочется - итак все устраивало. Может подскажете в чем может быть причина? И вообще работало, работало и вдруг... Если причина не понятна, то где гарантия, что и после обновления "вдруг" опять.
У меня портфель делает некий расчет и выводит в таблицу, используя функцию:
Код
' Функция заполнить таблицу
' -----------------------------
FUNC FILL_TBL()
val1 = bar_time
val2 = signal_pos
val3 = current_pos
val4 = buy_quantity
val5 = sell_quantity
val6 = trans_id
val7 = pos_bal
val8 = status
map1=create_map()[IMG]c:\Users\ВГ\Pictures\portf.JPG[/IMG]
map1=SET_VALUE(map1,"val1",val1)
map1=SET_VALUE(map1,"val2",val2)
map1=SET_VALUE(map1,"val3",val3)
map1=SET_VALUE(map1,"val4",val4)
map1=SET_VALUE(map1,"val5",val5)
map1=SET_VALUE(map1,"val6",val6)
map1=SET_VALUE(map1,"val7",val7)
map1=SET_VALUE(map1,"val8",val8)
DELETE_ALL_ITEMS()
add_item(1,map1)
BGC = "DEFAULT_COLOR"
FC = "DEFAULT_COLOR"
if error <> 0 or check_deal >= 10 or check_frun <> 0
BGC = "RGB(250,200,150)"
end if
if status = "STOP"
BGC = "RGB(250,150,150)"
end if
if trade_on_of = "0"
FC = "RGB(50,200,50)"
end if
SET_ROW_COLOR_EX(1, BGC, "DEFAULT_COLOR", FC, "DEFAULT_COLOR")
tt = t_time(0)
WRITELN(logfile_path, signal_pos & "," & current_pos & "," & pos_bal & "," & buy_quantity & "," & sell_quantity & "," & last_price & "," & last_time & "," & best_bid & "," & best_offer & "," & status)
WRITELN(logfile_path, "END" & "," & tt)
END FUNC
То есть при каждом расчете удаляет строки и пишет ровно 1 строку. Все работало много лет. Но месяц другой назад он вдруг не с того, не с сего начинает добавлять строки не удаляя. Причем как-то хаотично, не в такт с периодом расчета, с пропусками и по две строки. Причем нумерация строк плывет. Образец в приложении.
Сначала это происходило иногда и где-то под конец вечерки. Но сегодня уже под конец основной. Хотелось бы понять, что делать.
Квик 6.14.0.12 Финам. И что любопытно точно такой же портфель нормально работает в БКС 6.16.1.15 и 7.2.1.5.
Sergey Gorokhov написал: Уточните, а если не было предыдущих свечей?
Я лично в таком случае заполняю первым, который есть. Да, заглядывание в будущее, но это редко и не критично. Но можно и оставить пустым - во всяком случае отработать пустое начало намного проще.
Какой простор для творчества вы отрыли на пустом месте. Сердце радуется...
Прошу зарегистрировать пожелание. Дайте возможность пользователю сделать выбор - заполнять пропуски OHLC предыдущими значениями, а V нулями. По крайней мере всегда будет отходной вариант если индикатор спотыкается на пропусках. Чтобы пока спокойно с ним разбираться. А если кого устраивает, то и продолжать пользоваться старым.
Sergey Gorokhov написал: Просто надо знать что предел существует.
Более чем туманно. Предел ресурса по отношению к чему? Вы что проверяете мощность моего компа? И почему на одной диаграмме нельзя, а делаю копию, то есть удваиваю "количество требуемых ресурсов" - так это можно? Провел эксперимент. Четыре раза сделал копию диаграммы с 10ю графиками-линиями. То есть всего 50. Это можно. Хотя ресурсов требуется в 5 раз больше. Впрочем на загрузке ЦП и на памяти особо не сказалось. В амиброкере строю вообще бывает кошмар сколько графиков (так удобно потом сравнить и отсеять ненужное) и он ни разу не пожаловался. А там еще история не 3000 баров...
Stanislav Tvorogov написал: Ограничение в 13 графиков в одном окне диаграммы
Прошу уточнить. В окне или по областям? На количество графиков или с учетом количества линий на графиках? И хорощо бы все это в хэлпе узнавать, а не на форуме.
RC2 написал: на каком языке проще будет переписать робота торгующего одновременно на нескольких таймфреймах, на qlua или qpile?
Купайлу капут, а с клуа замучаетесь. Все можно сделать в Ами и проще будет. Посмотрите http://bot4sale.ru/blog-menu/ami.html там много полезного, но не все бесплатно.
Stanislav Tvorogov написал: Ошибка возникает из-за того, что было превышено ограничение на количество графических объектов, допустимое для одной диаграммы.
Так откуда взялось это ограничение? И почему где-то десять с копейками графиков, а не 20 или 2. А что, 2 вполне достаточно добропорядочному пользователю. Сколько я не пробовал разных программ - такое впервые. А главное зачем?
Цитата
Для устранения достаточно либо удалить ненужные графики из существующей диаграммы, либо добавлять новые в другое окно.
Вы полагаете что два графика в разных окнах это все равно, что в одном? Можно конечно и на другом компе нарисовать...
Они меня не раздражают, но вот мешать могут. И так в них всякой хрени достаточно. Отключить тоже не очень хорошо. Сообщения нужные нужны. Более того нужны и звуки. А если вместо них сделать таблицу - звуков не будет
Sergey Gorokhov, Да уж... и вы предлагаете переходить с купайла на клуа?! Прошу зарегистрировать пожелание - дать возможность клиенту самому определять нужен ли ответ на транзакцию через сообщение квика.
Но я просто не представляю чтобы у всех такая куча сообщений не мешала нормальной работе... Или я что-то не догоняю?
Алексей написал: Недавно стал программировать на LUA и столкнулся со странной проблемой, собственно она в коде:
Код
function OnInit () end
function main ()
a = 130.01
b = 130.02 - 0.01
if a = = b then
message ( "a равно b" )
else
message ( "a не равно b" )
end
end
function OnStop () end
Вот это все я просто запускаю из QUIK. И получается 130,01 не равно 130,01, это как?
Это плавающая точка:
Код
>> a = 130.01
a =
130.0100
>> b = 130.02-0.01
b =
130.0100
>> a-b
ans =
-2.8422e-14
Посылаю заявку в скрипте луа sendTransaction, квик выдает сообщение "Заявка 25109199245 успешно зарегистрирована." Но я не прошу мне сообщать. И в купайле sendTransaction все делает тихо. В чем фишка?
Boris Litvinov написал: Он доведен до своих пределов. Но если вы найдете баги, и напишите на форум, вам ответят, и примут меры. А это значит поддержка есть.
Сомневаюсь. Ну например при запуске квика раньше скрипт запускался сам, а с 7-ки перестал. Надо ручками. Я правда не обращался за поддержкой, но вот теперь проверим как отреагируют.