Skip to content

Commit

Permalink
BugFix functions ParamRequest, CancelParamRequest.
Browse files Browse the repository at this point in the history
Change rule set CLIENT_CODE parametr in func SendTransaction.
Added example 'ParamRequest + OnParam + GetParamEx2' to QuikSharpDemo.
  • Loading branch information
Pr0phet1c committed Jun 19, 2019
1 parent 87a5ce2 commit eeac1a2
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 28 deletions.
52 changes: 51 additions & 1 deletion Examples/QuikSharpDemo/FormMain.cs
Expand Up @@ -18,7 +18,7 @@ namespace QuikSharpDemo
{
public partial class FormMain : Form
{
//readonly Char separator = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator[0];
readonly Char separator = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator[0];
public static Quik _quik;
bool isServerConnected = false;
bool isSubscribedToolOrderBook = false;
Expand Down Expand Up @@ -69,6 +69,8 @@ void Init()
listBoxCommands.Items.Add("Получить таблицу сделок");
listBoxCommands.Items.Add("Получить таблицу `Клиентский портфель`");
listBoxCommands.Items.Add("Получить таблицы денежных лимитов");
listBoxCommands.Items.Add("Связка ParamRequest + OnParam + GetParamEx2");
listBoxCommands.Items.Add("CancelParamRequest");
}

private void ButtonStart_Click(object sender, EventArgs e)
Expand Down Expand Up @@ -201,6 +203,14 @@ void OnDepoLimitDo(DepoLimitEx depLimit)
textBoxLogsWindow.AppendText("Вызвано событие OnDepoLimit (изменение бумажного лимита)..." + Environment.NewLine);
textBoxLogsWindow.AppendText("Заблокировано на покупку количества лотов - " + depLimit.LockedBuy + Environment.NewLine);
}
void OnParamDo(Param _param)
{
if (_param.ClassCode == tool.ClassCode && _param.SecCode == tool.SecurityCode)
{
double bid = Convert.ToDouble(_quik.Trading.GetParamEx2(tool.ClassCode, tool.SecurityCode, ParamNames.BID).Result.ParamValue.Replace('.', separator));
AppendText2TextBox(textBoxLogsWindow, "Вызвано событие OnParam. Актуальное значение параметра 'BID' = " + bid + Environment.NewLine);
}
}

private void TimerRenewForm_Tick(object sender, EventArgs e)
{
Expand Down Expand Up @@ -254,6 +264,12 @@ private void ListBoxCommands_SelectedIndexChanged(object sender, EventArgs e)
case "Получить таблицы денежных лимитов":
textBoxDescription.Text = "Получить и отобразить таблицы денежных лимитов (стандартную и дополнительную Т2). Работает только на инструментах фондовой секции. quik.Trading.GetMoney() и quik.Trading.GetMoneyEx()";
break;
case "Связка ParamRequest + OnParam + GetParamEx2":
textBoxDescription.Text = "Демонстрация работы связки ParamRequest + OnParam + GetParamEx2";
break;
case "CancelParamRequest":
textBoxDescription.Text = "Отменяем подписку на обновление параметра и отключаем обработку события OnParam";
break;
}
}
private void ButtonCommandRun_Click(object sender, EventArgs e)
Expand Down Expand Up @@ -495,6 +511,40 @@ private async Task CallCommand()
}
catch { AppendText2TextBox(textBoxLogsWindow, "Ошибка получения денежных лимитов." + Environment.NewLine); }
break;
case "Связка ParamRequest + OnParam + GetParamEx2":
try
{
AppendText2TextBox(textBoxLogsWindow, "Подписываемся на получение обновляемого параметра 'BID', через ParamRequest..." + Environment.NewLine);
bool pReq = _quik.Trading.ParamRequest(tool.ClassCode, tool.SecurityCode, ParamNames.BID).Result;
if (pReq)
{
AppendText2TextBox(textBoxLogsWindow, "Подписываемся на колбэк 'OnParam'..." + Environment.NewLine);
_quik.Events.OnParam += OnParamDo;
}
else
{
AppendText2TextBox(textBoxLogsWindow, "Неудачная попытка подписки на обновление параметра..." + Environment.NewLine);
}
}
catch { AppendText2TextBox(textBoxLogsWindow, "Ошибка работы в связке ParamRequest + OnParam + GetParamEx2." + Environment.NewLine); }
break;
case "CancelParamRequest":
try
{
AppendText2TextBox(textBoxLogsWindow, "Отменяем подписку на получение обновляемого параметра 'BID', через ParamRequest..." + Environment.NewLine);
bool pReq = _quik.Trading.CancelParamRequest(tool.ClassCode, tool.SecurityCode, ParamNames.BID).Result;
if (pReq)
{
AppendText2TextBox(textBoxLogsWindow, "Отменяем подписку на колбэк 'OnParam'..." + Environment.NewLine);
_quik.Events.OnParam -= OnParamDo;
}
else
{
AppendText2TextBox(textBoxLogsWindow, "Неудачная попытка отписки на обновление параметра..." + Environment.NewLine);
}
}
catch { AppendText2TextBox(textBoxLogsWindow, "Ошибка работы в связке ParamRequest + OnParam + GetParamEx2." + Environment.NewLine); }
break;
}
}

Expand Down
5 changes: 2 additions & 3 deletions Examples/QuikSharpDemo/Tool.cs
Expand Up @@ -4,9 +4,8 @@

public class Tool
{
Char separator = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator[0];

Quik _quik;
readonly Char separator = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator[0];
readonly Quik _quik;
string name;
string securityCode;
string classCode;
Expand Down
38 changes: 20 additions & 18 deletions src/QuikSharp/TradingFunctions/TradingFunctions.cs
Expand Up @@ -88,8 +88,8 @@ public interface ITradingFunctions : IQuikService
/// <param name="secCode"></param>
/// <param name="paramName"></param>
/// <returns></returns>
Task<ParamTable> ParamRequest(string classCode, string secCode, string paramName);

This comment has been minimized.

Copy link
@andrewkslv

andrewkslv Jul 9, 2019

Получается из-за такого изменения нельзя взять демо версию из мастера и добавить QUIKSharp 1.0.0 из nuget.

Task<ParamTable> ParamRequest(string classCode, string secCode, ParamNames paramName);
Task<bool> ParamRequest(string classCode, string secCode, string paramName);
Task<bool> ParamRequest(string classCode, string secCode, ParamNames paramName);

/// <summary>
/// Функция отменяет заказ на получение параметров Таблицы текущих торгов
Expand All @@ -98,8 +98,8 @@ public interface ITradingFunctions : IQuikService
/// <param name="secCode"></param>
/// <param name="paramName"></param>
/// <returns></returns>
Task<ParamTable> CancelParamRequest(string classCode, string secCode, string paramName);
Task<ParamTable> CancelParamRequest(string classCode, string secCode, ParamNames paramName);
Task<bool> CancelParamRequest(string classCode, string secCode, string paramName);
Task<bool> CancelParamRequest(string classCode, string secCode, ParamNames paramName);

/// <summary>
/// Функция для получения значений Таблицы текущих значений параметров
Expand Down Expand Up @@ -290,15 +290,15 @@ public async Task<MoneyLimitEx> GetMoneyEx(string firmId, string clientCode, str
/// <param name="secCode"></param>
/// <param name="paramName"></param>
/// <returns></returns>
public async Task<ParamTable> ParamRequest(string classCode, string secCode, string paramName)
public async Task<bool> ParamRequest(string classCode, string secCode, string paramName)
{
var response = await QuikService.Send<Message<ParamTable>>(
var response = await QuikService.Send<Message<bool>>(
(new Message<string>(classCode + "|" + secCode + "|" + paramName, "paramRequest"))).ConfigureAwait(false);
return response.Data;
}
public async Task<ParamTable> ParamRequest(string classCode, string secCode, ParamNames paramName)
public async Task<bool> ParamRequest(string classCode, string secCode, ParamNames paramName)
{
var response = await QuikService.Send<Message<ParamTable>>(
var response = await QuikService.Send<Message<bool>>(
(new Message<string>(classCode + "|" + secCode + "|" + paramName, "paramRequest"))).ConfigureAwait(false);
return response.Data;
}
Expand All @@ -310,15 +310,15 @@ public async Task<ParamTable> ParamRequest(string classCode, string secCode, Par
/// <param name="secCode"></param>
/// <param name="paramName"></param>
/// <returns></returns>
public async Task<ParamTable> CancelParamRequest(string classCode, string secCode, string paramName)
public async Task<bool> CancelParamRequest(string classCode, string secCode, string paramName)
{
var response = await QuikService.Send<Message<ParamTable>>(
var response = await QuikService.Send<Message<bool>>(
(new Message<string>(classCode + "|" + secCode + "|" + paramName, "cancelParamRequest"))).ConfigureAwait(false);
return response.Data;
}
public async Task<ParamTable> CancelParamRequest(string classCode, string secCode, ParamNames paramName)
public async Task<bool> CancelParamRequest(string classCode, string secCode, ParamNames paramName)
{
var response = await QuikService.Send<Message<ParamTable>>(
var response = await QuikService.Send<Message<bool>>(
(new Message<string>(classCode + "|" + secCode + "|" + paramName, "cancelParamRequest"))).ConfigureAwait(false);
return response.Data;
}
Expand Down Expand Up @@ -435,13 +435,15 @@ public async Task<long> SendTransaction(Transaction transaction)

// Console.WriteLine("Trans Id from function = {0}", transaction.TRANS_ID);

Trace.Assert(transaction.CLIENT_CODE == null,
"Currently we use Comment to store correlation id for a transaction, " +
"its reply, trades and orders. Support for comments will be added later if needed");
// TODO Comments are useful to kill all orders with a single KILL_ALL_ORDERS
// But see e.g. this http://www.quik.ru/forum/import/27073/27076/
//Trace.Assert(transaction.CLIENT_CODE == null,
// "Currently we use Comment to store correlation id for a transaction, " +
// "its reply, trades and orders. Support for comments will be added later if needed");
//// TODO Comments are useful to kill all orders with a single KILL_ALL_ORDERS
//// But see e.g. this http://www.quik.ru/forum/import/27073/27076/

//transaction.CLIENT_CODE = transaction.TRANS_ID.Value.ToString();

transaction.CLIENT_CODE = transaction.TRANS_ID.Value.ToString();
if (transaction.CLIENT_CODE == null) transaction.CLIENT_CODE = transaction.TRANS_ID.Value.ToString();

//this can be longer than 20 chars.
//transaction.CLIENT_CODE = QuikService.PrependWithSessionId(transaction.TRANS_ID.Value);
Expand Down
12 changes: 6 additions & 6 deletions src/QuikSharp/lua/qsfunctions.lua
Expand Up @@ -258,7 +258,7 @@ function qsfunctions.getTradeAccount(msg)
return msg
end

--- Функция возвращает торговые счета в системе
--- Функция возвращает торговые счета в системе
function qsfunctions.getTradeAccounts(msg)
local ListAccounts={}
for i=0,getNumberOf("trade_accounts")-1 do
Expand Down Expand Up @@ -346,9 +346,9 @@ function qsfunctions.getParamEx(msg)
return msg
end

--- Функция предназначена для получения значений всех параметров биржевой информации из Таблицы текущих торгов
-- с возможностью в дальнейшем отказаться от получения определенных параметров, заказанных с помощью функции ParamRequest.
-- Для отказа от получения какого-либо параметра воспользуйтесь функцией CancelParamRequest.
--- Функция предназначена для получения значений всех параметров биржевой информации из Таблицы текущих торгов
-- с возможностью в дальнейшем отказаться от получения определенных параметров, заказанных с помощью функции ParamRequest.
-- Для отказа от получения какого-либо параметра воспользуйтесь функцией CancelParamRequest.
-- Функция возвращает таблицу Lua с параметрами, аналогичными параметрам, возвращаемым функцией getParamEx
function qsfunctions.getParamEx2(msg)
local spl = split(msg.data, "|")
Expand Down Expand Up @@ -396,7 +396,7 @@ function qsfunctions.getFuturesHolding(msg)
if result then
msg.data = result
else
log("Futures holding returns nil", 3)
--log("Futures holding returns nil", 3)
msg.data = nil
end
return msg
Expand Down Expand Up @@ -611,7 +611,7 @@ function qsfunctions.get_num_candles(msg)
log("Called get_num_candles" .. msg.data, 2)
local spl = split(msg.data, "|")
local tag = spl[1]

msg.data = getNumCandles(tag) * 1
return msg
end
Expand Down

0 comments on commit eeac1a2

Please sign in to comment.