Тема: Помогите найти ошибку

Добрый день!
Пытаюсь разобраться с Lua и написать первого робота
Робот должен работать на принципе "статистического арбитража
Есть 2 фьюча Газпром и Лукойл. За всю историю одно было дороже другого, допустим на 1000
Когда Газпром дороже Лукойла на 1000 - продаем Газпром (дороже) покупаем Лукойл (дешевле)т.е. покупаем спред
Когда Газпром дороже Лукойла на 500 - покупаем Газпром (дороже) продаем Лукойл (дешевле)т.е. продем спред

Вот мои начинания
Подскажите в правильном ли я направлении

--Параметры:
p_classcode="SPBFUT" --Код класса
a_seccode="GIZ3" --Код инструмента
b_seccode="LIZ3" --Код инструмента
p_account="SPBFUT005H3" --Код счета
p_clientcode="SPBFUT005H3" --Клиенткий код
p_count=1 --Размер позиции

is_run = true
count = 0


function main()
    while is_run do
        sleep(10)
        robot()
    end
end

function robot()
    local= spredpokuki
    local= spredprodagi
    spredpokuki=a_price(bid, a_seccode)-b_price(offer, b_seccode)
    spredprodagi=a_price(offer, a_seccode)-b_price(bid, b_seccode)

    --сигнал на покупку спреда
    if spredpokuki>=1000 then
        Trade
    end
   
    --сигнал на продажу спреда
    if spredprodagi <= 500 then
        Trade
    end
   
end

function Trade

2

Re: Помогите найти ошибку

Поскольку, как я понимаю, какой-то особо "резкой" реакции на изменение котировок не требуется - то такой подход вполне пойдет.
Дерзайте! )

3

Re: Помогите найти ошибку

Да уж
спасибо за многочислинные советы и подсказки
а критика сверх конструктивна и актуальна, сразу видно человек боооооооольшой профессионал и знаток своего дела

4

Re: Помогите найти ошибку

Так это, а вопросы-то в чём?
Вы написали "Подскажите в правильном ли я направлении" - я ответил.
Или есть другие вопросы? так вы их озвучьте, тогда и ответы на них появятся, уверен.

Топик и вовсе назван "Помогите найти ошибку" - а про ошибку ни слова.

Из жизненных наблюдений: на форумах есть смысл задавать достаточно конкретные вопросы - тогда на них будут ответы. Иначе бесполезняк.

5

Re: Помогите найти ошибку

А маленький sleep(10) сильно влияет на загрузку процессора?

6 (2015-03-06 16:27:56 отредактировано swerg)

Re: Помогите найти ошибку

ascerdfg пишет:

А маленький sleep(10) сильно влияет на загрузку процессора?

Вопрос в соотношении времени простоя процессора и времени работы.

Если основная часть скрипта выполнится за 2 мс (вполне реальное время), а sleep 10 мс - получаем
    2 / (2+10) = 16,7% загрузку ядра процессора.

Если основная часть будет выполняться 100 мс - получаем 90% загрузку процессора, но тут надо смотреть на задачи:
- если не жалко электричества - то и пусть себе грузится;
- если не нужна скорость реакции на изменение рыночных цен - то можно увеличить sleep и не так греть процессор.

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

7 (2015-03-06 16:37:59 отредактировано ascerdfg)

Re: Помогите найти ошибку

Кроме экономии электричества есть есть ещё экономия процессорного времени для других задач.
...И спасибо за ответ smile

8

Re: Помогите найти ошибку

Как обычно - вопрос компромиссов.
Или свободный процессор - или скорость реакции (ну в данном подходе, когда мы не явно реагируем на событие изменения цены, а проверяем не произошло ли оно периодически).

И пожалуйста.

9

Re: Помогите найти ошибку

Помогите новичку разобраться, почему getParamEx('SPBFUT','SRM5','OFFER').param_value и getParamEx('SPBFUT','SRM5','BID').param_value возвращают нулевые значения? В обработчике OnParam почему то не появляются события с такими class и sec. Вроде на фьючерсах сбера текущие класс и код бумаги именно такие?

10

Re: Помогите найти ошибку

gstown,

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

11

Re: Помогите найти ошибку

Таких параметров как "Лучшая цена спроса" и "Лучшая цена предложения" в доступных параметрах ТТП нет
Код бумаги и код класса именно такие

12

Re: Помогите найти ошибку

Нашел, в чем дело - неправильно настроены списки получаемых параметров.

13

Re: Помогите найти ошибку

Кто нибудь поможет понять, почему SendMarket(), вызванная в main() и нормально отработавшая (сделка прошла), не оставляет следов в обработчиках OnOrder, OnTrade, OnTransReply, т.е. в эти обработчики управление не попадает вообще.

14

Re: Помогите найти ошибку

Хорошо бы модельный пример кода с проблемой

15

Re: Помогите найти ошибку

Код примерно такой:

m1=""
m2=""
m3=""
function onorder(order)
   m1="m1"
end
function ontransreply(reply)
  m2="m2"
end
function ontrade(trade)
  m3="m3"
end
main()
    tr,msg=sendmarket(с нужными параметрами)
    sleep(100)
    message("m1="..m1.."  m2="..m2.."  m3="..m3,3)
end

сделка проходит, message выдает:
m1= m2= m3=

16 (2015-04-10 10:08:35 отредактировано swerg)

Re: Помогите найти ошибку

Я не знаю на сколько приведённый код повторяет ваш, но должно быть:
OnTrade
OnOrder
OnTransReply

Регистр букв в названии обработчиков ВАЖЕН!

17

Re: Помогите найти ошибку

Синтаксис у меня правильный, это пример на скорую руку. В чем может быть причина?

18 (2015-04-10 11:38:41 отредактировано kalikazandr)

Re: Помогите найти ошибку

gstown пишет:

Код примерно такой:
main()
   
    sleep(100)
    message("m1="..m1.."  m2="..m2.."  m3="..m3,3)
end

сделка проходит, message выдает:
m1= m2= m3=

попробуйте sleep(1000) или пару секунд, у вас не успевают колбеки получить изменения до выключения скрипта
или так:

function main()
tr,msg=sendmarket(с нужными параметрами)
repeat
    sleep(1)
until (m1 ~= "") and (m2 ~= "") and (m3 ~= "")
do message("m1="..m1.."  m2="..m2.."  m3="..m3,3) end
end

19

Re: Помогите найти ошибку

Да, верно, причина в этом, была такая мысль, думал десятая секунды - достаточное время. От производительности процессора может зависеть?

20

Re: Помогите найти ошибку

Что-то я на задержку не посмотрел действительно.
От производительности процессора не зависит, это задержки прохождения трафика по сети. Зависит от производительности сервера брокера (в незначительной степени) и вашего канала до сервера брокера (в существенной степени, если вы подключились "через обычный интернет").