Skip to content

Commit ff27611

Browse files
author
Karl Wan
committed
Re-target to .NET Standard 2.0. Update version to 3.0.0-beta0 as there's some major breaking change since 2.x
1 parent 1e5cb71 commit ff27611

File tree

19 files changed

+109
-97
lines changed

19 files changed

+109
-97
lines changed

.gitignore

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,7 @@ paket-files/
251251
.idea/
252252
*.sln.iml
253253

254-
# Ignore non-public code
255-
Trady.App.Pad/
256-
Trady.Vic/
254+
# Hide private code
255+
Trady.Analysis.Stat/
256+
Trady.Test.Stat/
257+
Trady_Full.sln

README.md

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
# Trady
22
[![Build status](https://ci.appveyor.com/api/projects/status/kqwo74gn5ms3h0n2?svg=true)](https://ci.appveyor.com/project/lppkarl/trady)
3-
[![NuGet Pre Release](https://img.shields.io/nuget/vpre/Trady.Analysis.svg)](https://www.nuget.org/packages/Trady.Analysis/2.1.0-beta6)
3+
[![NuGet Pre Release](https://img.shields.io/nuget/vpre/Trady.Analysis.svg)](https://www.nuget.org/packages/Trady.Analysis/3.0.0-beta0)
44
[![license](https://img.shields.io/github/license/lppkarl/Trady.svg)](LICENSE)
55

6-
Trady is a handy library for computing technical indicators, and targets to be an automated trading system that provides stock data feeding, indicator computing, strategy building and automatic trading. It is built based on .NET Standard 1.6.1.
6+
Trady is a handy library for computing technical indicators, and targets to be an automated trading system that provides stock data feeding, indicator computing, strategy building and automatic trading. It is built based on .NET Standard 2.0.
77

88
### Read Before You Use
9-
This library is intended for personal use, use with care for production environment.
9+
This library is a hobby project, and would probably making breaking changes, use with care when in production.
1010

1111
### Currently Available Features
1212
* Stock data feeding (via CSV File, [Quandl.NET](https://github.com/lppkarl/Quandl.NET), [YahooFinanceApi](https://github.com/lppkarl/YahooFinanceApi), [StooqApi](https://github.com/lppkarl/StooqApi), [Nuba.Finance.Google](https://github.com/nubasoftware/Nuba.Finance.Google))
1313
* Indicator computing (including SMA, EMA, RSI, MACD, BB, etc.)
1414
* Signal capturing by rules
1515
* Strategy backtesting by buy/sell rule
1616

17-
### Updates from 2.0.x to 2.1.0 (Currently 2.1.0-alpha6)
17+
### Updates from 2.0.x to 3.0.0 (Currently 3.0.0-beta0)
1818
Please refer to another markdown document [here](update_from_2.0.x.md)
1919

2020
### Supported Platforms
21-
* .NET Core 1.0 or above
21+
* .NET Core 2.0 or above
2222
* .NET Framework 4.6.1 or above
23-
* Mono 4.6 or above
24-
* Xamarin.iOS 10.0 or above
25-
* Xamarin.Android 7.0 or above
26-
* Xamarin.Mac 3.0 or above
23+
* Mono 5.4 or above
24+
* Xamarin.iOS 10.4 or above
25+
* Xamarin.Android 7.5 or above
26+
* Xamarin.Mac 3.8 or above
2727

2828
### Currently Supported Indicators
2929
Please refer to another markdown document [here](supported_indicators.md)
@@ -204,8 +204,8 @@ Nuget package is available in modules, please install the package according to t
204204
}
205205

206206
// Use case
207-
var buyRule = Rule.Create(c => c.IsEma10BullishCrossEma30()).And(c.IsEma10Rising());
208-
var sellRule = Rule.Create(c => c.IsEma10BearishCrossEma30()).Or(c.IsEma10Dropping());
207+
var buyRule = Rule.Create(c => c.IsEma10BullishCrossEma30()).And(c => c.IsEma10Rising());
208+
var sellRule = Rule.Create(c => c.IsEma10BearishCrossEma30()).Or(c => c.IsEma10Dropping());
209209
var runner = new Builder().Add(candles, 10).Buy(buyRule).Sell(sellRule).Build();
210210
var result = await runner.RunAsync(10000, 1);
211211
[Back to content](#Content)
@@ -303,16 +303,14 @@ Nuget package is available in modules, please install the package according to t
303303
{
304304
// parameters: initialValueIndex, initialValueFunction, indexValueFunction, smoothingFactorFunction
305305
_gma = new GenericMovingAverage(
306-
0,
307306
i => inputs.Select(ip => ip.Close).ElementAt(i),
308-
i => inputs.Select(ip => ip.Close).ElementAt(i),
309-
i => 2.0m / (periodCount + 1),
307+
2.0m / (periodCount + 1),
310308
inputs.Count());
311309
}
312310

313311
protected override AnalyzableTick<decimal?> ComputeByIndexImpl(IReadOnlyList<Candle> mappedInputs, int index)
314312
{
315-
return new AnalyzableTick<decimal?>(mappedInputs[index].DateTime, _gema[index]);
313+
return new AnalyzableTick<decimal?>(mappedInputs[index].DateTime, _gma[index]);
316314
}
317315
}
318316
[Back to content](#Content)

Trady.Analysis/Extension/IndexedCandleExtension.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ namespace Trady.Analysis
55
public static class IndexedCandleExtension
66
{
77
public static decimal? ClosePriceChange(this IndexedCandle ic)
8-
=> ic.Get<ClosePriceChange>()[ic.Index].Tick;
8+
=> ic.Get<ClosePriceChange>(1)[ic.Index].Tick;
99

1010
public static decimal? ClosePricePercentageChange(this IndexedCandle ic)
11-
=> ic.Get<ClosePricePercentageChange>()[ic.Index].Tick;
11+
=> ic.Get<ClosePricePercentageChange>(1)[ic.Index].Tick;
1212

1313
public static bool IsBullish(this IndexedCandle ic)
1414
=> ic.Get<ClosePriceChange>()[ic.Index].Tick.IsPositive();

Trady.Analysis/Infrastructure/AnalyzableFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public static TAnalyzable CreateAnalyzable<TAnalyzable, TInput>(IEnumerable<TInp
2525
var @params = new List<object>();
2626
@params.Add(inputs);
2727
for (int i = 1; i < ctor.GetParameters().Count(); i++)
28-
@params.Add(Convert.ChangeType(parameters[i - 1], ctor.GetParameters()[i].ParameterType));
28+
@params.Add(Convert.ChangeType(parameters[i - 1], ctor.GetParameters()[i].ParameterType));
2929

3030
return (TAnalyzable)ctor.Invoke(@params.ToArray());
3131
}

Trady.Analysis/Infrastructure/FuncRegistry.cs

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Concurrent;
33
using System.Collections.Generic;
4+
using System.Linq.Expressions;
45
using System.Reflection;
56
using Microsoft.CodeAnalysis.CSharp.Scripting;
67
using Microsoft.CodeAnalysis.Scripting;
@@ -80,8 +81,11 @@ public class Func3Globals<TInput> : Func2Globals<TInput>
8081

8182
#endregion
8283

83-
public static bool Register<TInput>(string name, string expression)
84+
public static bool Register<TInput>(string name, string expression, bool @override = false)
8485
{
86+
if (@override)
87+
_funcDict.TryRemove(name, out _);
88+
8589
if (expression.Contains("p2"))
8690
return _funcDict.TryAdd(name, CreateFunc3<TInput>(expression));
8791
else if (expression.Contains("p1"))
@@ -92,37 +96,41 @@ public static bool Register<TInput>(string name, string expression)
9296
return _funcDict.TryAdd(name, CreateFunc0<TInput>(expression));
9397
}
9498

95-
public static bool Register<TInput>(string name, Func<IReadOnlyList<TInput>, int, IAnalyzeContext<TInput>, decimal?> expr)
96-
=> _funcDict.TryAdd(name, expr);
99+
public static bool Register<TInput>(string name, Expression<Func<IReadOnlyList<TInput>, int, IAnalyzeContext<TInput>, decimal?>> expr, bool @override = false)
100+
=> Register<TInput>(name, expr.Body.ToString(), @override);
97101

98-
public static bool Register<TInput>(string name, Func<IReadOnlyList<TInput>, int, decimal, IAnalyzeContext<TInput>, decimal?> expr)
99-
=> _funcDict.TryAdd(name, expr);
102+
public static bool Register<TInput>(string name, Expression<Func<IReadOnlyList<TInput>, int, decimal, IAnalyzeContext<TInput>, decimal?>> expr, bool @override = false)
103+
=> Register<TInput>(name, expr.Body.ToString(), @override);
100104

101-
public static bool Register<TInput>(string name, Func<IReadOnlyList<TInput>, int, decimal, decimal, IAnalyzeContext<TInput>, decimal?> expr)
102-
=> _funcDict.TryAdd(name, expr);
105+
public static bool Register<TInput>(string name, Expression<Func<IReadOnlyList<TInput>, int, decimal, decimal, IAnalyzeContext<TInput>, decimal?>> expr, bool @override = false)
106+
=> Register<TInput>(name, expr.Body.ToString(), @override);
103107

104-
public static bool Register<TInput>(string name, Func<IReadOnlyList<TInput>, int, decimal, decimal, decimal, IAnalyzeContext<TInput>, decimal?> expr)
105-
=> _funcDict.TryAdd(name, expr);
108+
public static bool Register<TInput>(string name, Expression<Func<IReadOnlyList<TInput>, int, decimal, decimal, decimal, IAnalyzeContext<TInput>, decimal?>> expr, bool @override = false)
109+
=> Register<TInput>(name, expr.Body.ToString(), @override);
106110

107-
public static bool Register(string name, Func<IReadOnlyList<Candle>, int, IAnalyzeContext<Candle>, decimal?> expr)
108-
=> Register<Candle>(name, expr);
111+
public static bool Register(string name, Expression<Func<IReadOnlyList<Candle>, int, IAnalyzeContext<Candle>, decimal?>> expr, bool @override = false)
112+
=> Register<Candle>(name, expr, @override);
109113

110-
public static bool Register(string name, Func<IReadOnlyList<Candle>, int, decimal, IAnalyzeContext<Candle>, decimal?> expr)
111-
=> Register<Candle>(name, expr);
114+
public static bool Register(string name, Expression<Func<IReadOnlyList<Candle>, int, decimal, IAnalyzeContext<Candle>, decimal?>> expr, bool @override = false)
115+
=> Register<Candle>(name, expr, @override);
112116

113-
public static bool Register(string name, Func<IReadOnlyList<Candle>, int, decimal, decimal, IAnalyzeContext<Candle>, decimal?> expr)
114-
=> Register<Candle>(name, expr);
117+
public static bool Register(string name, Expression<Func<IReadOnlyList<Candle>, int, decimal, decimal, IAnalyzeContext<Candle>, decimal?>> expr, bool @override = false)
118+
=> Register<Candle>(name, expr, @override);
115119

116-
public static bool Register(string name, Func<IReadOnlyList<Candle>, int, decimal, decimal, decimal, IAnalyzeContext<Candle>, decimal?> expr)
117-
=> Register<Candle>(name, expr);
120+
public static bool Register(string name, Expression<Func<IReadOnlyList<Candle>, int, decimal, decimal, decimal, IAnalyzeContext<Candle>, decimal?>> expr, bool @override = false)
121+
=> Register<Candle>(name, expr, @override);
118122

119-
public static bool Register(string name, string expression)
120-
=> Register<Candle>(name, expression);
123+
public static bool Register(string name, string expression, bool @override = false)
124+
=> Register<Candle>(name, expression, @override);
121125

122-
public static bool Register(string name, IFuncAnalyzable analyzable)
123-
=> _funcDict.TryAdd(name, analyzable.Func);
126+
public static bool Register(string name, IFuncAnalyzable analyzable, bool @override = false)
127+
{
128+
if (@override)
129+
_funcDict.TryRemove(name, out _);
130+
return _funcDict.TryAdd(name, analyzable.Func);
131+
}
124132

125-
public static bool Unregister(string name) => _funcDict.TryRemove(name, out var _);
133+
public static bool Unregister(string name) => _funcDict.TryRemove(name, out _);
126134

127135
internal static object Get(string name) => _funcDict[name];
128136
}

Trady.Analysis/Trady.Analysis.csproj

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<!--<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" />-->
33
<PropertyGroup>
4-
<TargetFramework>netstandard1.4</TargetFramework>
4+
<TargetFramework>netstandard2.0</TargetFramework>
55
</PropertyGroup>
66
<PropertyGroup>
7-
<Description>Analysis module of Trady, a handy library for computing technical indicators, based on .NET Standard 1.4</Description>
7+
<Description>Analysis module of Trady, a handy library for computing technical indicators, based on .NET Standard 2.0</Description>
88
<Copyright>Copyright (c) 2016-2017 Karl Wan</Copyright>
99
<AssemblyTitle>Trady.Analysis</AssemblyTitle>
10-
<VersionPrefix>2.1.0-beta6</VersionPrefix>
10+
<VersionPrefix>3.0.0-beta0</VersionPrefix>
1111
<Authors>Karl Wan</Authors>
12-
<TargetFramework>netstandard1.4</TargetFramework>
12+
<TargetFramework>netstandard2.0</TargetFramework>
1313
<AssemblyName>Trady.Analysis</AssemblyName>
1414
<PackageId>Trady.Analysis</PackageId>
1515
<PackageTags>Trady;Technical;Analysis;Finance;Stock</PackageTags>
1616
<PackageReleaseNotes>
17-
[29/8/2017] Various changes from v2.0, please refer to https://github.com/lppkarl/Trady/tree/v2.1
17+
[29/8/2017] Various changes from v2.0, please refer to https://github.com/lppkarl/Trady/tree/v3.0
1818
</PackageReleaseNotes>
1919
<PackageProjectUrl>https://github.com/lppkarl/Trady</PackageProjectUrl>
2020
<PackageLicenseUrl>https://github.com/lppkarl/Trady/blob/master/LICENSE</PackageLicenseUrl>
@@ -33,13 +33,11 @@
3333
<EmbeddedResource Include="**\*.resx" />
3434
</ItemGroup>
3535
<ItemGroup>
36-
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="1.1.1">
37-
</PackageReference>
38-
<PackageReference Include="System.Reflection.TypeExtensions" Version="4.3.0">
39-
</PackageReference>
4036
<PackageReference Include="Microsoft.CSharp" Version="4.4.0" />
4137
<PackageReference Include="System.ValueTuple" Version="4.4.0" />
4238
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="2.3.2" />
39+
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="2.0.0" />
40+
<PackageReference Include="System.Reflection.TypeExtensions" Version="4.4.0" />
4341
</ItemGroup>
4442
<ItemGroup>
4543
<ProjectReference Include="..\Trady.Core\Trady.Core.csproj" />

Trady.Core/Trady.Core.csproj

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<!--<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" />-->
33
<PropertyGroup>
4-
<TargetFramework>netstandard1.4</TargetFramework>
4+
<TargetFramework>netstandard2.0</TargetFramework>
55
</PropertyGroup>
66
<PropertyGroup>
7-
<Description>Core module of Trady, a handy library for computing technical indicators, based on .NET Standard 1.4</Description>
7+
<Description>Core module of Trady, a handy library for computing technical indicators, based on .NET Standard 2.0</Description>
88
<Copyright>Copyright (c) 2016-2017 Karl Wan</Copyright>
99
<AssemblyTitle>Trady.Core</AssemblyTitle>
10-
<VersionPrefix>2.1.0-beta6</VersionPrefix>
10+
<VersionPrefix>3.0.0-beta0</VersionPrefix>
1111
<Authors>Karl Wan</Authors>
12-
<TargetFramework>netstandard1.4</TargetFramework>
12+
<TargetFramework>netstandard2.0</TargetFramework>
1313
<AssemblyName>Trady.Core</AssemblyName>
1414
<PackageId>Trady.Core</PackageId>
1515
<PackageTags>Trady;Technical;Analysis;Finance;Stock</PackageTags>
1616
<PackageReleaseNotes>
17-
[29/8/2017] Various changes from v2.0, please refer to https://github.com/lppkarl/Trady/tree/v2.1
17+
[29/8/2017] Various changes from v2.0, please refer to https://github.com/lppkarl/Trady/tree/v3.0
1818
</PackageReleaseNotes>
1919
<PackageProjectUrl>https://github.com/lppkarl/Trady</PackageProjectUrl>
2020
<PackageLicenseUrl>https://github.com/lppkarl/Trady/blob/master/LICENSE</PackageLicenseUrl>

Trady.Importer.Csv/Trady.Importer.Csv.csproj

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>netstandard1.4</TargetFramework>
4+
<TargetFramework>netstandard2.0</TargetFramework>
55
</PropertyGroup>
66
<PropertyGroup>
7-
<Description>Csv importer module of Trady, a handy library for computing technical indicators, based on .NET Standard 1.4</Description>
7+
<Description>Csv importer module of Trady, a handy library for computing technical indicators, based on .NET Standard 2.0</Description>
88
<Copyright>Copyright (c) 2016-2017 Karl Wan</Copyright>
99
<AssemblyTitle>Trady.Importer.Csv</AssemblyTitle>
10-
<VersionPrefix>2.1.0-beta5</VersionPrefix>
10+
<VersionPrefix>3.0.0-beta0</VersionPrefix>
1111
<Authors>Karl Wan</Authors>
12-
<TargetFramework>netstandard1.4</TargetFramework>
12+
<TargetFramework>netstandard2.0</TargetFramework>
1313
<AssemblyName>Trady.Importer.Csv</AssemblyName>
1414
<PackageId>Trady.Importer.Csv</PackageId>
1515
<PackageTags>Trady;Technical;Analysis;Finance;Stock</PackageTags>
1616
<PackageReleaseNotes>
17-
[29/8/2017] Various changes from v2.0, please refer to https://github.com/lppkarl/Trady/tree/v2.1
17+
[29/8/2017] Various changes from v2.0, please refer to https://github.com/lppkarl/Trady/tree/v3.0
1818
</PackageReleaseNotes>
1919
<PackageProjectUrl>https://github.com/lppkarl/Trady</PackageProjectUrl>
2020
<PackageLicenseUrl>https://github.com/lppkarl/Trady/blob/master/LICENSE</PackageLicenseUrl>

Trady.Importer.Google/Trady.Importer.Google.csproj

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>netstandard1.4</TargetFramework>
4+
<TargetFramework>netstandard2.0</TargetFramework>
55
</PropertyGroup>
66
<PropertyGroup>
7-
<Description>Google finance importer module of Trady, a handy library for computing technical indicators, based on .NET Standard 1.4</Description>
7+
<Description>Google finance importer module of Trady, a handy library for computing technical indicators, based on .NET Standard 2.0</Description>
88
<Copyright>Copyright (c) 2016-2017 Karl Wan</Copyright>
99
<AssemblyTitle>Trady.Importer.Google</AssemblyTitle>
10-
<VersionPrefix>2.1.0-beta5</VersionPrefix>
10+
<VersionPrefix>3.0.0-beta0</VersionPrefix>
1111
<Authors>Karl Wan</Authors>
12-
<TargetFramework>netstandard1.4</TargetFramework>
12+
<TargetFramework>netstandard2.0</TargetFramework>
1313
<AssemblyName>Trady.Importer.Google</AssemblyName>
1414
<PackageId>Trady.Importer.Google</PackageId>
1515
<PackageTags>Trady;Technical;Analysis;Finance;Stock</PackageTags>
1616
<PackageReleaseNotes>
17-
[29/8/2017] Various changes from v2.0, please refer to https://github.com/lppkarl/Trady/tree/v2.1
17+
[29/8/2017] Various changes from v2.0, please refer to https://github.com/lppkarl/Trady/tree/v3.0
1818
</PackageReleaseNotes>
1919
<PackageProjectUrl>https://github.com/lppkarl/Trady</PackageProjectUrl>
2020
<PackageLicenseUrl>https://github.com/lppkarl/Trady/blob/master/LICENSE</PackageLicenseUrl>

Trady.Importer.Quandl/Trady.Importer.Quandl.csproj

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>netstandard1.4</TargetFramework>
4+
<TargetFramework>netstandard2.0</TargetFramework>
55
</PropertyGroup>
66
<PropertyGroup>
7-
<Description>Quandl importer module of Trady, a handy library for computing technical indicators, based on .NET Standard 1.4</Description>
7+
<Description>Quandl importer module of Trady, a handy library for computing technical indicators, based on .NET Standard 2.0</Description>
88
<Copyright>Copyright (c) 2016-2017 Karl Wan</Copyright>
99
<AssemblyTitle>Trady.Importer.Quandl</AssemblyTitle>
10-
<VersionPrefix>2.1.0-beta5</VersionPrefix>
10+
<VersionPrefix>3.0.0-beta0</VersionPrefix>
1111
<Authors>Karl Wan</Authors>
12-
<TargetFramework>netstandard1.4</TargetFramework>
12+
<TargetFramework>netstandard2.0</TargetFramework>
1313
<AssemblyName>Trady.Importer.Quandl</AssemblyName>
1414
<PackageId>Trady.Importer.Quandl</PackageId>
1515
<PackageTags>Trady;Technical;Analysis;Finance;Stock</PackageTags>
1616
<PackageReleaseNotes>
17-
[29/8/2017] Various changes from v2.0, please refer to https://github.com/lppkarl/Trady/tree/v2.1
17+
[29/8/2017] Various changes from v2.0, please refer to https://github.com/lppkarl/Trady/tree/v3.0
1818
</PackageReleaseNotes>
1919
<PackageProjectUrl>https://github.com/lppkarl/Trady</PackageProjectUrl>
2020
<PackageLicenseUrl>https://github.com/lppkarl/Trady/blob/master/LICENSE</PackageLicenseUrl>
@@ -29,7 +29,7 @@
2929
<GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
3030
</PropertyGroup>
3131
<ItemGroup>
32-
<PackageReference Include="Quandl.NET" Version="1.1.1" />
32+
<PackageReference Include="Quandl.NET" Version="1.2.0" />
3333
</ItemGroup>
3434
<ItemGroup>
3535
<ProjectReference Include="..\Trady.Core\Trady.Core.csproj" />

0 commit comments

Comments
 (0)