Navigation

    Quantiacs Community

    • Register
    • Login
    • Search
    • Categories
    • News
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    1. Home
    2. EDDIEE
    3. Best
    E
    • Profile
    • Following 0
    • Followers 0
    • Topics 13
    • Posts 26
    • Best 6
    • Groups 0
    • Blog

    Best posts made by EDDIEE

    • Improving Quantiacs: Aligning Developer Objectives with the ones of Quantiacs

      Introduction:
      In this blog post, I will explore the goals of Quantiacs when organizing their contest and discuss potential improvements to better align the interests of developers with those of Quantiacs. By reevaluating the contest setup, we can create a more conducive environment for the development of profitable and robust strategies.

      Understanding Quantiacs' Goals (I am not an insider this is my rational guess):
      Quantiacs aims to identify the top X strategies that meet the following objectives:

      1. Long-Term Profitability:
        Quantiacs seeks strategies that exhibit profitability in the long term, extending beyond a mere four-month period. The focus on long-term profitability ensures the development of strategies that can consistently generate positive returns, providing stability and sustainability.

      2. Uncorrelated Strategies:
        Quantiacs recognizes the importance of utilizing top strategies that are not highly correlated. By encouraging uncorrelated strategies, Quantiacs aims to build a diverse and resilient portfolio. Correlation among strategies can amplify risks and diminish the benefits of diversification. Therefore, strategies that exhibit low correlation are preferred, enhancing overall stability and risk management.

      3. Inherent Diversification:
        Quantiacs values strategies that are inherently well-diversified and not overly concentrated. A well-diversified strategy reduces reliance on specific assets or markets, mitigating potential losses associated with single-point failures. Quantiacs promotes strategies that encompass broad market exposure and distribute risk across various assets or sectors.

      Contest Setup and Its Impact:
      However, the current setup of the contest may not entirely align with Quantiacs' objectives. The contest is primarily focused on finding a strategy that performs exceptionally well in terms of the contest Sharpe ratio over a four-month period.

      Incentives and Rationality:
      As a rational developer, the contest goal may incentivize you to build highly risky strategies that generate exceptional returns within the short contest period. This approach aims to secure a top position in the rankings and to get a riskless try with real money (allocation of funds). However, this mindset does not fully consider Quantiacs' emphasis on long-term profitability, low correlation, and inherent diversification. Additionally, many developers adopt similar strategies, resulting in a high degree of correlation among the top performers. Because the strategies that aims short term profitability are in many cases similar.

      Suggested Improvements:
      To better align the objectives of developers with those of Quantiacs, here are some suggestions:

      1. Customized Risk-Weighted Score:
        Introduce a customized score that places more weight on risk. For instance, an adjusted Sharpe ratio that emphasizes the volatility component or a comprehensive performance score that considers multiple aspects such as mean, recovery time, volatility, downside beta/capture, max drawdown, concentration, and correlation with other (top) strategies.

      2. Multiple Rankings for One Contest:
        Introduce multiple rankings within a single contest. For example:

      • The first ranking could focus on the classical Sharpe ratio.
      • The second ranking could place more emphasis on the risk side, considering a customized score that accounts for the risk of an investment strategy (while still considering returns).
      • The third ranking could emphasize correlation/uniqueness, quantifying how much return was generated per unit of correlation/uniqueness.
      • Allocate positions to the top three strategies in each ranking, with each developer eligible for only one allocation.
      1. Adjust Submission Filters:
        Consider adjusting the submission filters, such as requiring a minimum number of actively traded assets within each strategy (e.g., 10 or 15). Additionally, strategies with excessively high returns that may indicate overfitting should not be accepted.

      2. Extended Contest Duration:
        Consider increasing the contest duration significantly, from four months to, for example, 12 months. This adjustment could differentiate between genuinely profitable strategies and overfitted or risky ones. But this adjustment would be clearly against the interest of the developers because the contest would be dissolved only once in a year. To maintain regular participation, a potential solution could involve starting a new contest every three or four months, each running for a year.

      Conclusion:
      By implementing these improvements, Quantiacs can foster a contest environment that better aligns the goals of developers with their own objectives. These adjustments would promote long-term profitability, encourage uncorrelated strategies, enhance inherent diversification, and lead to the development of more robust and sustainable investment strategies.

      With this blog post, I hope to contribute to the continuous improvement of Quantiacs and the better alignment of goals between Quantiacs and developers.

      Best regards,
      EDDIEE

      posted in General Discussion
      E
      EDDIEE
    • Q17 Neural Networks Algo Template; is there an error in train_model()?

      In the function "train_model()" the for-loop "for asset_name in asset_name_all:" finishes before the model-optimization. So basically the optimized LSTM neural network is always based on the last asset. This can't be on purpose, can it?

      best
      eduard

      def train_model(data):
      """
      train the LSTM network
      """

      asset_name_all = data.coords['asset'].values
      
      features_all = get_features(data)
      target_all = get_target_classes(data)
      
      model = get_model()
      
      for asset_name in asset_name_all:
          
          # drop missing values:
          target_cur = target_all.sel(asset=asset_name).dropna('time', 'any')
          features_cur = features_all.sel(asset=asset_name).dropna('time', 'any')
      
          # align features and targets:
          target_for_learn_df, feature_for_learn_df = xr.align(target_cur, features_cur, join='inner')
          
      criterion = nn.MSELoss() # define loss function
      
      optimiser = optim.LBFGS(model.parameters(), lr=0.08) # we use an LBFGS solver as optimiser
      epochs = 1 #how many epochs 
      for i in range(epochs):
              def closure(): # reevaluates the model and returns the loss (forward pass)
                  optimiser.zero_grad()
                  
                  #input tensor
                  in_ = torch.zeros(1,len(feature_for_learn_df.values))
                  in_[0,:]=torch.tensor(np.array(feature_for_learn_df.values))
                  
                  #output
                  out = model(in_)
                  
                  #target tensor
                  target = torch.zeros(1,len(target_for_learn_df.values))
                  target[0,:]=torch.tensor(np.array(target_for_learn_df.values))
                  
                  #evaluate loss
                  loss = criterion(out, target)
                  loss.backward()
                  
                  return loss
              optimiser.step(closure) #updates weights
              
      return model
      posted in Strategy help
      E
      EDDIEE
    • Q17 Machine learning - RidgeRegression (Long/Short); there is an error in the code

      The loop "for asset_name in asset_name_all:" creates a model for each asset, but the individual models are never saved. At the end, the model for the last asset is returned and all the predictions are created based on this last model (asset 'XRP').

      def train_model(data):
      """Create and train the models working on an asset-by-asset basis."""

      asset_name_all = data.coords['asset'].values
      
      data = data.sel(time=slice('2013-05-01',None)) # cut the noisy data head before 2013-05-01
      
      features_all = get_features(data)
      target_all = get_target_classes(data)
      
      model = create_model()
      
      for asset_name in asset_name_all:
          
          # drop missing values:
          target_cur = target_all.sel(asset=asset_name).dropna('time', 'any')
          features_cur = features_all.sel(asset=asset_name).dropna('time', 'any')
      
          # align features and targets:
          target_for_learn_df, feature_for_learn_df = xr.align(target_cur, features_cur, join='inner')
      
          if len(features_cur.time) < 10:
              # not enough points for training
              continue
      
          
          
          try:
              model.fit(feature_for_learn_df.values, target_for_learn_df)
          except KeyboardInterrupt as e:
              raise e
          except:
              logging.exception('model training failed')
      
      return model
      posted in Strategy help
      E
      EDDIEE
    • RE: Local Development Error "No module named 'qnt'"

      Thanks for your support, I really appreciate, together we are better! 🙂

      This is how I solved the step four issue:

      84d48667-ba93-4ee2-8e09-413d97179593-image.png

      Kind Regards
      Eddie

      posted in Support
      E
      EDDIEE
    • Q17 Contest: When will you update the performance of the strategies?

      The last day shown ist currenty August 2th.
      Best
      Eddie

      posted in Support
      E
      EDDIEE
    • Local Development Error "No module named 'qnt'"

      Hi guys, local development doesn't work.
      I followed all the steps for installing local development.

      I run "conda activate qntdev"
      Then I create a Jupyter Notebook in this folder:
      "C:\Users\baiti\anaconda3\envs\qntdev"

      But when I run this Notebook I get always the error: "No module named 'qnt'"

      Can you help me out?

      Best
      Eddie

      posted in Support
      E
      EDDIEE
    • Documentation
    • About
    • Career
    • My account
    • Privacy policy
    • Terms and Conditions
    • Cookies policy
    Home
    Copyright © 2014 - 2021 Quantiacs LLC.
    Powered by NodeBB | Contributors