Move "freqai.lock" to backend to simplify user interface
This commit is contained in:
parent
a5e96881f4
commit
3a9ec76c91
@ -177,8 +177,6 @@ The user interface is isolated to the typical config file. A typical FreqAI conf
|
|||||||
Features are added by the user inside the `populate_any_indicators()` method of the strategy
|
Features are added by the user inside the `populate_any_indicators()` method of the strategy
|
||||||
by prepending indicators with `%` and labels are added by prepending `&`.
|
by prepending indicators with `%` and labels are added by prepending `&`.
|
||||||
There are some important components/structures that the user *must* include when building their feature set.
|
There are some important components/structures that the user *must* include when building their feature set.
|
||||||
As shown below, `with self.freqai.lock:` must be used to ensure thread safety - especially when using third
|
|
||||||
party libraries for indicator construction such as TA-lib.
|
|
||||||
Another structure to consider is the location of the labels at the bottom of the example function (below `if set_generalized_indicators:`).
|
Another structure to consider is the location of the labels at the bottom of the example function (below `if set_generalized_indicators:`).
|
||||||
This is where the user will add single features and labels to their feature set to avoid duplication from
|
This is where the user will add single features and labels to their feature set to avoid duplication from
|
||||||
various configuration parameters which multiply the feature set such as `include_timeframes`.
|
various configuration parameters which multiply the feature set such as `include_timeframes`.
|
||||||
@ -203,7 +201,6 @@ various configuration parameters which multiply the feature set such as `include
|
|||||||
|
|
||||||
coint = pair.split('/')[0]
|
coint = pair.split('/')[0]
|
||||||
|
|
||||||
with self.freqai.lock:
|
|
||||||
if informative is None:
|
if informative is None:
|
||||||
informative = self.dp.get_pair_dataframe(pair, tf)
|
informative = self.dp.get_pair_dataframe(pair, tf)
|
||||||
|
|
||||||
@ -430,7 +427,6 @@ The FreqAI strategy requires the user to include the following lines of code in
|
|||||||
|
|
||||||
coin = pair.split('/')[0]
|
coin = pair.split('/')[0]
|
||||||
|
|
||||||
with self.freqai.lock:
|
|
||||||
if informative is None:
|
if informative is None:
|
||||||
informative = self.dp.get_pair_dataframe(pair, tf)
|
informative = self.dp.get_pair_dataframe(pair, tf)
|
||||||
|
|
||||||
|
@ -961,6 +961,7 @@ class FreqaiDataKitchen:
|
|||||||
for tf in tfs:
|
for tf in tfs:
|
||||||
if tf == tfs[-1]:
|
if tf == tfs[-1]:
|
||||||
sgi = True # doing this last allows user to use all tf raw prices in labels
|
sgi = True # doing this last allows user to use all tf raw prices in labels
|
||||||
|
with strategy.freqai.lock:
|
||||||
dataframe = strategy.populate_any_indicators(
|
dataframe = strategy.populate_any_indicators(
|
||||||
pair,
|
pair,
|
||||||
dataframe.copy(),
|
dataframe.copy(),
|
||||||
@ -968,6 +969,7 @@ class FreqaiDataKitchen:
|
|||||||
informative=base_dataframes[tf],
|
informative=base_dataframes[tf],
|
||||||
set_generalized_indicators=sgi
|
set_generalized_indicators=sgi
|
||||||
)
|
)
|
||||||
|
with strategy.freqai.lock:
|
||||||
if pairs:
|
if pairs:
|
||||||
for i in pairs:
|
for i in pairs:
|
||||||
if pair in i:
|
if pair in i:
|
||||||
|
@ -82,7 +82,6 @@ class FreqaiExampleStrategy(IStrategy):
|
|||||||
|
|
||||||
coin = pair.split('/')[0]
|
coin = pair.split('/')[0]
|
||||||
|
|
||||||
with self.freqai.lock:
|
|
||||||
if informative is None:
|
if informative is None:
|
||||||
informative = self.dp.get_pair_dataframe(pair, tf)
|
informative = self.dp.get_pair_dataframe(pair, tf)
|
||||||
|
|
||||||
@ -252,7 +251,6 @@ class FreqaiExampleStrategy(IStrategy):
|
|||||||
"prediction" + entry_tag not in pair_dict[pair]
|
"prediction" + entry_tag not in pair_dict[pair]
|
||||||
or pair_dict[pair]['extras']["prediction" + entry_tag] == 0
|
or pair_dict[pair]['extras']["prediction" + entry_tag] == 0
|
||||||
):
|
):
|
||||||
with self.freqai.lock:
|
|
||||||
pair_dict[pair]['extras']["prediction" + entry_tag] = abs(trade_candle["&-s_close"])
|
pair_dict[pair]['extras']["prediction" + entry_tag] = abs(trade_candle["&-s_close"])
|
||||||
if not follow_mode:
|
if not follow_mode:
|
||||||
self.freqai.dd.save_drawer_to_disk()
|
self.freqai.dd.save_drawer_to_disk()
|
||||||
@ -296,7 +294,6 @@ class FreqaiExampleStrategy(IStrategy):
|
|||||||
else:
|
else:
|
||||||
pair_dict = self.freqai.dd.follower_dict
|
pair_dict = self.freqai.dd.follower_dict
|
||||||
|
|
||||||
with self.freqai.lock:
|
|
||||||
pair_dict[pair]['extras']["prediction" + entry_tag] = 0
|
pair_dict[pair]['extras']["prediction" + entry_tag] = 0
|
||||||
if not follow_mode:
|
if not follow_mode:
|
||||||
self.freqai.dd.save_drawer_to_disk()
|
self.freqai.dd.save_drawer_to_disk()
|
||||||
|
@ -63,7 +63,6 @@ class freqai_test_classifier(IStrategy):
|
|||||||
|
|
||||||
coin = pair.split('/')[0]
|
coin = pair.split('/')[0]
|
||||||
|
|
||||||
with self.freqai.lock:
|
|
||||||
if informative is None:
|
if informative is None:
|
||||||
informative = self.dp.get_pair_dataframe(pair, tf)
|
informative = self.dp.get_pair_dataframe(pair, tf)
|
||||||
|
|
||||||
|
@ -62,7 +62,6 @@ class freqai_test_multimodel_strat(IStrategy):
|
|||||||
|
|
||||||
coin = pair.split('/')[0]
|
coin = pair.split('/')[0]
|
||||||
|
|
||||||
with self.freqai.lock:
|
|
||||||
if informative is None:
|
if informative is None:
|
||||||
informative = self.dp.get_pair_dataframe(pair, tf)
|
informative = self.dp.get_pair_dataframe(pair, tf)
|
||||||
|
|
||||||
|
@ -62,7 +62,6 @@ class freqai_test_strat(IStrategy):
|
|||||||
|
|
||||||
coin = pair.split('/')[0]
|
coin = pair.split('/')[0]
|
||||||
|
|
||||||
with self.freqai.lock:
|
|
||||||
if informative is None:
|
if informative is None:
|
||||||
informative = self.dp.get_pair_dataframe(pair, tf)
|
informative = self.dp.get_pair_dataframe(pair, tf)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user