it simply means that your system should make a new global high before you are entitled for a payment. If your system makes 1000 at the end of January, 800 at the end of Februray, 900 at the end of March and 1100 at the end of April, your profit will be generated at the end of April and they will amount to 1100-100=100;
no, once the system starts being traded, it will be traded in the form it was at submission time, i.e. the quant will not be allowed to update parameters/change details. Of course a submitted system can have an adaptive logic, by changing parameters according to the value of some meta-indicator. If the quant believes there is some big change to be made, it is ok to re-submit the changed system, but it will need again to accumulate a track record before being traded.
Just out of curiousity I did some testing and it looks like the class actually was the culprit.
I submitted a simple strategy in 2 versions, one with a class and the other with a dictionary as state. The class version was rejected (exaclty like the one from my 1st post) and the dictionary version got accepted.
Ok, so looks like for now for all strategies without a state I have to output and pass None to weights for the state & pass a state variable to the strategy.
Will keep you updated. Thanks for looking into the issue.
@antinomy In the end we followed your advise and changed a little bit the algorithm for adding data, once a cryptocurrency is in the top10 we include it with its past history and go on with the update (now DASH and XMR are being updated). Of course once the crypto is not among the top 10, the liquidity tag for the filter is "zero". Thank you!
@theflyingdutchman Hi, each system is tested for correlations against the templates we provide and with all systems submitted to the past crypto contest.
Sorry for the confusion when you run the notebook, we are working on improving the correlation messages.
We already changed the information displayed in the submission area. If you want to get more infos on correlations, please submit your code (it does not matter the message about correlations you get in the notebook, the system will be processed). After processing, the submission will appear in your submission area as a "non-eligible" submission because of high correlations, and you will see to which template the correlation is high; and to which past submission you made (to the Q16) the correlation is high. Moreover, you will get some infos about correlations to systems you are submitting to the Q17 contest.
@magenta-grimer Hi, the lookback period in the backtester function is expressed in calendar days, and the indicators are expressed in trading days. So as far as the lookback period is long enough to include all indicator needed periods, all choices are fine.
If the longest period needed for an indicator is 10 trading days (2 weeks), a lookback period of (for example) 20, 50 or 100 for the backtester function will deliver the same results. The shorter the better for efficiency.
We are making some changes before starting competitions, it affected the statuses of some submissions and they became invisible on the client side. Now it should be ok.
We carefully preserve users' data, we are making backups every day. So in the worst case of data loss, we are able to restore most data from these backups. Don't worry a lot. And thank you for the report.
Yes, pip is way faster. Thanks!
I might have found an even faster solution but I guess I have to wait a few hours to find out if it really works.
Here's what I did:
I created a folder in /root/books called "modules" to install cvxpy there to make it persistent:
!mkdir modules && pip install --target=modules cvxpy
Then if the import fails in the strategy, it creates symbolic links in /usr/local/lib/python3.7/site-packages/ that point to the content of /root/books/modules/
import cvxpy as cp
source = '/root/book/modules/'
target = '/usr/local/lib/python3.7/site-packages/'
for dirpath, dirnames, filenames in os.walk(source):
source_path = dirpath.replace(source, '')
target_path = os.path.join(target, source_path)
if not os.path.exists(target_path) and not os.path.islink(target_path):
for file in filenames:
source_file = os.path.join(dirpath, file)
target_file = os.path.join(target, source_path, file)
if not os.path.exists(target_file) and not os.path.islink(target_file):
import cvxpy as cp
Creating the symlinks only takes 0.07 seconds, so fingers crossed 🙂
UPDATE (a few hours later):
It actually worked. When I just reopened the strategy, the environment was newly initialized. First I tried just importing cvxpy and got the ModuleNotFoundError. Then I ran the strategy including the code above: cvxpy was imported correctly and the strategy ran.
I'm not sure if that solution works for every module because I don't know if pip might also write something to other directories than site-packages.