Let_it_go (Автор тем)

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

Страницы: Пред. 1 2 3
Помогите с логикой
 
Добрый день.
Прошу помочь с реализацией простого замысла.

1. Выставляется лимитная заявка.
2. Эта лимитная заявка снимается.
3. Выставить новую лимитную заявку как только приедет кол-бек OnOrder о снятии предыдущей заявки.

Параллельно торгуют другие роботы, они выставляют много заявок. Задача работать именно с нужной мне заявкой. Я не могу понять как её "пометить" в момент отправки, чтобы ждать колбека именно по ней. Спасибо.
Перебор валютных тикеров
 
Добрый день.
Прошу подсказать как сделать перебор валютных тикеров.
Для перебора акций я делаю так:
Код
ticker_list="SVAV,TGKO,TRCN,UWGN,VSMO"
for sec in string.gmatch(ticker_list,"%a+") do   
---
end
Для перебора фьючерсов так:
Код
f_ticker_list="GMZ7,GZZ7,HYZ7,EuZ7,LKZ7,MMZ7,MXZ7,RNZ7,SiZ7,SPZ7,SRZ7,VBZ7"
for sec in string.gmatch(f_ticker_list,"%w+") do
---
end
А как перебрать валюты?
ticker_list="USD000UTS_TOM,CNYRUB_TOM,EUR_RUB_TOM" (доллар, юань, евро). Вся проблема в нижнем пробеле
Заранее спасибо за подсказки.
Что обрывает break
 
Добрый день.
Прошу подсказать, что обрывает break в нижеприведённом случае: условие if или цикл for.
Мне нужно, чтобы обрывался цикл for.
Заранее спасибо за помощь.
Код
   --Стандартное отклонение
      func1 = SD()
      gorlovina[sec]=nil
      for ddd=num_candles,num_candles-gorlovina_bars,-1 do
         local dev=func1(ddd, {Period=x[sec], VType="Typical"}, ds[sec])
         dev_k[sec]=dev/line_10[sec]   
         if dev_k[sec]<gorlovina_thresh[sec] then
            gorlovina[sec]=true
            break      
         end
      end
Теоретическая цена, греки
 
Господа, теор. цена обновляется в КВИКе раз в минуту, это очень долго.
Есть ли в открытом доступе модуль на Луа или просто формула для её расчёта? Чтобы самому расчитывать теор. цену.
Я не про формулу Б-Ш в гипотетическом виде, а именно реализация в КВИКе.
Спасибо.
Функция на основе message
 
Господа, замучился уже с этой функцией. Есть ли в ней ошибка?
Код
function ms (value)
   if type(value)~="table" then
      message (""..(value or "nil"),1)
      
   else
      for k,v in pairs(value) do
         message (k.." "..v,1)
      end
   end   
end
Объясню. Она то работает,то не работает. Будучи внутри колбека OnParam она в начале выдаёт нужные значения. Потом, не меняя код, начинает глючить и выдавать сообщение, что ms - это нил.
Ну например ms("бид="..bid)
После начала работы кода она пишет
бид=55.2
А потом начинает вылетать с описанной выше ошибкой.
Подскажите пожалуйста что с ней может быть не так.
Подсчёт проскальзывания
 
Господа, хочу делать подсчёт следующего рода.
Робот выставляет заявку на покупку по формуле
Лучший бид + 10 шагов цены.
Я хочу делать подсчёт, насколько цена сделки оказалась лучше, чем цена выставленной заявки.
То есть:
разница=цена заявки минус цена сделки.
Как это лучше сделать?
По идее мне нужно в двух колбеках ОнТрейд и ОнОрдер отлавливать эту заявку по номеру, а потом сравнивать цену?
Или есть способы получше?
объявить несколько локальных переменных
 
Господа, подскажите пожалуйста.
a, b=1,2
message (a.." "..b,1)

в таком виде всё работает.
А как a и b объявить локально?

local a, local b = 1,2 не работает.
спасибо
валютный спот
 
Господа, хорошо знаком с КВИКом, много лет торгую, но на валютном споте никогда операций не проводил.
Вопросы по технической части КВИКа.
1. Где смотреть есть у меня открытые позиции по USDRUB_TOM или нету?
2. Верно ли, что на следующий день купленный USDRUB_TOM будет отображаться в КВИКе уже как TOD?
3. Какие функции Луа позволяют получать информацию о купленных-проданных рублях или долларах?
4. Где смотреть прибыль-убыток по открытой позиции?
5. Где смотреть точку входа (по какой цене вошёл)?
6. В таблице купить-продать есть ли полезные данные по открытым позициям?
Важное уточнение. У меня единая позиция: фьючерсы, акции, валютный спот. То есть всё вместе. Брокер Открытие.
Заранее спасибо.
Ограничение 50 транзакций в секунду
 
Добрый день.
При попытке "снять все заявки" (их у меня больше сотни) начало появляться сообщение:
Количество транзакций превышает максимально разрешённое 50 в секунду.
Кто автор этой ошибки
1. КВИК
2. Брокер
3. Биржа?

Почему оно возникает несколько раз при попытке "Снять все активные заявки" через контекстное меню (клик правой кнопкой по таблице заявок). На скриншоте видно, что команда сгенерировалась 6 раз.
принудительно задать путь socket
 
Добрый день.
При работе с библиотекой socket постоянно проблемы с нахождением этой папки.


приходится класть папки mime и socket в ту же директорию где лежит скрипт.
как задать к этим файлам путь принудительно, чтобы require сразу их находил?
Робот читает интернет-страницу
 
Господа, подскажите пожалуйста как реализовать такую задачу на Луа.
1. Робот заходит на страничку с дивидендами:
http://smart-lab.ru/dividends/

2. Читает её
3. Формирует Луа-таблицу с полями
Тикер - дата отсечки Т+2
Тикер - дата отсечки Т+2
4. В последний день перед дивидендым гэпом посылает сообщение в КВИК.

Мои роботы на Луа никогда не читали интернет-странички и не брали из них данных. Даже не знаю с чего начать.
Спасибо за помощь.
вопрос по Notepad++
 
Господа, я долго писал свои коды на луа в Notepad++. Две недели как тестирую крутую китайскую программу LuaStudio. Но минусы в ней есть. Кое-в-чём Notepad++ круче.
Вопрос такой. Как в Notepad++ исполнить свой скрипт (клавиша F5)?
я не понимаю, что делать в этом окошке:

Пробовал писать путь к КВИКу, но это не дало какого-то результата.
вопрос по индикаторам
 


Линии на графике являются индикаторами.
Когда линия находится сильно высоко от графика, к примеру на 40% выше цены, я бы хотел её не рисовать. Должен быть пропуск, индикатор не рисуется. Но это будет не красиво, потому что КВИК попытается все же соединить последнее значение перед дыркой и первое значение после дырки.
Можно ли этого избежать?
Можно ли одну линию сделать разноцветной? один участок красный, другой, например, зелёный?
Индикатор индикатор по двум графикам
 
Господа, никогда не писал индикаторы на Луа. Прошу дать совет. Мне нужен график рубле-бочки. Формула:
рубле-бочка=(фьючерс на доллар-рубль умножить фьючерс барреля в долларах)/1000
То есть индикатор простой, но строить его надо по данным двух графиков

Обычный индикатор, берущий данные с 1 графика я сделать могу, взяв за шаблон коды С.Горохова, а вот как брать данные с двух графиков, не знаю.
Перевод каретки на Луа
 
Добрый день.
прошу подсказать, как делать перевод каретки на Луа.
чтобы новое значение дозаписывалось в файл с новой строки.
Это требуется для этого кода
Код
path="C:\\sintetika.lua"
function write_end(file_path,value)
        cf=io.open(file_path,"a+")
        cf:write(value)
        cf:flush()
        cf:close()
end

function main ()
chart1="1"
price1 = getNumCandles (chart1)
chart2="2"
price2 = getNumCandles (chart2)
    for i=100,1,-1 do
        local price_tab1=getCandlesByIndex(chart1,0,price1-i,1)
        local high1=price_tab1[0].high
        local low1=price_tab1[0].low    
        local last1=price_tab1[0].close
        local typical1=(high1+low1+last1)/3
        
        local price_tab2=getCandlesByIndex(chart2,0,price2-i,1)
        local high2=price_tab2[0].high
        local low2=price_tab2[0].low    
        local last2=price_tab2[0].close
        local typical2=(high2+low2+last2)/3        
        local typical_synt=typical1/typical2
        message (typical_synt.."",1)
        write_end (path, typical_synt.." ")
    end
end
Помогите с математикой
 
Господа, прошу помочь решить пример скорее математический, чем программистский.

На счету 500 000 рублей.
Я буду покупать Сбер и против него шортить МТС. (акции взяты с потолка для примера)
Маржинальный коэффициент D_long у Сбера 0.3924
Маржинальный коэффициент D_short у МТС 0,44

Нужно,
1. Чтобы плечо использовалось максимально.  Не должно оставаться неизрасходованных денег.
2. Чтобы лонг и шорт были на равную сумму денег. Равную - в разумных пределах, она будет кривоватая в любом случае.
Как рассчитать сумму денег, на которую покупать Сбер и шортить МТС?

Мои мысли.
Чтобы посчитать максимум денег, на который я могу покупать Сбер, надо 500 000 разделить на 0,3924. Получается 1 274 209
Максимум денег, на который я могу зашорить МТС равен 500 000/0,44=1 136 363
Но эти расчёты не годятся, потому что будет одновременно две позиции: лонг Сбер против шорта МТС.
Прошу подсказать как посчитать сумму денег на покупку каждой акции с учётом двух вышеназванных требований (использовать всё плечо, суммы по каждой акции равные)
Спасибо.
Странности при расчёте RSI
 
Вроде бы делаю всё по инструкции, но не получается.
Пытаюсь рассчитать значение RSI на основе данных этой таблицы. Она считается сама по своим правилам
1=122.5475;2=122.63;3=122.6325;4=122.635;5=122.535;6=122.5375;7=122.6075;8=122.6575;9=122.63;10=122.61;11=122.71;12=122.9225;13=122.885;14=122.935;15=123.105;16=123.155;17=123.115;18=123.085;19=123.2;20=123.2725;21=123.3225;22=123.2825;23=123.2375;24=123.2275;25=123.19;26=123.26;27=123.27;28=123.305;29=123.2725;30=123.32;31=123.3575;32=123.3825;33=123.4625;34=123.46;35=123.475;36=123.3725;37=123.3125;38=123.2975;39=123.2575;40=123.2475;41=123.065;42=122.9225;43=122.91;44=122.96;45=122.9325;46=122.8125;47=122.79;48=122.84;49=123.0175;50=123.05;0=123
Её название sintez_table

Пишу так, почти копируя из инструкции к INDICATORS.ZIP
Код
                func = RSI()
                local rsi_count={}    
                    for lll=1,#sintez_table  do
                        rsi_count[lll]=func(lll, {Period=15, VType="Any"}, sintez_table)
                    end 

Вот что пишет по ней лог
Код
04/23/17 02:57:33,777 lll=1 --RSI нил с 1 по 14 итерацию!
04/23/17 02:57:33,778 lll=2
04/23/17 02:57:33,778 lll=3
04/23/17 02:57:33,778 lll=4
04/23/17 02:57:33,779 lll=5
04/23/17 02:57:33,779 lll=6
04/23/17 02:57:33,779 lll=7
04/23/17 02:57:33,780 lll=8
04/23/17 02:57:33,780 lll=9
04/23/17 02:57:33,781 lll=10
04/23/17 02:57:33,781 lll=11
04/23/17 02:57:33,781 lll=12
04/23/17 02:57:33,782 lll=13
04/23/17 02:57:33,782 lll=14
04/23/17 02:57:33,782 lll=15
04/23/17 02:57:33,783 80.053908355794
04/23/17 02:57:33,783 lll=16
04/23/17 02:57:33,783 81.074168797953
04/23/17 02:57:33,784 lll=17
04/23/17 02:57:33,784 77.668883444172
04/23/17 02:57:33,784 lll=18
с 1 по 14 итерацию rsi_count[lll]=nil
и только с 15 раза начинает что то считать, и то не правильно. Это цены Газпрома, я отсчитал 15 свечек влево. Там RSI совсем другой.
Как с этим бороться?
Вот пример, который я брал за образец
Как экономнее написать код
 
Добрый день.
Подскажите пожалуйста как записать этот код без создания лишней таблицы s
Цитата
function mycallbackforallstocks(class,sec,index)

   local num_candles=ds[sec]:Size()
   if index==num_candles then        
   container[sec]={}
   s=container[sec]
       for i=0, how_many_candles do
           local close_price=ds[sec]:C(num_candles-i)
           local open_price=ds[sec]:O(num_candles-i)
           local high_price=ds[sec]:H(num_candles-i)
           local low_price=ds[sec]:L(num_candles-i)
           local typical_price=(close_price+open_price+high_price+low_price)/4
           s[i]=typical_price    
       end            
   end
end

Я пытался записать в таком виде, но код не работает.
Цитата
function mycallbackforallstocks(class,sec,index)

   local num_candles=ds[sec]:Size()
   if index==num_candles then        
   container[sec]={}
       for i=0, how_many_candles do
           local close_price=ds[sec]:C(num_candles-i)
           local open_price=ds[sec]:O(num_candles-i)
           local high_price=ds[sec]:H(num_candles-i)
           local low_price=ds[sec]:L(num_candles-i)
           local typical_price=(close_price+open_price+high_price+low_price)/4
           container[sec].[i]=typical_price    
       end            
   end
end

Спасибо заранее
подписаться на 2 таймфрейма
 
Подскажите как грамотно подписаться в одном скрипте на два таймфрейма?

Код
rsi_tf=INTERVAL_M5
mov_tf=INTERVAL_M1
Код
function main()
for key,sec in pairs(fut_list) do
    DataSource(class,sec,rsi_tf)    
    DataSource(class,sec,mov_tf)    
    
end
end
Код
function mycallbackforallstocks(class,sec,index)         

end

 function DataSource(class,sec,interval)
   ds[sec] = CreateDataSource(class,sec,interval)
   ds[sec]:SetUpdateCallback(function(...) mycallbackforallstocks(class,sec,...) end)
   return ds[sec]
end
надо ли заводить вторую таблицу типа ds?
Спасибо
Неверный код клиента
 
Добрый день.
Брокер Открытие. Торгует робот на споте. Завёл себе ещё один счёт на ММВБ (второй), брокер добавил его в КВИК. Старый робот начал глючить, хотя в нём не вносились никакие изменения. Ошибка Неверный код клиента.
Сломал голову. Прошу подсказать что случилось
Вот строка отправки заявок:
conditions=="LONG"
Цитата
send_limit_buy_in, reply=sendLimit(class_code[sec],sec,"B",buy_price,buy_lots,account,"", conditions)
Вот функция
Код
function sendLimit(class,security,direction,price,volume,account,client_code,comment,execution_condition,expire_date,market_maker)
    if string_find(FUT_OPT_CLASSES,class)~=nil then
        return sendLimitFO(class,security,direction,price,volume,account,comment,execution_condition,expire_date,market_maker)
    else
        return sendLimitSpot(class,security,direction,price,volume,account,client_code,comment,market_maker)
    end
end
Код
function sendLimitSpot(class,security,direction,price,volume,account,client_code,comment,market_maker)
    -- отправка лимитированной заявки
    -- все параметры кроме кода клиента и коментария должны быть не нил
    -- ВАЖНО! цена должна быть стрингом с количеством знаков после точки для данной бумаги
    -- если код клиента нил - подлставляем счет
    -- market_maker - признак заявки маркет-мейкера. true\false
    -- Данная функция возвращает 2 параметра
    --     1. ID присвоенный транзакции либо nil если транзакция отвергнута на уровне сервера Квик
    --     2. Ответное сообщение сервера Квик либо строку с параметрами транзакции
    if (class==nil or security==nil or direction==nil or price==nil or volume==nil or account==nil) then
        return nil,"QL.sendLimitSpot(): Can`t send order. Nil parameters."
    end

    local trans_id=random_max()        
    local transaction={
        ["TRANS_ID"]=tostring(trans_id),
        ["ACTION"]="NEW_ORDER",
        ["CLASSCODE"]=class,
        ["SECCODE"]=security,
        ["OPERATION"]=direction,

        ["QUANTITY"]=string_format("%d",tostring(volume)),
        ["PRICE"]=toPrice(security,price,class),
        ["ACCOUNT"]=tostring(account)
    }
    if client_code==nil then
        transaction.client_code=tostring(account)
    else
        transaction.client_code=tostring(client_code)
    end
    if comment~=nil then
        transaction.client_code=string_sub(transaction.client_code..'/'..tostring(comment),0,20)
    else
        transaction.client_code=string_sub(transaction.client_code..'/QL',0,20)
    end
    if market_maker~=nil and market_maker then
        transaction['MARKET_MAKER_ORDER']='YES'
    end
    local res=sendTransaction(transaction)
    if res~="" then
        return nil, "QL.sendLimitSpot():"..res
    else
        return trans_id, "QL.sendLimitSpot(): Limit order sended sucesfully. Class="..class.." Sec="..security.." Dir="..direction.." Price="..price.." Vol="..volume.." Acc="..account.." Trans_id="..trans_id
    end
end
Найти ближайший фьючерс
 
Прошу помочь с задачей, казалось бы лёгкой, но не для моих слабых навыков.

Нужно найти ближайший фьючерс из всех имеющихся фьючерсов для данного актива.
Например акция Газпрома.
Нужно найти ближайший фьючерс на Газпром по критерию: минимальное количество дней до экспирации.

Вот что я уже умею:
Количество дней до экспирации: days_till_exp=getParamEx("SPBFUT",fut_code,"DAYS_TO_MAT_DATE").param_value    
Вытянуть базовый актив из фьючерса: ba=getParamEx("SPBFUT",fut_code,"OPTIONBASE").param_image
Базовый актив будет одинаковый у фьючерсов на одинаковый инструмент.
А вот как перебирать поля Текущей таблицы я так и не придумал.
Заранее спасибо за подсказки.
Страницы: Пред. 1 2 3
Наверх