вторник, 17 ноября 2020 г.
понедельник, 2 ноября 2020 г.
среда, 7 октября 2020 г.
Python, Socket
https://github.com/tashik/QUIKSharp/blob/master/quiksharp_qlua_python_socket_client.py
https://smart-lab.ru/profile/_sg_/favourites/comments/
https://smart-lab.ru/vopros/650507.php
| # -*- coding: utf-8 -*- |
| import socket |
| import json |
| CRLF = "\r\n\r\n" |
| host = '127.0.0.1' |
| port_requests = 34130 |
| port_callbacks = 34131 |
| sok_requests = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
| sok_callbacks = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
| sok_callbacks.connect((host , port_callbacks)) |
| sok_requests.connect((host , port_requests)) |
| request = {"data":"Ping","id":"1","cmd":"ping","t":"0"} |
| raw_data = json.dumps(request) |
| sok_requests.sendall((raw_data+CRLF).encode()) |
| while(True): |
| response = sok_requests.recv(2048) |
| print(response) |
| # Пример Получение стакана котировок по классу и коду бумаги getQuoteLevel2 - Python socket client |
| # Функция getQuoteLevel2() принимает 2 параметра: Код класса и Код бумаги, а возвращает таблицу, которая имеет следующие поля: |
| # bid_count -- Количество котировок покупки (STRING) |
| # offer_count -- Количество котировок продажи (STRING) |
| # bid -- Котировки спроса (покупки) (TABLE) |
| # offer -- Котировки предложений (продажи) (TABLE) |
| # -- Таблицы «bid» и «offer» имеют следующую структуру: |
| # price -- Цена покупки / продажи (STRING) |
| # quantity -- Количество в лотах (STRING) |
| CRLF = "\r\n\r\n" |
| host = '127.0.0.1' |
| port_requests = 34130 |
| port_callbacks = 34131 |
| sok_requests = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
| sok_callbacks = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
| sok_callbacks.connect((host , port_callbacks)) |
| sok_requests.connect((host , port_requests)) |
| request = {"data":"SPBFUT|SiH0","id":"1","cmd":"getQuoteLevel2","t":""} |
| raw_data = json.dumps(request) |
| sok_requests.sendall((raw_data+CRLF).encode()) |
| data = b"" |
| bufsize = 1024 |
| while(True): |
| packet = sok_requests.recv(bufsize) |
| data += packet |
| if len(packet) < bufsize: |
| break |
| data = json.loads(data.decode('cp1251')) |
print(data)
пятница, 7 августа 2020 г.
GS.Trade.Strategies
Ti23
if (Position.Quantity < Contracts)
{
Mode = IsPosPositive2 ? 2 : 3;
}
else if (Position.Quantity >= Contracts)
{
MaxContractsReached = true;
Mode = IsPosPositive2 ? 8 : 4;
}
Exit with Profit in Mode: 2,8 wth Signal 3
Exit with Loss in Mode: 4,3 wth Signal 2
Entry, Increase Position Signal 1
Example Msg(Signal1,Signal2,Signal3) -> (188,164,260)
----------------------
Ti22
if (Position.Quantity < Contracts)
{
Mode = IsPosPositive2 ? 2 : 3;
}
else if (Position.Quantity >= Contracts)
{
Mode = IsPosPositive2 ? 8 : 4;
}
Exit with Profit in Mode: 2,8 wth Signal 1
Exit with Loss in Mode: 4,3 AND Increase in Profit in Mode: 2 with Signal 2
Entry, Increase Position in Losss: Signal 1
Example Msg(Signal1,Signal2) -> (260,188)
понедельник, 6 июля 2020 г.
GS.EventLog Update
GS.EventLog Update
Set EvlContextName for different DataBase
Dvlp14.EventLog1 = ConnectionStringName
EvlContext = <DataBaseName>Dvlp14.EventLog1</DataBaseName>
EvlContext = <DataBaseName>Expr14.EventLog1</DataBaseName>
<add name="Expr14.EventLog1" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=EventLog1;Integrated Security=True" providerName="System.Data.SqlClient" />
<add name="Dvlp14.EventLog1" connectionString="Data Source=.\SQLDVLP14;Initial Catalog=EventLog1;Integrated Security=True" providerName="System.Data.SqlClient" />
<Code>GS.Web.Api.EventLog.Server</Code>
<Name>GS.Web.Api.EventLog.Server</Name>
<EventLogKey>GS.Web.Api.EventLog.Server</EventLogKey>
<Description>GS.Trade.EventLog in DataBase.EventLog</Description>
<DataBaseName>EventLog1</DataBaseName>
<TimeOut>300</TimeOut>
<IsEnabled>true</IsEnabled>
<IsQueueEnabled>false</IsQueueEnabled>
<IsPrimary>false</IsPrimary>
<IsAsync>false</IsAsync>
<IsSaveEnabled>true</IsSaveEnabled>
<IsUIEnabled>false</IsUIEnabled>
</DbEventLog1>
<DbEventLog2 enabled = "false">
<Code>GS.Web.Api.EventLog.Server</Code>
<Name>GS.Web.Api.EventLog.Server</Name>
<EventLogKey>GS.Web.Api.EventLog.Server</EventLogKey>
<Description>GS.Trade.EventLog in DataBase.EventLog</Description>
<!--<DataBaseName>EventLog1</DataBaseName>-->
<!--<DataBaseName>Expr14.EventLog1</DataBaseName>-->
<DataBaseName>Dvlp14.EventLog1</DataBaseName>
<TimeOut>300</TimeOut>
<IsEnabled>true</IsEnabled>
<IsQueueEnabled>true</IsQueueEnabled>
<IsPrimary>false</IsPrimary>
<IsAsync>false</IsAsync>
<IsSaveEnabled>true</IsSaveEnabled>
<IsUIEnabled>false</IsUIEnabled>
<ErrorRecoveryTimeOut>60</ErrorRecoveryTimeOut>
<ErrorCntToStop>10</ErrorCntToStop>
</DbEventLog2>
воскресенье, 5 июля 2020 г.
Updates
1.1 web.config
<compilation>
<assemblies>
<remove assembly="Microsoft.VisualStudio.Web.PageInspector.Loader, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</assemblies>
</compilation>
<httpRuntime targetFramework="4.5" />
****** after delete VS2013 *********
1.2 new ConnectionString
2. new Database
2.1. SQLDVLP14
2.2. Add User NeworkService
2.3.
Tickers:
public IEnumerable<IBarSimple> GetSeries(long seriesId, DateTime dt)
{
var m = MethodBase.GetCurrentMethod() + "()";
// return _barWebClient.GetSeries(seriesId, dt);
var r = _barWebClient.GetSeries(seriesId, dt);
if (r == null)
Evlm2(EvlResult.FATAL, EvlSubject.TECHNOLOGY, ParentTypeName, TypeName,
m, $"Failure in Get SeriesId:{seriesId}, DT:{dt.Date.ToString("d")}", ToString());
return r;
}
вторник, 9 июня 2020 г.
GS.Trade.TradeWindows
Update Totals with PositionNpc2 via Strategy?.DailyMaxProfit
Strategy.Positions2:
pp.Strategy.PositionTotal.Update(p); // 07.01.2014
CreateStat(); FireTotalPositionUpdateEvent(pp.Strategy.PositionTotal);
public void FireTotalPositionUpdateEvent(IPosition2 p)
{
if (p == null) return;
// var pcl = p.Clone();
Strategy.OnChangedEvent(new Events.EventArgs
{
Category = "UI.Positions",
Entity = "Total",
Operation = "Update",
Object = p,
Sender = this
});
}
public PositionNpc2(IPosition2 ip)
{
Strategy = ip.Strategy;
FirstTradeDT = ip.FirstTradeDT;
FirstTradeNumber = ip.FirstTradeNumber;
LastTradeDT = ip.LastTradeDT;
LastTradeNumber = ip.LastTradeNumber;
Operation = ip.PosOperation;
Status = ip.PosStatus;
Quantity = ip.Quantity;
Price1 = ip.Price1;
Price2 = ip.Price2;
DailyPnLFixed = ip.DailyPnLFixed;
PosPnLFixed = ip.PosPnLFixed;
DailyProfitLimit = ip.DailyProfitLimit;
LastPrice = ip.LastPrice;
//PnL1 = ip.PnL;
// 17.04.11
//PnL2 = ip.PnL2;
PnL2 = ip.PnL;
PnL3 = ip.PnL3;
StrategyKeyEx = ip.StrategyKeyEx;
TickerCodeEx = ip.TickerCodeEx;
AccountCodeEx = ip.AccountCodeEx;
Delta = ip.Delta;
//TotalDailyMaxProfit = ip.TotalDailyMaxProfit;
//TotalDailyMaxLoss = ip.TotalDailyMaxLoss;
//TotalDailyMaxProfitDT = ip.TotalDailyMaxProfitDT;
//TotalDailyMaxLossDT = ip.TotalDailyMaxLossDT;
TotalDailyMaxProfit = ip.Strategy?.DailyMaxProfit ?? 0;
TotalDailyMaxLoss = ip.Strategy?.DailyMaxLoss ?? 0;
TotalDailyMaxProfitDT = ip.Strategy?.DailyMaxProfitDT ?? DateTime.Now;
TotalDailyMaxLossDT = ip.Strategy?.DailyMaxLossDT ?? DateTime.Now;
Comment = ip.Comment;
}
public void Update(IPosition2 ip)
{
if (Quantity == 0)
{
FirstTradeDT = ip.FirstTradeDT;
FirstTradeNumber = ip.FirstTradeNumber;
}
LastTradeDT = ip.LastTradeDT;
LastTradeNumber = ip.LastTradeNumber;
Operation = ip.PosOperation;
Status = ip.PosStatus;
Quantity = ip.Quantity;
Price1 = ip.Price1;
Price2 = ip.Price2;
LastPrice = ip.LastPrice;
//PnL1 = ip.PnL;
// 17.04.11
//PnL2 = ip.PnL2;
PnL2 = ip.PnL;
PnL3 = ip.PnL3;
DailyPnLFixed = ip.DailyPnLFixed;
PosPnLFixed = ip.PosPnLFixed;
DailyProfitLimit = ip.DailyProfitLimit;
StrategyKeyEx = ip.StrategyKeyEx;
AccountCodeEx = ip.AccountCodeEx;
TickerCodeEx = ip.TickerCodeEx;
Delta = ip.Delta;
TotalDailyMaxProfit = ip.Strategy?.DailyMaxProfit ?? 0;
TotalDailyMaxLoss = ip.Strategy?.DailyMaxLoss ?? 0;
TotalDailyMaxProfitDT = ip.Strategy?.DailyMaxProfitDT ?? DateTime.Now;
TotalDailyMaxLossDT = ip.Strategy?.DailyMaxLossDT ?? DateTime.Now;
// TotalDailyMaxProfit = ip.TotalDailyMaxProfit;
// TotalDailyMaxLoss = ip.TotalDailyMaxLoss;
// TotalDailyMaxProfitDT = ip.TotalDailyMaxProfitDT;
// TotalDailyMaxLossDT = ip.TotalDailyMaxLossDT;
Comment = ip.Comment;
}
Update Totals Strategies, Tickers, TimeInt
private void CreateTotalTickersReport(object sender, RoutedEventArgs routedEventArgs)
{
var method = MethodBase.GetCurrentMethod().Name + "()";
TotalTickersList.Clear();
if (PositionCollection == null || !PositionCollection.Any()) return;
try
{
var v = (from t in PositionCollection
group t by t.Ticker.Code
into g
select new TotalStat01()
{
Strategy = "All",
Ticker = g.Key,
TimeInt = 0,
Quantity = g.Sum(t=>t.Quantity),
Count = g.Count(),
ProfitLoss = g.Sum(t => t.PnL2),
ProfitAvg = g.Average(t => t.PnL2),
ProfitMax = g.Max(t=>t.PnL2),
ProfitMin = g.Min(t => t.PnL2),
ProfitStd = GSMath.Math.StandardDeviation(g.Select(t => t.PnL2)),
DailyMaxProfit = g.Max(t => t.Strategy.DailyMaxProfit),
DailyMaxLoss = g.Min(t => t.Strategy.DailyMaxLoss),
FirstTradeDT = g.Min(t => t.FirstTradeDT),
LastTradeDT = g.Max(t => t.LastTradeDT)
}).OrderBy(t => t.Ticker); // .ToList();
foreach (var i in v) TotalTickersList.Add(i);
_isNeedRefreshStat = false;
}
catch (Exception e)
{
_evl?.Evlm2(EvlResult.FATAL, EvlSubject.PROGRAMMING, GetType().FullName, e.GetType().Name,
method, e.Message, ToString());
}
}