Skip to content

Commit 8b81776

Browse files
committed
feat: refactor notifier callbacks and improve strategy configuration
Removed unnecessary use of std::move for callback assignment in notifier classes to avoid potential performance issues with std::function copies. Introduced deviation_ratio_threshold and mi_threshold in strategy Config for more flexible buy/sell conditions. Updated strategy logic to use these configurable thresholds instead of hardcoded values. Added missing Init method in strategy and invoked it in examples. Refactored StrategyWrapper to support multiple infrastructures (Binance Futures, Bybit Linear). Updated example files to reflect new config and initialization flow.
1 parent 98248b2 commit 8b81776

File tree

8 files changed

+161
-69
lines changed

8 files changed

+161
-69
lines changed

aoe/binance/infrastructure/infrastructure.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ class Infrastructure
139139
!it->second->best_bid_notifier) {
140140
return false;
141141
}
142-
it->second->best_bid_notifier->SetCallback(std::move(cb));
142+
it->second->best_bid_notifier->SetCallback(cb);
143143
return true;
144144
}
145145

@@ -151,7 +151,7 @@ class Infrastructure
151151
!it->second->best_ask_notifier) {
152152
return false;
153153
}
154-
it->second->best_ask_notifier->SetCallback(std::move(cb));
154+
it->second->best_ask_notifier->SetCallback(cb);
155155
return true;
156156
}
157157

@@ -300,7 +300,7 @@ class Infrastructure
300300
!it->second->best_bid_notifier) {
301301
return false;
302302
}
303-
it->second->best_bid_notifier->SetCallback(std::move(cb));
303+
it->second->best_bid_notifier->SetCallback(cb);
304304
return true;
305305
}
306306

@@ -312,7 +312,7 @@ class Infrastructure
312312
!it->second->best_ask_notifier) {
313313
return false;
314314
}
315-
it->second->best_ask_notifier->SetCallback(std::move(cb));
315+
it->second->best_ask_notifier->SetCallback(cb);
316316
return true;
317317
}
318318

aoe/bybit/infrastructure/infrastructure.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ class Infrastructure
138138
!it->second->best_bid_notifier) {
139139
return false;
140140
}
141-
it->second->best_bid_notifier->SetCallback(std::move(cb));
141+
it->second->best_bid_notifier->SetCallback(cb);
142142
return true;
143143
}
144144

@@ -150,7 +150,7 @@ class Infrastructure
150150
!it->second->best_ask_notifier) {
151151
return false;
152152
}
153-
it->second->best_ask_notifier->SetCallback(std::move(cb));
153+
it->second->best_ask_notifier->SetCallback(cb);
154154
return true;
155155
}
156156

@@ -298,7 +298,7 @@ class Infrastructure
298298
!it->second->best_bid_notifier) {
299299
return false;
300300
}
301-
it->second->best_bid_notifier->SetCallback(std::move(cb));
301+
it->second->best_bid_notifier->SetCallback(cb);
302302
return true;
303303
}
304304

@@ -310,7 +310,7 @@ class Infrastructure
310310
!it->second->best_ask_notifier) {
311311
return false;
312312
}
313-
it->second->best_ask_notifier->SetCallback(std::move(cb));
313+
it->second->best_ask_notifier->SetCallback(cb);
314314
return true;
315315
}
316316

aos/order_book_subscriber/order_book_subscribers.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class BestBidNotifier : public BestBidNotifierInterface<Price, Qty> {
7676
}
7777
void SetCallback(
7878
std::function<void(BestBid<Price, Qty>& new_bid)> cb) override {
79-
on_best_bid_update_callback_ = std::move(cb);
79+
on_best_bid_update_callback_ = cb;
8080
}
8181
~BestBidNotifier() override = default;
8282

@@ -119,7 +119,7 @@ class BestAskNotifier : public BestAskNotifierInterface<Price, Qty> {
119119
}
120120
void SetCallback(
121121
std::function<void(BestAsk<Price, Qty>& new_ask)> cb) override {
122-
on_best_ask_update_callback_ = std::move(cb);
122+
on_best_ask_update_callback_ = cb;
123123
};
124124
~BestAskNotifier() override = default;
125125

aos/strategies/deviation_and_mutual_info/c_strategy.h

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
#include "aos/market_triplet_manager/i_market_triplet_manager.h"
88
#include "aos/sliding_window_storage/c_sliding_window_storage.h"
9+
#include "aos/mutual_information/c_mutual_information_calculator.h"
910
#include "aos/strategy/i_strategy.h"
1011
#include "aos/strategy/strategy.h"
1112
#include "aos/strategies/deviation_and_mutual_info/config.h"
@@ -37,7 +38,7 @@ class Strategy : public StrategyInterface<HashT, T>{
3738
auto [_, ratio] = sliding_window_.GetDeviationRatio(hash, value);
3839
auto [status_deviation, dev] = sliding_window_.GetDeviation(hash, value);
3940
logi("Buy: hash:{} value:{} dev:{} ratio:{}", hash, value, dev, ratio);
40-
if (ratio > 0.001) {
41+
if (ratio > config_.deviation_ratio_threshold) {
4142
queue.push(hash);
4243
}
4344
});
@@ -48,7 +49,8 @@ class Strategy : public StrategyInterface<HashT, T>{
4849
for (const auto& pair : market_triplet_manager_.GetPairs(hash)) {
4950
auto [status, mi] = mi_calculator_.ComputeMutualInformation(
5051
sliding_window_, hash, pair, config_.number_bins);
51-
if (status && mi > 2) {
52+
logi("Buy status:{} mi:{}", status, mi);
53+
if (status && mi > config_.mi_threshold) {
5254
logi("Buy MI ({} <-> {}): {}", hash, pair, mi);
5355
queue.push(pair);
5456
}
@@ -83,7 +85,7 @@ class Strategy : public StrategyInterface<HashT, T>{
8385
auto [status_deviation, dev] = sliding_window_.GetDeviation(hash, value);
8486
logi("Sell: hash:{} value:{} dev:{} ratio:{}", hash, value, dev,
8587
ratio);
86-
if (ratio < 0.001) {
88+
if (ratio > config_.deviation_ratio_threshold) {
8789
queue.push(hash);
8890
}
8991
});
@@ -94,7 +96,8 @@ class Strategy : public StrategyInterface<HashT, T>{
9496
for (const auto& pair : market_triplet_manager_.GetPairs(hash)) {
9597
auto [status, mi] = mi_calculator_.ComputeMutualInformation(
9698
sliding_window_, hash, pair, config_.number_bins);
97-
if (status && mi > 2) {
99+
logi("Sell status:{} mi:{}", status, mi);
100+
if (status && mi > config_.mi_threshold) {
98101
logi("Sell MI ({} <-> {}): {}", hash, pair, mi);
99102
queue.push(pair);
100103
}
@@ -120,9 +123,13 @@ class Strategy : public StrategyInterface<HashT, T>{
120123
sliding_window_(config.window_size),
121124
market_triplet_manager_(market_triplet_manager),
122125
config_(config) {
126+
127+
}
128+
void Init(){
123129
InitBuyActions();
124130
InitSellActions();
125-
}
131+
}
132+
126133
void AnalyzeToBuy(const HashT asset, const T& value) override {
127134
core_strategy_.AnalyzeToBuy(asset, value);
128135
}
Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
11
#pragma once
22
#include <cstdint>
33

4-
54
namespace aos {
65
namespace strategies {
76
namespace deviation_and_mutual_information {
87
template <typename HashT>
9-
struct Config{
8+
struct Config {
109
const uint32_t window_size;
1110
const uint32_t number_bins;
1211
const HashT allowed_asset_hash;
12+
const double deviation_ratio_threshold;
13+
const double mi_threshold;
1314
// constexpr-конструктор
14-
constexpr Config(uint32_t new_window_size, uint32_t new_number_bins, HashT new_allowed_asset_hash)
15-
: window_size(new_window_size), number_bins(new_number_bins), allowed_asset_hash(new_allowed_asset_hash) {}
16-
17-
};
18-
};
19-
};
15+
constexpr Config(uint32_t new_window_size, uint32_t new_number_bins,
16+
HashT new_allowed_asset_hash, double new_deviation_ratio_threshold,
17+
double new_mi_threshold)
18+
: window_size(new_window_size),
19+
number_bins(new_number_bins),
20+
allowed_asset_hash(new_allowed_asset_hash),
21+
deviation_ratio_threshold(new_deviation_ratio_threshold),
22+
mi_threshold(new_mi_threshold) {}
2023
};
24+
}; // namespace deviation_and_mutual_information
25+
}; // namespace strategies
26+
}; // namespace aos

examples/example38/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ int main() {
2424
aos::TradingPair::kBTCUSDT);
2525
constexpr aos::strategies::deviation_and_mutual_information::Config<
2626
HashT>
27-
config_strategy{5, 10, binance_btc_usdt};
27+
config_strategy{5, 10, binance_btc_usdt, 0.001, 2};
2828

2929

3030
aos::strategies::deviation_and_mutual_information::Strategy<HashT, Price> strategy(market_triplet_manager, config_strategy);

examples/example40/main.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,12 @@ int main() {
2424
constexpr aos::strategies::deviation_and_mutual_information::Config<HashT> config{
2525
5,
2626
10,
27-
binance_btc_usdt
27+
binance_btc_usdt,
28+
0.001,
29+
1
2830
};
2931
aos::strategies::deviation_and_mutual_information::Strategy<HashT, Price> strategy(market_triplet_manager, config);
32+
strategy.Init();
3033

3134
StrategyEngineDefault<HashT, Price> strategy_engine(
3235
thread_pool, strategy);

0 commit comments

Comments
 (0)