Николай Бехтерев (Автор тем)

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

Страницы: 1
Может кто уже мучился с лучшим BID, OFFER?!, Пытаюсь реализовать алгоритм выставления лучшими заявками...
 
Пока для меня ясно только одно:
Код
function OnQuote(class, sec)
   if class == "SPBFUT" and sec == "SiM6" then
      stock = getQuoteLevel2(class, sec)
      OFFER_PRICE = stock.offer[1].price
      BID_PRICE = stock.bid[20].price
   end
end
В offer_price и bid_price имеем цены для лучшего предложения и спроса соответственно.
А вот как реализовать выставление лучшим пока не взяли нашу?
Вообще имеет смысл реализовывать такое на луа, не слишком ли это медленно для Луа+Квик?
Есть у кого рабочий пример работы getFuturesHolding( )?
 
Что-то поиск (по всей сети, не только тут) ничего не дал, а как работает из документации представляется смутно (и почему было сразу не писать пример в документации?).
Что за аргумент такой передаётся- form_id ?  
Как отличить в OnStopOrder( ) снятый стоп от только что выставленного стопа?
 
Дело в том, что у меня берётся номер стопа, чтобы иметь его возможность снять и как раз в момент снятия в переменную попадает номер уже снятого стопа. Как оформить OnStopOrder( )  в скрипте, чтобы избежать этих накладок?
у меня пока такая простецкая конструкция прописана:
Код
function OnStopOrder(stops)
   KeyOrder = stops.order_num
end
Попадание старого номера, кстати, странно учитывая такую очерёдность функций:
Код
KillStop (Class, fut, ID+1, KeyOrder) --убиваем стоп (тут KeyOrder дублируется старым значением в OnStopOrder())
StopS (lastPrice-razmerS, ID+1, Class, lots, fut) --после этого новый вызов OnStopOrder() и новое значение у KeyOrder
sleep(500) -- уже и слип пожирнее сделал, но нет нет, да и попадёт в KeyOrder предыдущий номер. Где косяк никак не пойму.
message("trans_stops.order_num of StopS is "..tostring(KeyOrder))
Может сервер убивает иногда дольше, чем выставляет?
Я так понимаю, что нужно смотреть stops.withdraw_time?

Ну и маленький вопросец по OnInit( )
Вот так запускаться не захотела функция:
Код
function OnInit("/home/bart/.wine/drive_c/Quik_6.17.3/ROBO2/")
А вот так пошла:
Код
start = "/home/bart/.wine/drive_c/Quik_6.17.3/ROBO2/"
function OnInit(start)
В чём разница и что даёт выставление пути скрипта?
Как сделать простое чтение из файла?
 
Записать в файл можно вот так просто:
Код
local j = 123
io.output("god.txt")
io.write(j)
А как в этом же скрипте произвести чтение из него этой же записи в новую переменную?
Как я только не крутил io.read, у меня так и не вышло, мануалы вообще в этом деле не помогли.
Вопрос по синтаксису Lua на пару строчек, Встретил в справочнике такое вот:
 
Код
local file,err = io.open( filename, "wb" )
      if err then return err end
Отсюда вопрос: разве когда-нибудь переменная err в этом коде получит значение отличное от null?
Ошибка "Неверный код клиента" при выставлении заявок, Не проходят заявки выпадает ошибка
 
У меня в таблице для функции выставления заявок вообще не было параметра CLIENT_CODE потому что даже в демо-режиме всё работало без него (демо Finam, ARQA).
А теперь не в демо-режиме (брокер ALOR) терминал ругается: "Неверный код клиента". Попробовал в CLIENT_CODE продублировать значение ACCOUNT, не помогло. Выставил UID который светится в наименовании окна-терминала - глухо.
Что же там писать?

Позабавило, что Стопы система принимает, но в момент исполнения вылетает та же ошибка.
В Демо-режиме (Quik-Junior) sendTransaction() не присвоило заявке номер.
 
Функция OnTransReply() показывает, что после sendTransaction() в таблице trans_reply значение у order_num равно nill.
Это прелести демо-режима? Не хочется искать ошибку там, где её нет))))
В sendTransaction() KILL_ALL_ORDERS так и не работает?
 
Где-то год назад пробовал, не работало, мож исправили?
Как сделать так, чтобы файлы подгружались сами?
 
Ни dofile(), ни loadfile() не делают этого, пока сам не откроешь все свои модули (файлы) в окне "Доступные скрипты".
Есть ли какая возможность или быть может я не правильно пользуюсь этими функциями?
Если внутри функции создаётся переменная, то по выходу из функции она умирает?
 
Нужно спецом создавать глобальную переменную иначе всё что создаётся для расчёта в функции по выходу из неё будет убито?
На запуск скрипта никакой реакции. Не появляется зелёный значок работы скрипта., Засунул большую часть вычислений в функции обратного вызова.
 
Вот такого рода код.
Может быть я был не прав засунув что-то в функции обратного вызова?
Код
fut = "SIU5"    --торгуемый фьючерс
range = 200
lots = 1       --количество торгуемых лотов
ID = 1          --Айди транзакций
totalnet = 0    --начальный размер позиции

dofile("transaction.lua")
dofile("candle.lua")


function OnAllTrade(AllTrades)
   if AllTrades.sec_code == fut then
      Price = AllTrades.price
      posa = chemp(Price, range)   
      Class = AllTrades.class_code
   end
end
 

function OnFuturesClientHolding(fut_pos)
   if fut_pos.sec_code == fut then
      totalnet = fut_pos.totalnet
      PrintDbgStr("Changed position size to "..tostring(position))
   end
end
 

function OnStop()
   is_run = 0
end
 

function main()
   while is_run == 1 do
   
      if position > posa then
         --ВЫХОДИМ ИЗ ЛОНГА; КОЛИЧЕСТВО В ЗАЯВКЕ = lots + totalnet
         Qty = lots + totalnet
         OrderSell (Price, ID, Class, Qty, fut)
         ID = ID + 1         
         position = -1
      PrintDbgStr("Перевернулись в шорт по цене "..tostring(Price))
      
      elseif position < posa then
         --ВЫХОДИМ ИЗ ШОРТА; КОЛИЧЕСТВО В ЗАЯВКЕ С УЧЁТОМ РАЗМЕРА ОСТАТКА ПО СЧЁТУ
         Qty = lots - totalnet
         OrderBuy (Price, ID, Class, Qty, fut)
         ID = ID + 1         
         position = 1
      PrintDbgStr("Перевернулись в лонг по цене "..tostring(Price))
         
      end
      sleep(100)
   end
end
 
Windows 10 упорно себя предлагает, пробовал кто на совместимость?
 
Собственно вот.
Кто как решил вопрос уведомления о сделках?
 
Есть какая-нибудь возможность кидать хотя бы е-мейлы через скрипт?
Простой код по созданию файла с ценами из all_trades таблички, файл создаётся, но пустой, табличку получаем.
 
Цитата
boom = {}
ttime = {}
is_run = 1

function OnStop()
   is_run = 0
end

function main()
   while is_run == 1 do
       file = io.open("res.txt", "w+t")
           g = getNumberOf("all_trades")-1
           for i=0, g do
               boom = getItem("all_trades", i)
               message(tostring(boom.price),3)
               file:write(tostring(boom.price).. "\n")
               i = i+1
               sleep(1000)
           end
       file:close()
   end
end
dofile( ) - как дать путь в скрипте, чтобы Quik не ругался на отсутствие файла?
 
Собственно сабж
При попытке отправить транзакцию с "KILL_ALL_STOP_ORDERS" было получено:, "Отправка транзакций данного типа из QPILE-программы не поддерживается."
 
Это нормально?
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
 
Может кто-то уже делал получение позиции по наименованию фьючерса, поделитесь?
:)
Необходим проверка условия времени, Нужно исключить торговлю в последнюю минуту торгов, к примеру.
 
Как исполнить такую проверку?
Или, наоборот, торговать в первую секунду (минуту, в зависимости от выбранного фрейма) из Квика нет никакой возможности, как сделать выгоднее выставить условие на проверку времени?

Дело в том, что очень много параметров в help'e несут как бы время, но они разные, какие-то из них строковые, а есть вообще таблица!
От такого разбега я легка растерялся.
Ошибка при попытке получить значение из таблицы OnTrade()
 
Такой вот просто код:

Код
table_order = { ["CLASSCODE"]="",
      ["ACTION"]="",
      ["ACCOUNT"]="",
      ["OPERATION"] = "",
      ["SECCODE"] = "",
      ["PRICE"] = 0,
      ["QUANTITY"] = ""
   }
function OnTrade(order)
   table_order = order
end

function OnStop()
   is_run = 0
end

function main()
   while is_run do
   table_order = OnTrade()
   message(tostring(table_order.PRICE),3)
   sleep(1000)
   end
end
вылазит: trans3.lua:28: attempt to index global 'table_order' (a nil value).
откуда nil? сделки в системе уже были...
Подсобите с битовыми флагами на примере выяснения позиции из таблицы OnTrade( )?
 
В моей справочной литературе по LUA про битовые флаги ничего нет, в примерах мудрёно как-то, а в хелпе слишком скудная информация!
допустим имеем:
Код
function OnTrade(order)
   table_order = order
end
как выяснить направление сделки?
Видимо я что-то не так понимаю в общем шаблоне программы и коллбек-функциями, Скрипт вешает Quik а почему не понятно.
 
Код
table_order = {}
zed_is_dead = ""
is_run = 1

function OnTrade(order)
   table_order = order
end

function OnStop()
   is_run = 0
end

function main()
   while is_run do
      zed_is_dead = tostring(table_order.trade_num) 
          message(zed_is_dead,1) 
   end 
end
Что не так с этим скриптом?
если убрать 15 и 16 строчки:
Код
zed_is_dead = tostring(table_order.trade_num) 
message(zed_is_dead,1)
то скрипт работает и вешает Quik только уже при нажатии кнопки "стоп".
Что я делаю не так, и не так понимаю?
Не срабатывает пример graph.lua: Total 0 candles 0 lines
 
Переименовал всё что только можно в окне с графиком цены, ОИ, ATR, объём в "zzz" как прописано в файле.
всё равно выдаёт: Total 0 candles 0 lines
И ничего больше.
Страницы: 1
Наверх