Игорь Б (Все сообщения пользователя)

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

Страницы: 1 2 След.
Вы не можете заменить заявку XXX. Повторите попытку позже.
 
Мне кажется, что не стоит решать эту проблему увеличением sleep. Надежнее сделать проверку наличия заявки по номеру в таблице заявок (или через OnOrder, как и предлагал админ). Получение номера заявки по OnTransReply не гарантирует появление заявки в таблице заявок без задержек. А если в таблице заявок этой заявки нет, то и переставлять нечего.
Ст.шага цены
 
В текущей таблице параметров столбец  "Ст.шага цены" пуст . В чем может быть проблема?
Запись в один файл из разных скриптов.
 
Перед записью проверьте, можете ли вы открыть файл для записи, не занят ли он другим процессом.
Код
    f = io.open(file,"+a");
   i = 0;
   while(f == nil) do
       i = i + 1;
      if i == 2000 then
         message("Не могу открыть для записи файл "..file);
            sleep(5000);
            error("");
      end;            
            f = io.open(file,"+a");
       sleep(1);
   end;
Перевод робота с lua 5.1 на lua 5.3
 
Код
["ORDER_KEY"] = tostring(keyNumber)
Попробуй так
["ORDER_KEY"] = string.format("%u", keyNumber);
Как объявить Двумерный массив с последующим заполнением уже в скрипте?
 
save = {};
for i = 1, 100 do
save[i] = {};
end;
Подскажите как отправлять инфу из QUIK в телеграм?
 
Начните с самого простого варианта - через файл.txt. Дальше разберетесь по мере развития схемы.
Подскажите как отправлять инфу из QUIK в телеграм?
 
Alex,
Цитата
1. Готово
2. Готово
3. Знаю только ПИТОН. ,(c++, c#, java) НЕ знаю
4. Вот это основная проблема! Читал кучу инфы но так и не допёр как сделать
5. С начала надо разобраться с пунктом 4 ))  
3.Если знаете ПИТОН, то пишите на ПИТОНе. Разницы нет. В инете есть примеры.
4.Т.е. Вы не знаете Lua(qlua)? Начните с его изучения. Этот форум как раз этому посвящен.
Подскажите как отправлять инфу из QUIK в телеграм?
 
Я делаю так.

Начни с конца.
1.в телеграм получи свой chat id
2.создай telegram bot и получи его token
3.возьми язык, который знаешь,(c++, c#, java ...) разберись как послать строку в телеграмм своему боту по token, который по твоему chat id пошлет тебе эту строку в виде сообщения
4.в lua напиши скрипт, который собирает нужную тебе инфо и передает(есть разные варианты) в программу, написанную на см.п.3.
5.(не обязательно) напиши красивую оболочку на языке, который знаешь, в которой ты делаешь выбор(ставишь галочки), какую именно информацию(большой список) тебе необходимо передавать из квик в телеграмм.  
Ошибка без указания строки в коде
 
Попробуйте обернуть в status_main, msg_main = pcall(function() end).
Второй параметр дасть номер строки с ошибкой.
Стакан котировок
 
Создаю стакан котировок, используя функции для работы с таблицами. Как сделать так, что бы "Лучшие котировки видны всегда"?
Узнать, что связанная со стопом лимитная заявка не прошла контроль лимитов
 
См. флаги для табл. Стоп-Заявки
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Цитата
У разных скриптов не получатся одинаковые ID?
Не думаю, что у Вас получится в один и тот же момент включить несколько скриптов.
os.time() у всех будет разный, а соответственно math.randomseed(os.time()) и ....
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Цитата
Есть идеи, как сделать уникальный trans_id в разных роботах без необходимости задавать свой диапазон (robot_id) внутри каждого робота (или их копий)?
Я уникальность обеспечиваю фиксированием момента времени включения скрипта, а не совершения транзакции. А уже дальше, если в скрипте есть сделка, то как обычно, к полученному случайному числу +1.
Отправка транзакции в сегменте фондового рынка (акции) - брокеры Финам / Сбербанк, какой формат и где брать код клиента?
 
Есть робот, который работает через втб, как на срочном, так и на фондовом(использовал "CLIENT_CODE/").
Через сбер на срочном работает, на фондовом пишет  Не указан код клиента.
В ручном режиме заявки проходят.
В роботе пытался
"CLIENT_CODE"
"CLIENT_CODE/"
"CLIENT_CODE//"
"CLIENT_CODE///"
В тех.поддержке сказали, что никаких спец.установок не используют(по вопросам роботов вообще не консультируют).
Если кто реально работает через сбер поделитесь опытом.
Подкиньте идею
 
Старатель,
Цитата
Старатель написал:
Второй файл как раз служит для писателей индикатором, что первый файл занят, и запись не возможна.Как только приёмник прочитает данные, он удаляет 2-й файл, что сигнализирует о возможности записи.Т.е. организуются синхронные запись/чтение.
Я делаю так же, только с одним файлом. Передатчик создает файл и пишет туда инфу. Приемник смотрит наличие этого файла. Для него это флаг, что можно читать свежую инфу. Он (приемник) ее читает и удаляет файл. Для передатчика отсутствие файла означает, что файл прочитан и можно создавать файл для передачи новой инфы. Если это и хуже варианта с двумя файлами, то интересно чем?  
Функции onInit, onStop, onClose
 
Цитата
Кто сказал, что "это строка"?! Я совсем недавно отменил tonumber для этой операции.
Руководство пользователя Qlua
param_valueSTRING
Функции onInit, onStop, onClose
 
x = getParamEx (classcode, seccode, "last").param_value;  -- это строка
if x then
    x = tonumber(string.format("%."..scale.."f", tonumber(x));   --если нужно вещественное
    x = tonumber(string.format("%d", tonumber(x));   --если нужно целое (или %u без знака)


end;
Вопросы Новичка
 
Владимир, Вопрос не только в string или number.
Вопрос в том, что индекс должен быть помимо number еще и целочисленным. Поэтому выше я предложил
z1 = tonumber(string.format("%d", tonumber(z.bid_count)))
Вопросы Новичка
 
z1 = z.bid_count  -- тип возвращаемое значение string
z1 = z.bid_count  + 0 --тип number
Вопросы Новичка
 
z1 = tonumber(string.format("%d", tonumber(z.bid_count)))
Вопросы Новичка
 
К предыдущему посту.

При отсутствии спроса возвращается пустая строка
Вопросы Новичка
 

Код
z4 = tonumber(z.bid[z1].price)
ПараметрТипОписание
bid_countSTRINGКоличество котировок покупки. При отсутствии спроса возвращается значение  «0»
offer_countSTRINGКоличество котировок продажи. При отсутствии предложения возвращается  значение «0»
bidTABLEКотировки спроса (покупки). При отсутствии спроса возвращается пустая  строка
offerTABLEКотировки предложений (продажи). При отсутствии предложения возвращается  пустая строка
Код
if z.bid[i].quantity ~= nil then
Попробуй  if z.bid[i].quantity ~= ' ' then (пока в цикле дойдет до z1  этой строки может уже не быть)
Вопросы Новичка
 
lag = 0  -- лучше поставить перед циклом

for i=1, z1 do (это для оферов)  --для бидов надо написать for i=z1,1, -1 do т.к. счет начинается с края(снизу)

posicia -- надеюсь, что это инициализировано где то выше

message("Full close :  " .. z3 .. " lag - ".. ( tonumber(z3-z4)))  --странно lag - это объем , а z3-z4  - это разница цен

Ну и конечно все это надо перенести из OnQuote(class, sec )  в другое место
Как убрать нуль после точки?, .0
 
Цитата
А нельзя просто отрезать нули после запятой к чертям собачьим с помощью string.sub?

price = price - price%1
Отключение скрипта при получении Nil
 
Код
 while stopped == false do

         Quotes_1 = getQuoteLevel2("TQTF", "FXRL");
             if Quotes_1 then
                ----
             end;
 
      sleep(1000)
 end
Что я делаю неправильно с последовательно размещаемыми заявками?, Отправка заявки после исполнения предыдущей
 
Я бы все делал через таблицу сделок или таблицу заявок. Но для опыта 10 дней это не знаю.
Что я делаю неправильно с последовательно размещаемыми заявками?, Отправка заявки после исполнения предыдущей
 
Думаю у Вас не корректно организован оператор if.
До второго условия он не доходит. Разделите.
Код
if portfolio==0 then

end;
if portfolio==1 then

end;
Что я делаю неправильно с последовательно размещаемыми заявками?, Отправка заявки после исполнения предыдущей
 
Возможно, не хватает времени на обновление portfolio.
После покупки LKON (перед elseif) можно вставить
Код
local timeWfinish = os.time() + 5;
while portfolio==0 do
    portfolio = getFuturesHolding("SPBFUT", "SPBFUT***","LKU0",0).totalnet;
        if os.time() > timeWfinish then
          message("Вышло время ожидания portfolio");
          error("");
        end; 
    sleep(100);
end;
Как отследить событие - перерыв в торгах на фортс
 
Код
local c1 = getParamEx2(CLASS_CODE, SEC_CODE, "TRADINGSTATUS");
               if (c1.result == "1") then
                  if c1.param_image ~= "открыта" then
                     message("Сессия "..c1.param_image);
                     flag_Session = false;
                  end;
               end;
Баг с выводом времени в таблицу QLua
 
Дмитрий, могу лишь предложить свой работающий вариант, от которого можно оттолкнуться.
Код
if string.len(Tl.hour) == 1 then Tl.hour = "0"..Tl.hour; end;
            if string.len(Tl.min) == 1 then Tl.min = "0"..Tl.min; end;
               if string.len(Tl.sec) == 1 then Tl.sec = "0"..Tl.sec; end;
Его же Вам предлагал Sergey Gorokhov.
Баг с выводом времени в таблицу QLua
 
Код
If string.len(alltrade.datetime.min)=2 then
If string.len(alltrade.datetime.min) == 2 then
Обработка ошибок - открыт ли файл., Обработка ошибок - открыт ли файл.
 
Попробуй так
Код
Myfilefile = "\\MyData.txt";
   i = 0;
   while i == 0 do
      Myfile = io.open(getScriptPath()..Myfilefile,"r+");
-- Если файл занят      
      if Myfile == nil then 
         sleep(100);
      else
         i = 1;
      end;
   end;
узнать кол-во активных стоп-заявок в таблице "stop-orders"
 
Цитата
getItem("stop_orders",i).balance
 - это активное кол-во контрактов в одной стоп-заявке.

т.е. для получения кол-ва стоп-заявок Вам надо написать так
ActiveShortOrders = 1 + ActiveShortOrders
Реквоты., Ошибка создания заявки, цена сделки вне лимита №32
 
Цитата
s_mike@rambler.ru написал:
нужно правильно написать робота, чтобы он перед выставлен тем заявки проверял, что желаемое цена находится в допустимых для текущей сессии границах для нужного инструмента. Например, для фьючерсов это pricemin и pricemax
Какие границы посоветуете для спот-рынка?
EXECUTION_CONDITION и стоп-заявка
 
Хочу выставить стоп-заявку, при срабатывании которой выставлялась бы лим.заявка с EXECUTION_CONDITION ="KILL_BALANCE".
Есть ли такая возможность?
Пытался прописать в Transaction={} для стоп-заявки. Стоп выставляется, но остаток лим.заявки не удаляется.
MACD, Получение значения индикатора MACD в робот.
 

MACD - 0
signal line - 1

Код
    IsRun = true;
 tag = "macd26";
 
 function main()
  while IsRun do
   nl = getLinesCount(tag); --кол-во линий в индикаторе
   nc = getNumCandles(tag); --кол-во получаемых свечек, начина¤ с 0-ой
    first_candle = nc - 3; --получаем три последнюю
    count = 3; --заказываем три последнюю
     t, n, l = getCandlesByIndex (tag, 0, first_candle, count); --получаем таблицу с инфо по MACD
--     t, n, l = getCandlesByIndex (tag, 1, first_candle, count); --получаем таблицу с инфо по signal line     
...
...
...
  sleep(100);  
  end;
 end;
 function OnStop()
        IsRun = false;
    end; 

индикатор Price Channel, не могу получить корректные данные., верхняя линия - "upper", нижняя "lower"?
 
Цитата
DPC_t,DPC_n,DPC_i=getCandlesByIndex(indic_graph_id, 0, DPC-3, 2)
Для данного индикатора второй параметр ф-ции getCandlesByIndex -0. Это для верхней границы.
Для нижней он равен 2.
Идентификация экземпляра индикатора
 
Страховался от случайного изменения или удаления индикатора.
Задачи похожи.

Присвоить индикатору идентификатор и получать данные через

local t, n, l = getCandlesByIndex (tag, tagline, first_candle, count);

далее

if not t[0] or not t[1] or not t[2] then --если удалили индикатор
сохраняешь данные именно этого индикатора
.....
end;
onConnected() OnCleanUp()
 
В дополнение в посту выше.
В первом посту я не обозначил, что в случае, если данные с индикаторов- нил, у меня стоит задержка 30сек.(на возможную дозагрузку).
Изменил задержку на 60сек. Результат -данные обновляются и скрипт не вылетает.
Думаю, что эта проблема у меня из-за того, что в настройках соединения снята галочка с «При восстановлении использовать только параметры последнего соединения» . Т.е. восстановление соединения происходит к следующему серверу. В 7-ом это происходило быстрее.
Думаю причину я нашел.
Спасибо.

 
onConnected() OnCleanUp()
 
На случай разрыва связи по разным причинам в скрипте есть флаги flag_Connected и flag_CleanUp
Код
function OnConnected(fl)
 flag_Connected = true;
 message("OnConnected");
end;
function OnCleanUp()
 flag_CleanUp = true;
 message("OnCleanUp");
end;

Если ИСТИНА, то запускаю проверку и обновление данных графика и индикаторов .
Сегодня на 7-ом и 8-ом квике запускал один и тот же скрипт с искуственным обрывом связи.
На 7-ом все нормально.(как и было до этого).
На 8-ом не видит, что эти флаги - Истина. Соответственно, не обновляет данные. Как результат, данные с индикаторов нил.

И реакция разная.
На 7-ом  - Connected
На 8-ом  - CleanUp  CleanUp

Может кто столкнулся?
QUIK 8.0
 
Цитата
Для получения компилированного lua скрипта (*.luac) нужно скачать x64 luaс.exe, соответственно Вам нужно пройти по ссылке https://sourceforge.net/projects/luabinaries/files/5.1.5/Tools%20Executables/ и скачать lua-5.1.5_Win64_bin.zip.
Спасибо. Работает.
QUIK 8.0
 
Компилирую как Александр М выше
Цитата
никаких dll или сторонних библиотек не используется в скриптах. Скрипты скомпилированы через стандартную команду:

luac -s -o "$(FileName).luac" "$(FileNameExt)"

Что надо сделать для работы?
Visual Studio для этого не использую.
Использую LuaForWindows_v5.1.4-46
Могу ли просто заменить скаченные файлы и дирректории в  LuaForWindows?
Если нет, то что можно сделать?
QUIK 8.0
 
Цитата
Еще хотел бы поправить написанное мной выше, версия 5.1.4 это не последняя версия, есть еще патч 5.1.5 (https://sourceforge.net/projects/luabinaries/files/5.1.5/Windows%20Libraries/Static/ ), правильнее будет использовать его.
Там несколько вариантов. Какой надо?
No such file
 
Попробуй прописать полностью путь
Код
dofile(getScriptPath().."\\Myfile.lua");

или с проверкой
Код
Pathdofile = getScriptPath().."\\Myfile.lua";
 Checkdofile(Pathdofile);

function Checkdofile(Pathdofile)
 local Mydofile = io.open(Pathdofile,"r+");
    if Mydofile == nil then 
  message("Не нашел файл ".. Pathdofile);
  error("");
    end;
 Mydofile:close();
end;
Как узнать id поданной заявки?
 
Цитата
Не знаю, что такое уровень рынка. А на что влияет цена заявки?
Уровень рынка - цена совершения сделок по данному инструменту в данный момент.
Цитата
Также, хотел бы спросить, не будет ли убытка в случае операции подачи заявки и практически моментального снятия?
Прибыль/Убыток образуется при открытии и последующем закрытии позиции. Если цена заявки на покупку ниже рынка, вы выставили и сразу сняли - сделок нет, соответственно нет прибыли\убытка. Если цена заявки на покупку по рынку или выше, вы открыли позицию на объем встречного предложения. Сразу снять сможете только неудовлетворенный остаток (если он будет). Т.е. Вы в позиции. Говорить о прибыли/убытке можно после того как Вы закроете позицию, а не после попытки снять выставленную заявку.
Цитата
Но дело в том, что QUIK не позволяет подавать заявки на некоторые инструменты.
Я так понимаю речь идет о 2,3,... эшелонах. Возможно, их нет в листинге биржи. Возможно, стратегия основана на спреде между бумагами и одно плече на бирже не торгуется. Но это не важно. Мне кажется легче выяснить заранее, торгуется ли бумага и не использовать данную стратегию. И не придется совершать телодвижения с подачей и снятием заявок.  
Как узнать id поданной заявки?
 
Цитата
"Также, хотел бы спросить, не будет ли убытка в случае операции подачи заявки и практически моментального снятия?".
Для меня вопрос не понятен. Мало данных. Какой уровень рынка? По какой цене заявка? ...??
Цитата
Я выставляю заявку, но в поле состояние вижу строку "Снята". Почему она уже снята?
- условие сделки «Немедленно или отклонить»
- условия сделки не соответствуют каким-либо требованиям
Цитата
Где можно об этом почитать? О состояниях заявок, какие бывают, что они означают.
Руководство пользователя QLua - Структуры данных - Транзакции

Руководство пользователя QUIK - Таблица заявок
Как узнать id поданной заявки?
 
Номер заявки можно узнать при ее подачи через ф-цию обратного вызова
Код
function OnOrder(order)
 if (order.trans_id == trans_id) then
  order_num = order.order_num; --номер заявки
   flag_OnOder = true;  --именно наша заявка
    return;
 end;
end;
или обратиться к таблице заявок через getItem().
помогите советом - как запрограммировать ожидания снятия стоп заявки?
 
Цитата
local stop_orders_now = getItem("stop_orders",waiting_ordernum_todel[i][2])
Вы уверены, что это waiting_ordernum_todel[i][2] номер строки?
Я бы проверил, что получается в stop_orders_now.

И я бы проверил #waiting_ordernum_todel  

while #waiting_ordernum_todel > 0 do
--
--
--
message("#waiting_ordernum_todel ="..tostring(#waiting_ordernum_todel));
sleep(1000);
end;
CreateDataSource, получение данных свечи
 
Цитата
local High = ds:H(1)
  local Low = ds:L(1)
Нумерация свечки начинается слева. Их загрузится 2-3тыс.
Для получения текущей надо
Код
    Size = ds:Size();
    T = ds:T(Size);
    O = ds:O(Size);
    H = ds:H(Size);
    L = ds:L(Size);
    C = ds:C(Size);
Предустановленный список входных значений в Settings, Код для предустановленного список входных значений в Settings в индикаторе в QUIK
 
Можно взять любой другой объектно-ориентированный язык. Создать форму, в которой можно вносить любые начальные значения, в том числе и в виде выпадающего списка. Сохранить и передать все в qlua  через файл.txt.  
Страницы: 1 2 След.
Наверх