finsight / QUIKSharp

QUIK# (QUIK Sharp) is the QUIK Lua interface ported to .NET.
Other
231 stars 135 forks source link

CalcBuySell #303

Closed exvion closed 2 years ago

exvion commented 3 years ago

Не нашел в QuikSharp реализации функции CalcBuySell. Может она по-другому названа или вместо нее есть другой способ рассчитать количество акций на покупку или продажу? http://luaq.ru/CalcBuySell.html

Функции getBuySellInfo и getBuySellInfoEx в коде закомментированы https://github.com/finsight/QUIKSharp/blob/fa556c35b7267f4c5e195bb4f010744b56d1a63b/src/QuikSharp/TradingFunctions/TradingFunctions.cs

Pr0phet1c commented 3 years ago

Действительно, не реализована. Странно, что только сейчас заметили (видимо, не слишком востребованная). Попробую реализовать на досуге. Или реализуйте сами и пришлите PR.

exvion commented 3 years ago

Решил сам попробовать, пока не получается. Написал такой код. Функция должна возвращать NUMBER qty, NUMBER comission. Не знаю как вернуть сразу два значения.

Task<object> CalcBuySell(string firmId, string secCode, string clientCode, string accID, string price, bool isBuy, bool isMarket);
        public async Task<object> CalcBuySell(string firmId, string secCode, string clientCode, string accID, string price, bool isBuy, bool isMarket)
        {
            var response = await QuikService.Send<Message<object>>(
               (new Message<string>(firmId + "|" + clientCode + "|" + secCode + "|" + accID + "|" + price + "|" + isBuy + "|" + isMarket, "CalcBuySell"))).ConfigureAwait(false);
            return response.Data;
        }
function qsfunctions.CalcBuySell(msg)
    local spl = split(msg.data, "|")
    local clientCode, firmId, secCode, account, qty, isBuy, isMarket = spl[1], spl[2], spl[3], spl[4], spl[5], spl[6], spl[7]
    msg.data = CalcBuySell(firmId, clientCode, secCode, account, price, isBuy, isMarket)
    return msg
end
Pr0phet1c commented 3 years ago

Вы не одиноки. Я даже на QLua не могу заставить корректно работать эту функцию, возвращает нули. При чем я сначала реализовал ее в библиотеке, и добавил в тестовое приложение, но когда понял, что она не работает попытался сделать "чистый" lua-код. и потерпел фиаско. Судя по всему, она просто не работает.

exvion commented 3 years ago

У меня следующий код работает исправно:

local bs = CalcBuySell
assert(bs, "No function!!")

qty, comiss = bs("SPBXM", "TCS_SPB", "000SPB", "MFOPENM003", 94, true, false)
message("qty = " .. qty .. ", COM = " .. comiss, 2)

вт, 10 авг. 2021 г. в 14:49, Prophetic @.***>:

Вы не одиноки. Я даже на QLua не могу заставить корректно работать эту функцию, возвращает нули. При чем я сначала реализовал ее в библиотеке, и добавил в тестовое приложение, но когда понял, что она не работает попытался сделать "чистый" lua-код. и потерпел фиаско. Судя по всему, она просто не работает.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/finsight/QUIKSharp/issues/303#issuecomment-895963015, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAB6FWCHZYAGZFVL74H5XXLT4EG6LANCNFSM5B2CQBAQ . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&utm_campaign=notification-email .

Pr0phet1c commented 3 years ago

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

exvion commented 2 years ago

На днях удалось протестировать calcbuysell в бою, были опасения по времени выполнения, но для моих задач справляется отлично. Спасибо.