Skip to content

Commit 2cb570c

Browse files
authored
Merge pull request #6 from mccaffers/5-add-trade-management-with-tests
Added a trade manager to record trades
2 parents 85d76be + 94ade91 commit 2cb570c

File tree

22 files changed

+551
-65
lines changed

22 files changed

+551
-65
lines changed

.github/workflows/brew.sh

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
#!/bin/bash
22

3-
# Check if a package is already installed via Homebrew, then skip
3+
# Function to check if a package is already installed via Homebrew, then skip installation if it is
44
check_and_install() {
55
if ! brew list $1 &>/dev/null; then
6-
echo "Installing $1..."
7-
brew install $1
6+
echo "Installing $1..." # Inform the user that the package is being installed
7+
brew install $1 # Install the package using Homebrew
88
else
9-
echo "$1 is already installed"
9+
echo "$1 is already installed" # Inform the user that the package is already installed
1010
fi
1111
}
1212

1313
# Install packages if they don't exist
14-
check_and_install postgresql
15-
check_and_install pkg-config
14+
check_and_install postgresql # Check and install PostgreSQL
15+
check_and_install pkg-config # Check and install pkg-config

.github/workflows/cpp_coverage.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
PROFILE_DIR=$(ls -t /tmp/Build/ProfileData | head -n 1);
2+
xcrun llvm-cov show \
3+
/tmp/Build/Products/Debug/tests.xctest/Contents/MacOS/tests \
4+
-instr-profile="/tmp/Build/ProfileData/${PROFILE_DIR}/Coverage.profdata" \
5+
-format=text \
6+
> coverage.txt

.github/workflows/sonarcloud.yml

Lines changed: 32 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,20 @@
1-
# Backtesting C++ Workflow
2-
# To build, test and perform SonarCloud analysis
3-
name: Build
4-
51
on:
2+
# Trigger analysis when pushing in master or pull requests, and when creating
3+
# a pull request.
64
push:
75
branches:
8-
- main # Trigger on pushes to main branch
6+
- main
97
pull_request:
10-
types:
11-
- opened # When PR is first created
12-
- synchronize # When new commits are pushed to the PR
13-
- reopened # When PR is reopened after being closed
8+
types: [opened, synchronize, reopened]
9+
name: Build
1410

15-
# Environment variables used across jobs
1611
env:
17-
BUILD_TYPE: Release # Set CMake build configuration
18-
BUILD_WRAPPER_OUT_DIR: build_wrapper_output_directory # Output directory for build wrapper
12+
# Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
13+
BUILD_TYPE: Release
14+
BUILD_WRAPPER_OUT_DIR: build_wrapper_output_directory # Directory where build-wrapper output will be placed
1915

2016
jobs:
17+
2118
build:
2219
name: Build & Test
2320
runs-on: macos-14 # Use macOS 14 (Sonoma) runner
@@ -52,17 +49,21 @@ jobs:
5249
# - Outputs results in JUnit format
5350
- name: Run tests
5451
run: >
52+
OTHER_CFLAGS="-fprofile-instr-generate -fcoverage-mapping"
53+
OTHER_CPLUSPLUSFLAGS="-fprofile-instr-generate -fcoverage-mapping"
54+
OTHER_SWIFT_FLAGS="-profile-generate -profile-coverage-mapping"
55+
LLVM_PROFILE_FILE="/tmp/coverage.profraw"
5556
CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
56-
xcodebuild
57-
-scheme tests
58-
-destination 'platform=macOS'
57+
xcodebuild
58+
-scheme tests
59+
-destination 'platform=macOS'
5960
-resultBundlePath TestResult/
6061
-enableCodeCoverage YES
6162
-derivedDataPath "${RUNNER_TEMP}/Build/DerivedData"
62-
HEADER_SEARCH_PATHS="./external/libpqxx/include/pqxx/internal ./external/libpqxx/include/ ./external/libpqxx/build/include/ ./external/" \
63-
LIBRARY_SEARCH_PATHS="./external/libpqxx/src/ ./external/libpqxx/build/src/" \
63+
HEADER_SEARCH_PATHS="./external/libpqxx/include/pqxx/internal ./external/libpqxx/include/ ./external/libpqxx/build/include/ ./external/"
64+
LIBRARY_SEARCH_PATHS="./external/libpqxx/src/ ./external/libpqxx/build/src/"
6465
OTHER_LDFLAGS="-L./external/libpqxx/build/src -lpqxx -lpq -L/opt/homebrew/Cellar/pkgconf/2.3.0_1/lib -L/opt/homebrew/Cellar/pkgconf/2.3.0_1/lib/pkgconfig -L/opt/homebrew/Cellar/postgresql@14/14.15/lib/postgresql@14 -L/opt/homebrew/Cellar/postgresql@14/14.15/lib/postgresql@14/pgxs -L/opt/homebrew/Cellar/postgresql@14/14.15/lib/postgresql@14/pkgconfig"
65-
clean build test
66+
clean build test
6667
| xcpretty -r junit && exit ${PIPESTATUS[0]}
6768
- name: Convert coverage report to sonarqube format
6869
run: >
@@ -73,8 +74,8 @@ jobs:
7374
uses: actions/upload-artifact@v4
7475
with:
7576
path: sonarqube-generic-coverage.xml
76-
retention-days: 1
77-
77+
retention-days: 1 # Artifact will be available only for 5 days.
78+
7879
sonar-scan:
7980
name: SonarCloud Scan
8081
runs-on: ubuntu-latest
@@ -109,18 +110,28 @@ jobs:
109110
# https://github.com/SonarSource/sonarqube-scan-action
110111
- name: Install Build Wrapper
111112
uses: SonarSource/sonarqube-scan-action/[email protected]
113+
# This step installs the SonarQube build wrapper, which is necessary for analyzing C/C++ projects.
114+
115+
# Downloads all artifacts generated by previous steps in the workflow
112116
- name: Download all workflow run artifacts
113117
uses: actions/download-artifact@v4
118+
119+
# Configures the CMake build system, specifying the source directory and build directory, and setting the build type
114120
- name: Configure CMake
115121
run: cmake -S ${{github.workspace}} -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
122+
123+
# Runs the build wrapper to capture build commands and outputs them to the specified directory. Then builds the project using CMake
116124
- name: Run build-wrapper
117125
run: |
118126
build-wrapper-linux-x86-64 --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}
127+
128+
# Performs the SonarQube scan using the scan action. Uses captured build commands for analysis and requires GitHub and SonarQube tokens for authentication
119129
- name: SonarQube Scan
120130
uses: SonarSource/[email protected]
121131
env:
122132
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
123133
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
124134
with:
125135
args: >
126-
--define sonar.cfamily.compile-commands="${{ env.BUILD_WRAPPER_OUT_DIR }}/compile_commands.json" \
136+
--define sonar.cfamily.compile-commands="${{ env.BUILD_WRAPPER_OUT_DIR }}/compile_commands.json"
137+
--define sonar.coverageReportPaths=artifact/sonarqube-generic-coverage.xml

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,6 @@ TestResult
3737
.DS_Store
3838

3939
xcuserdata/
40-
xcuserstate/
40+
xcuserstate/
41+
TestResult.xcresult/
42+
sonarqube-generic-coverage.xml

.vscode/settings.json

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
{
2+
"files.associations": {
3+
"unordered_map": "cpp",
4+
"__bit_reference": "cpp",
5+
"__hash_table": "cpp",
6+
"__locale": "cpp",
7+
"__node_handle": "cpp",
8+
"__split_buffer": "cpp",
9+
"__threading_support": "cpp",
10+
"__tree": "cpp",
11+
"__verbose_abort": "cpp",
12+
"any": "cpp",
13+
"array": "cpp",
14+
"bitset": "cpp",
15+
"cctype": "cpp",
16+
"charconv": "cpp",
17+
"clocale": "cpp",
18+
"cmath": "cpp",
19+
"complex": "cpp",
20+
"cstdarg": "cpp",
21+
"cstddef": "cpp",
22+
"cstdint": "cpp",
23+
"cstdio": "cpp",
24+
"cstdlib": "cpp",
25+
"cstring": "cpp",
26+
"ctime": "cpp",
27+
"cwchar": "cpp",
28+
"cwctype": "cpp",
29+
"deque": "cpp",
30+
"execution": "cpp",
31+
"memory": "cpp",
32+
"forward_list": "cpp",
33+
"initializer_list": "cpp",
34+
"iomanip": "cpp",
35+
"ios": "cpp",
36+
"iosfwd": "cpp",
37+
"iostream": "cpp",
38+
"istream": "cpp",
39+
"limits": "cpp",
40+
"list": "cpp",
41+
"locale": "cpp",
42+
"map": "cpp",
43+
"mutex": "cpp",
44+
"new": "cpp",
45+
"optional": "cpp",
46+
"ostream": "cpp",
47+
"print": "cpp",
48+
"queue": "cpp",
49+
"ratio": "cpp",
50+
"regex": "cpp",
51+
"set": "cpp",
52+
"source_location": "cpp",
53+
"span": "cpp",
54+
"sstream": "cpp",
55+
"stack": "cpp",
56+
"stdexcept": "cpp",
57+
"streambuf": "cpp",
58+
"string": "cpp",
59+
"string_view": "cpp",
60+
"tuple": "cpp",
61+
"typeinfo": "cpp",
62+
"valarray": "cpp",
63+
"variant": "cpp",
64+
"vector": "cpp",
65+
"algorithm": "cpp"
66+
}
67+
}

CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ add_subdirectory(external/libpqxx EXCLUDE_FROM_ALL)
3939
include_directories(
4040
${CMAKE_SOURCE_DIR}/source/include
4141
${CMAKE_SOURCE_DIR}/source/include/utilities
42+
${CMAKE_SOURCE_DIR}/source/include/models
43+
${CMAKE_SOURCE_DIR}/source/include/trading
4244
${CMAKE_SOURCE_DIR}/source/include/trading_definitions
4345
${CMAKE_SOURCE_DIR}/external
4446
)

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ Feel free to explore, but this code base is usuable at the moment.
88

99
I'm developing a high-performance C++ backtesting engine designed to analyze financial data and evaluate multiple trading strategies at scale.
1010

11-
![alt](images/development_active.svg) [![Build](https://github.com/mccaffers/backtesting-engine-cpp/actions/workflows/sonarcloud.yml/badge.svg)](https://github.com/mccaffers/backtesting-engine-cpp/actions/workflows/sonarcloud.yml) [![Bugs](https://sonarcloud.io/api/project_badges/measure?project=mccaffers_backtesting-engine-cpp&metric=bugs)](https://sonarcloud.io/summary/new_code?id=mccaffers_backtesting-engine-cpp) [![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=mccaffers_backtesting-engine-cpp&metric=code_smells)](https://sonarcloud.io/summary/new_code?id=mccaffers_backtesting-engine-cpp) [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=mccaffers_backtesting-engine-cpp&metric=coverage)](https://sonarcloud.io/summary/new_code?id=mccaffers_backtesting-engine-cpp)
11+
[![Build](https://github.com/mccaffers/backtesting-engine-cpp/actions/workflows/sonarcloud.yml/badge.svg)](https://github.com/mccaffers/backtesting-engine-cpp/actions/workflows/sonarcloud.yml) [![Bugs](https://sonarcloud.io/api/project_badges/measure?project=mccaffers_backtesting-engine-cpp&metric=bugs)](https://sonarcloud.io/summary/new_code?id=mccaffers_backtesting-engine-cpp) [![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=mccaffers_backtesting-engine-cpp&metric=code_smells)](https://sonarcloud.io/summary/new_code?id=mccaffers_backtesting-engine-cpp) [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=mccaffers_backtesting-engine-cpp&metric=coverage)](https://sonarcloud.io/summary/new_code?id=mccaffers_backtesting-engine-cpp)
1212

1313
I'm extracting results and creating various graphs for trend analyses using SciPy for calculations and Plotly for visualization.
1414

@@ -63,7 +63,7 @@ Xcode - Library Path
6363
"/opt/homebrew/Cellar/postgresql@14/14.15/lib/postgresql@14"
6464
```
6565

66-
### Test build with cmake
66+
### Test the build
6767

6868
`sh ./scripts/build.sh`
6969

backtesting-engine-cpp.xcodeproj/project.pbxproj

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,16 @@
1515
941B549B2D3BBADE00E3BF64 /* trading_definitions_json.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 941B54992D3BBADD00E3BF64 /* trading_definitions_json.cpp */; };
1616
94280BA32D2FC00200F1CF56 /* base64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94280BA22D2FC00200F1CF56 /* base64.cpp */; };
1717
94280BA42D2FC00200F1CF56 /* base64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94280BA22D2FC00200F1CF56 /* base64.cpp */; };
18+
943398242D57E53400287A2D /* jsonParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 943398232D57E53400287A2D /* jsonParser.cpp */; };
19+
943398252D57E53400287A2D /* jsonParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 943398232D57E53400287A2D /* jsonParser.cpp */; };
20+
943398272D57E54000287A2D /* jsonParser.mm in Sources */ = {isa = PBXBuildFile; fileRef = 943398262D57E54000287A2D /* jsonParser.mm */; };
1821
94364CB62D416D8D00F35B55 /* db.mm in Sources */ = {isa = PBXBuildFile; fileRef = 94364CB52D416D8000F35B55 /* db.mm */; };
1922
944698852D3A545B0070E30F /* libpq.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 94CD8A972D2D34A100041BBA /* libpq.a */; };
23+
94674B872D533B4000973137 /* tradeManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94674B852D533B4000973137 /* tradeManager.cpp */; };
24+
94674B882D533B4000973137 /* tradeManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94674B852D533B4000973137 /* tradeManager.cpp */; };
25+
94674B8A2D533BDA00973137 /* tradeManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 94674B892D533BDA00973137 /* tradeManager.mm */; };
26+
94674B8D2D533E7800973137 /* trade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94674B8B2D533E7800973137 /* trade.cpp */; };
27+
94674B8E2D533E7800973137 /* trade.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94674B8B2D533E7800973137 /* trade.cpp */; };
2028
9470B5A42C8C5AD0007D9CC6 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9470B5A32C8C5AD0007D9CC6 /* main.cpp */; };
2129
9470B5B62C8C5BFD007D9CC6 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9470B5A32C8C5AD0007D9CC6 /* main.cpp */; };
2230
94CD8B992D2DCDD800041BBA /* libpqxx-7.10.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 94CD8B982D2DCDD800041BBA /* libpqxx-7.10.a */; };
@@ -54,6 +62,9 @@
5462
94280BA12D2FC00200F1CF56 /* base64.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = base64.hpp; sourceTree = "<group>"; };
5563
94280BA22D2FC00200F1CF56 /* base64.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = base64.cpp; sourceTree = "<group>"; };
5664
942966D82D48E84A00532862 /* priceData.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = priceData.hpp; sourceTree = "<group>"; };
65+
943398222D57E52900287A2D /* jsonParser.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = jsonParser.hpp; sourceTree = "<group>"; };
66+
943398232D57E53400287A2D /* jsonParser.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = jsonParser.cpp; sourceTree = "<group>"; };
67+
943398262D57E54000287A2D /* jsonParser.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = jsonParser.mm; sourceTree = "<group>"; };
5768
94364CB52D416D8000F35B55 /* db.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = db.mm; sourceTree = "<group>"; };
5869
944D0DC82C8C3704004DD0FC /* LICENSE.MD */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = LICENSE.MD; sourceTree = "<group>"; };
5970
944D0DC92C8C3704004DD0FC /* build.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = build.sh; sourceTree = "<group>"; };
@@ -65,6 +76,11 @@
6576
944D0DD02C8C3704004DD0FC /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
6677
944D0DD12C8C3704004DD0FC /* random-indices-sp500-variable.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "random-indices-sp500-variable.svg"; sourceTree = "<group>"; };
6778
944D0DD32C8C3704004DD0FC /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
79+
94674B822D533B1D00973137 /* trade.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = trade.hpp; sourceTree = "<group>"; };
80+
94674B832D533B2F00973137 /* tradeManager.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = tradeManager.hpp; sourceTree = "<group>"; };
81+
94674B852D533B4000973137 /* tradeManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = tradeManager.cpp; sourceTree = "<group>"; };
82+
94674B892D533BDA00973137 /* tradeManager.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = tradeManager.mm; sourceTree = "<group>"; };
83+
94674B8B2D533E7800973137 /* trade.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = trade.cpp; sourceTree = "<group>"; };
6884
94685CCE2D384A8B00863D04 /* json.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = json.hpp; sourceTree = "<group>"; };
6985
9470B5A12C8C5AD0007D9CC6 /* source */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = source; sourceTree = BUILT_PRODUCTS_DIR; };
7086
9470B5A32C8C5AD0007D9CC6 /* main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = "<group>"; };
@@ -1289,6 +1305,7 @@
12891305
942966D72D48E84100532862 /* models */ = {
12901306
isa = PBXGroup;
12911307
children = (
1308+
94674B822D533B1D00973137 /* trade.hpp */,
12921309
942966D82D48E84A00532862 /* priceData.hpp */,
12931310
);
12941311
path = models;
@@ -1343,6 +1360,30 @@
13431360
path = images;
13441361
sourceTree = "<group>";
13451362
};
1363+
94674B842D533B2F00973137 /* trading */ = {
1364+
isa = PBXGroup;
1365+
children = (
1366+
94674B832D533B2F00973137 /* tradeManager.hpp */,
1367+
);
1368+
path = trading;
1369+
sourceTree = "<group>";
1370+
};
1371+
94674B862D533B4000973137 /* trading */ = {
1372+
isa = PBXGroup;
1373+
children = (
1374+
94674B852D533B4000973137 /* tradeManager.cpp */,
1375+
);
1376+
path = trading;
1377+
sourceTree = "<group>";
1378+
};
1379+
94674B8C2D533E7800973137 /* models */ = {
1380+
isa = PBXGroup;
1381+
children = (
1382+
94674B8B2D533E7800973137 /* trade.cpp */,
1383+
);
1384+
path = models;
1385+
sourceTree = "<group>";
1386+
};
13461387
94685CCF2D384A8B00863D04 /* nlohmann */ = {
13471388
isa = PBXGroup;
13481389
children = (
@@ -1354,6 +1395,9 @@
13541395
9470B5A22C8C5AD0007D9CC6 /* source */ = {
13551396
isa = PBXGroup;
13561397
children = (
1398+
943398232D57E53400287A2D /* jsonParser.cpp */,
1399+
94674B8C2D533E7800973137 /* models */,
1400+
94674B862D533B4000973137 /* trading */,
13571401
94DE4F772C8C3E7C00FE48FF /* include */,
13581402
941B54982D3BBAD800E3BF64 /* trading_definitions */,
13591403
94280BA72D2FC29F00F1CF56 /* utilities */,
@@ -1368,6 +1412,8 @@
13681412
9470B5AD2C8C5B99007D9CC6 /* tests */ = {
13691413
isa = PBXGroup;
13701414
children = (
1415+
943398262D57E54000287A2D /* jsonParser.mm */,
1416+
94674B892D533BDA00973137 /* tradeManager.mm */,
13711417
94364CB52D416D8000F35B55 /* db.mm */,
13721418
);
13731419
path = tests;
@@ -3464,6 +3510,8 @@
34643510
94DE4F772C8C3E7C00FE48FF /* include */ = {
34653511
isa = PBXGroup;
34663512
children = (
3513+
943398222D57E52900287A2D /* jsonParser.hpp */,
3514+
94674B842D533B2F00973137 /* trading */,
34673515
942966D72D48E84100532862 /* models */,
34683516
94B8C7932D3D770800E17EB6 /* utilities */,
34693517
941B548F2D3BBA3B00E3BF64 /* trading_definitions */,
@@ -3569,8 +3617,11 @@
35693617
buildActionMask = 2147483647;
35703618
files = (
35713619
9470B5A42C8C5AD0007D9CC6 /* main.cpp in Sources */,
3620+
943398252D57E53400287A2D /* jsonParser.cpp in Sources */,
35723621
94280BA32D2FC00200F1CF56 /* base64.cpp in Sources */,
3622+
94674B8E2D533E7800973137 /* trade.cpp in Sources */,
35733623
941B549B2D3BBADE00E3BF64 /* trading_definitions_json.cpp in Sources */,
3624+
94674B872D533B4000973137 /* tradeManager.cpp in Sources */,
35743625
94CD8BA02D2E8CE500041BBA /* databaseConnection.cpp in Sources */,
35753626
940A61132C92CE210083FEB8 /* configManager.cpp in Sources */,
35763627
940A61172C92CE960083FEB8 /* serviceA.cpp in Sources */,
@@ -3582,9 +3633,14 @@
35823633
buildActionMask = 2147483647;
35833634
files = (
35843635
94CD8BA12D2E8CE500041BBA /* databaseConnection.cpp in Sources */,
3636+
943398242D57E53400287A2D /* jsonParser.cpp in Sources */,
35853637
94280BA42D2FC00200F1CF56 /* base64.cpp in Sources */,
3638+
94674B8D2D533E7800973137 /* trade.cpp in Sources */,
35863639
941B549A2D3BBADE00E3BF64 /* trading_definitions_json.cpp in Sources */,
3640+
94674B8A2D533BDA00973137 /* tradeManager.mm in Sources */,
35873641
940A61182C92CE960083FEB8 /* serviceA.cpp in Sources */,
3642+
94674B882D533B4000973137 /* tradeManager.cpp in Sources */,
3643+
943398272D57E54000287A2D /* jsonParser.mm in Sources */,
35883644
9470B5B62C8C5BFD007D9CC6 /* main.cpp in Sources */,
35893645
94364CB62D416D8D00F35B55 /* db.mm in Sources */,
35903646
940A61142C92CE210083FEB8 /* configManager.cpp in Sources */,
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict/>
5+
</plist>

0 commit comments

Comments
 (0)