<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Is it possible to combine stocks with crypto?]]></title><description><![CDATA[<p dir="auto">Hello,</p>
<p dir="auto">I'm testing combining crypto with stocks for Q21 but I'm getting an error. We hope to help.</p>
<p dir="auto">Thank you.</p>
<p dir="auto">Below is my code</p>
<pre><code># Import basic libraries.
import xarray as xr
import pandas as pd
import numpy as np
# Import Quantiacs libraries.
import qnt.data    as qndata  # load and manipulate data
import qnt.output as qnout   # manage output
import qnt.backtester as qnbt # backtester
import qnt.stats   as qnstats # statistical functions for analysis
import qnt.graph   as qngraph # graphical tools
import qnt.ta      as qnta    # indicators library
import qnt.xr_talib as xr_talib   # indicators library

def load_data(period):
    futures = qndata.futures.load_data(tail=period).isel(asset=0)
    stocks  = qndata.stocks.load_ndx_data(tail=period)
    crypto= qndata.crypto.load_data(tail=period)
    return {"futures": futures, "stocks": stocks, "crypto": crypto}, futures.time.values



def window(data, max_date: np.datetime64, lookback_period: int):
    min_date = max_date - np.timedelta64(lookback_period, "D")
    return {
        "futures": data["futures"].sel(time=slice(min_date, max_date)),
        "stocks":  data["stocks"].sel(time=slice(min_date, max_date)),
        "crypto":  data["crypto"].sel(time=slice(min_date, max_date)),
    }


def strategy(data):
    close_futures = data["crypto"].sel(field="close")
    close_stocks  = data["stocks"].sel(field="close")
    sma20 = qnta.sma(close_futures, 20).isel(time=-1)
    sma20_stocks = qnta.sma(close_stocks, 20).isel(time=-1)
    is_liquid = data["stocks"].sel(field="is_liquid").isel(time=-1)
    weights = xr.where(sma20 &lt; sma20_stocks, 1, -1)
    weights = weights * is_liquid 
    weights = weights / 100.0
    return weights

qnbt.backtest(
    competition_type= "stocks_nasdaq100",
    load_data= load_data,
    lookback_period= 90,
    start_date= "2006-01-01",
    strategy= strategy,
    window= window
)
</code></pre>
<p dir="auto"><img src="/community/assets/uploads/files/1712281708607-2f2a9656-20d0-46e7-9a67-e3bd0d46a75f-image.png" alt="2f2a9656-20d0-46e7-9a67-e3bd0d46a75f-image.png" class="img-responsive img-markdown" /></p>
]]></description><link>http://quantiacs.com/community/topic/556/is-it-possible-to-combine-stocks-with-crypto</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Jul 2026 18:16:14 GMT</lastBuildDate><atom:link href="http://quantiacs.com/community/topic/556.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 05 Apr 2024 01:48:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Is it possible to combine stocks with crypto? on Fri, 05 Apr 2024 08:36:00 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="http://quantiacs.com/community/uid/5">@vyacheslav_b</a> Thank you very much for your support.</p>
<p dir="auto">I would like to ask, if I want to filter out the crypto codes with the highest sharpness, what should I do? Thank you. I tried using the get_best_instruments function but it didn't work</p>
<pre><code>import qnt.stats as qnstats

# data = qndata.stocks.load_ndx_data(tail = 17*365, dims = ("time", "field", "asset"))
data = qndata.stocks.load_ndx_data(min_date="2005-01-01")
def get_best_instruments(data, weights, top_size):
    # compute statistics:
    stats_per_asset = qnstats.calc_stat(data, weights, per_asset=True)
    # calculate ranks of assets by "sharpe_ratio":
    ranks = (-stats_per_asset.sel(field="sharpe_ratio")).rank("asset")
    # select top assets by rank "top_period" days ago:
    top_period = 1
    rank = ranks.isel(time=-top_period)
    top = rank.where(rank &lt;= top_size).dropna("asset").asset

    # select top stats:
    top_stats = stats_per_asset.sel(asset=top.values)

    # print results:
    print("SR tail of the top assets:")
    display(top_stats.sel(field="sharpe_ratio").to_pandas().tail())

    print("avg SR = ", top_stats[-top_period:].sel(field="sharpe_ratio").mean("asset")[-1].item())
    display(top_stats)
    return top_stats.coords["asset"].values

get_best_instruments(data, weights, 10)
</code></pre>
<p dir="auto"><img src="/community/assets/uploads/files/1712306157235-19ae499c-71f3-4702-bba3-81d20fb6c5ac-image.png" alt="19ae499c-71f3-4702-bba3-81d20fb6c5ac-image.png" class="img-responsive img-markdown" /></p>
]]></description><link>http://quantiacs.com/community/post/1546</link><guid isPermaLink="true">http://quantiacs.com/community/post/1546</guid><dc:creator><![CDATA[newbiequant96]]></dc:creator><pubDate>Fri, 05 Apr 2024 08:36:00 GMT</pubDate></item><item><title><![CDATA[Reply to Is it possible to combine stocks with crypto? on Fri, 05 Apr 2024 06:00:05 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="http://quantiacs.com/community/uid/3389">@newbiequant96</a> said in <a href="/community/post/1543">Is it possible to combine stocks with crypto?</a>:</p>
<blockquote>
<h1>Import basic libraries.</h1>
<p dir="auto">import xarray as xr<br />
import pandas as pd<br />
import numpy as np</p>
<h1>Import Quantiacs libraries.</h1>
<p dir="auto">import qnt.data    as qndata  # load and manipulate data<br />
import qnt.output as qnout   # manage output<br />
import qnt.backtester as qnbt # backtester<br />
import qnt.stats   as qnstats # statistical functions for analysis<br />
import qnt.graph   as qngraph # graphical tools<br />
import qnt.ta      as qnta    # indicators library<br />
import qnt.xr_talib as xr_talib   # indicators library</p>
<p dir="auto">def load_data(period):<br />
futures = qndata.futures.load_data(tail=period).isel(asset=0)<br />
stocks  = qndata.stocks.load_ndx_data(tail=period)<br />
crypto= qndata.crypto.load_data(tail=period)<br />
return {"futures": futures, "stocks": stocks, "crypto": crypto}, futures.time.values</p>
<p dir="auto">def window(data, max_date: np.datetime64, lookback_period: int):<br />
min_date = max_date - np.timedelta64(lookback_period, "D")<br />
return {<br />
"futures": data["futures"].sel(time=slice(min_date, max_date)),<br />
"stocks":  data["stocks"].sel(time=slice(min_date, max_date)),<br />
"crypto":  data["crypto"].sel(time=slice(min_date, max_date)),<br />
}</p>
<p dir="auto">def strategy(data):<br />
close_futures = data["crypto"].sel(field="close")<br />
close_stocks  = data["stocks"].sel(field="close")<br />
sma20 = qnta.sma(close_futures, 20).isel(time=-1)<br />
sma20_stocks = qnta.sma(close_stocks, 20).isel(time=-1)<br />
is_liquid = data["stocks"].sel(field="is_liquid").isel(time=-1)<br />
weights = xr.where(sma20 &lt; sma20_stocks, 1, -1)<br />
weights = weights * is_liquid<br />
weights = weights / 100.0<br />
return weights</p>
<p dir="auto">qnbt.backtest(<br />
competition_type= "stocks_nasdaq100",<br />
load_data= load_data,<br />
lookback_period= 90,<br />
start_date= "2006-01-01",<br />
strategy= strategy,<br />
window= window<br />
)</p>
</blockquote>
<p dir="auto">Hello. I don't have a good solution because cryptocurrency data is not available in 2006.</p>
<p dir="auto">I changed the cryptocurrency loading to daily data, as your example used hourly data. I aligned the data by dates similar to this example: Example - Predicting NASDAQ 100 Stocks Using the SPX Index <a href="https://github.com/quantiacs/strategy-predict-NASDAQ100-use-SPX/blob/master/strategy.ipynb" rel="nofollow ugc">https://github.com/quantiacs/strategy-predict-NASDAQ100-use-SPX/blob/master/strategy.ipynb</a></p>
<p dir="auto">This code should work correctly.</p>
<pre><code class="language-python"># Import basic libraries.
import xarray as xr
import pandas as pd
import numpy as np
# Import Quantiacs libraries.
import qnt.data as qndata  # load and manipulate data
import qnt.output as qnout  # manage output
import qnt.backtester as qnbt  # backtester
import qnt.stats as qnstats  # statistical functions for analysis
import qnt.graph as qngraph  # graphical tools
import qnt.ta as qnta  # indicators library
import qnt.xr_talib as xr_talib  # indicators library


def load_data(period):
    futures = qndata.futures.load_data(tail=period, assets=["F_DX"]).isel(asset=0)
    stocks = qndata.stocks.load_ndx_data(tail=period)

    futures = xr.align(futures, stocks.isel(field=0), join='right')[0]

    try:
        crypto = qndata.cryptodaily.load_data(tail=period, assets=["BTC"]).isel(asset=0)
        crypto = xr.align(crypto, stocks.isel(field=0), join='right')[0]
    except Exception as e:
        print(f"Failed to load crypto data: {e}")
        crypto = futures  # Fallback to futures data if crypto data loading fails

    return {"futures": futures, "stocks": stocks, "crypto": crypto}, stocks.time.values


def window(data, max_date: np.datetime64, lookback_period: int):
    min_date = max_date - np.timedelta64(lookback_period, "D")
    return {
        "futures": data["futures"].sel(time=slice(min_date, max_date)),
        "stocks": data["stocks"].sel(time=slice(min_date, max_date)),
        "crypto": data["crypto"].sel(time=slice(min_date, max_date)),
    }


def strategy(data):
    # close_futures = data["futures"].sel(field="close")
    close_crypto = data["crypto"].sel(field="close")
    close_stocks = data["stocks"].sel(field="close")

    sma20 = qnta.sma(close_crypto, 20)
    sma20_stocks = qnta.sma(close_stocks, 20)
    is_liquid = data["stocks"].sel(field="is_liquid")
    weights = xr.where(sma20 &lt; sma20_stocks, 1, -1)
    weights = weights * is_liquid
    weights = weights / 100.0
    return weights


qnbt.backtest(
    competition_type="stocks_nasdaq100",
    load_data=load_data,
    lookback_period=90,
    start_date="2006-01-01",
    strategy=strategy,
    window=window
)

</code></pre>
]]></description><link>http://quantiacs.com/community/post/1544</link><guid isPermaLink="true">http://quantiacs.com/community/post/1544</guid><dc:creator><![CDATA[Vyacheslav_B]]></dc:creator><pubDate>Fri, 05 Apr 2024 06:00:05 GMT</pubDate></item></channel></rss>