Buckets:

download
raw
54.5 kB
import{s as wU,n as CU,o as pU}from"../chunks/scheduler.2b22cead.js";import{S as IU,i as rU,e as w,s as T,c as s,h as oU,a as C,d as J,b as e,f as qt,g as n,j as p,k as yU,l as g,m as U,n as M,t as a,o as i,p as y}from"../chunks/index.1a0e8013.js";import{C as cU,H as I,E as gU}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.7c22bb59.js";import{C as r}from"../chunks/CodeBlock.a4b5d9e8.js";function jU(FJ){let o,Pt,Xt,Kt,j,tl,m,ll,u,VJ='A wrapper around <a href="https://github.com/AI4Finance-Foundation/FinRL" rel="nofollow">FinRL</a> stock trading environments that conforms to the OpenEnv specification.',Jl,k,Ul,d,vJ="This environment enables reinforcement learning for stock trading tasks using FinRL’s powerful StockTradingEnv, exposed through OpenEnv’s simple HTTP API. It supports:",Tl,f,RJ="<li><strong>Stock Trading</strong>: Buy/sell actions across multiple stocks</li> <li><strong>Portfolio Management</strong>: Track balance, holdings, and portfolio value</li> <li><strong>Technical Indicators</strong>: MACD, RSI, CCI, DX, and more</li> <li><strong>Flexible Configuration</strong>: Custom data sources and trading parameters</li>",el,h,sl,$,nl,b,BJ="First, build the base image (from OpenEnv root):",Ml,A,al,N,QJ="Then build the FinRL environment image:",il,F,yl,V,wl,v,Cl,R,pl,B,ZJ="This starts the server with synthetic sample data for testing.",Il,Q,rl,Z,EJ="Create a configuration file <code>config.json</code>:",ol,E,cl,x,xJ="Run with configuration:",gl,G,jl,_,ml,S,ul,W,kl,Y,dl,L,fl,O,hl,D,GJ="Trading action for the environment.",$l,z,_J="<strong>Attributes:</strong>",bl,X,SJ=`<li><code>actions: list[float]</code> - Array of normalized action values (-1 to 1) for each stock
<ul><li>Positive values: Buy</li> <li>Negative values: Sell</li> <li>Magnitude: Relative trade size</li></ul></li>`,Al,H,WJ="<strong>Example:</strong>",Nl,q,Fl,P,Vl,K,YJ="Observation returned by the environment.",vl,tt,LJ="<strong>Attributes:</strong>",Rl,lt,OJ=`<li><code>state: list[float]</code> - Flattened state vector
<ul><li>Structure: <code>[balance, prices..., holdings..., indicators...]</code></li></ul></li> <li><code>portfolio_value: float</code> - Total portfolio value (cash + holdings)</li> <li><code>date: str</code> - Current trading date</li> <li><code>done: bool</code> - Whether episode has ended</li> <li><code>reward: float</code> - Reward for the last action</li> <li><code>metadata: dict</code> - Additional information</li>`,Bl,Jt,DJ="<strong>Example:</strong>",Ql,Ut,Zl,Tt,El,et,xl,st,zJ="Reset the environment to start a new episode.",Gl,nt,_l,Mt,Sl,at,XJ="Execute a trading action.",Wl,it,Yl,yt,Ll,wt,HJ="Get episode metadata (episode_id, step_count).",Ol,Ct,Dl,pt,zl,It,qJ="Get environment configuration.",Xl,rt,Hl,ot,ql,ct,PJ="The environment expects stock data in the following CSV format:",Pl,gt,KJ="<thead><tr><th>date</th> <th>tic</th> <th>close</th> <th>high</th> <th>low</th> <th>open</th> <th>volume</th> <th>macd</th> <th>rsi_30</th> <th>cci_30</th> <th>dx_30</th></tr></thead> <tbody><tr><td>2020-01-01</td> <td>AAPL</td> <td>100.0</td> <td>102.0</td> <td>98.0</td> <td>99.0</td> <td>1000000</td> <td>0.5</td> <td>55.0</td> <td>10.0</td> <td>15.0</td></tr> <tr><td>2020-01-01</td> <td>GOOGL</td> <td>1500.0</td> <td>1520.0</td> <td>1480.0</td> <td>1490.0</td> <td>500000</td> <td>-0.3</td> <td>48.0</td> <td>-5.0</td> <td>20.0</td></tr></tbody>",Kl,jt,tU="<strong>Required columns:</strong>",tJ,mt,lU="<li><code>date</code>: Trading date</li> <li><code>tic</code>: Stock ticker symbol</li> <li><code>close</code>, <code>high</code>, <code>low</code>, <code>open</code>: Price data</li> <li><code>volume</code>: Trading volume</li> <li>Technical indicators (as specified in <code>tech_indicator_list</code>)</li>",lJ,ut,JJ,kt,JU="<thead><tr><th>Parameter</th> <th>Type</th> <th>Description</th></tr></thead> <tbody><tr><td><code>data_path</code></td> <td>str</td> <td>Path to CSV file with stock data</td></tr> <tr><td><code>stock_dim</code></td> <td>int</td> <td>Number of stocks to trade</td></tr> <tr><td><code>hmax</code></td> <td>int</td> <td>Maximum shares per trade</td></tr> <tr><td><code>initial_amount</code></td> <td>int</td> <td>Starting cash balance</td></tr> <tr><td><code>num_stock_shares</code></td> <td>list[int]</td> <td>Initial holdings for each stock</td></tr> <tr><td><code>buy_cost_pct</code></td> <td>list[float]</td> <td>Transaction cost for buying (per stock)</td></tr> <tr><td><code>sell_cost_pct</code></td> <td>list[float]</td> <td>Transaction cost for selling (per stock)</td></tr> <tr><td><code>reward_scaling</code></td> <td>float</td> <td>Scaling factor for rewards</td></tr> <tr><td><code>state_space</code></td> <td>int</td> <td>Dimension of state vector</td></tr> <tr><td><code>action_space</code></td> <td>int</td> <td>Dimension of action space</td></tr> <tr><td><code>tech_indicator_list</code></td> <td>list[str]</td> <td>Technical indicators to include</td></tr></tbody>",UJ,dt,TJ,ft,eJ,ht,sJ,$t,nJ,bt,MJ,c,At,Dt,UU="Check if base image exists:",bJ,Nt,AJ,Ft,zt,TU="Build base image if missing:",NJ,Vt,aJ,vt,iJ,Rt,eU="Make sure you’re in the <code>src</code> directory:",yJ,Bt,wJ,Qt,CJ,Zt,sU="Verify your data file has all required columns:",pJ,Et,IJ,xt,rJ,Gt,nU="See the <code>examples/</code> directory for complete examples:",oJ,_t,MU="<li><code>examples/finrl_simple.py</code> - Basic usage</li> <li><code>examples/finrl_training.py</code> - Full training loop with PPO</li> <li><code>examples/finrl_backtesting.py</code> - Backtesting a trained agent</li>",cJ,St,gJ,Wt,aU="BSD 3-Clause License (see LICENSE file in repository root)",jJ,Yt,mJ,Lt,iU='<li><a href="https://arxiv.org/abs/2011.09607" rel="nofollow">FinRL Paper</a></li> <li><a href="https://github.com/AI4Finance-Foundation/FinRL" rel="nofollow">FinRL GitHub</a></li> <li><a href="README">OpenEnv Documentation</a></li>',uJ,Ot,kJ,Ht,dJ;return j=new cU({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),m=new I({props:{title:"FinRL Environment",local:"finrl-environment",headingTag:"h1"}}),k=new I({props:{title:"Overview",local:"overview",headingTag:"h2"}}),h=new I({props:{title:"Quick Start",local:"quick-start",headingTag:"h2"}}),$=new I({props:{title:"1. Build the Docker Image",local:"1-build-the-docker-image",headingTag:"h3"}}),A=new r({props:{code:"Y2QlMjBPcGVuRW52JTBBZG9ja2VyJTIwYnVpbGQlMjAtdCUyMGVudnRvcmNoLWJhc2UlM0FsYXRlc3QlMjAtZiUyMHNyYyUyRm9wZW5lbnYlMkZjb3JlJTJGY29udGFpbmVycyUyRmltYWdlcyUyRkRvY2tlcmZpbGUlMjAu",highlighted:`<span class="hljs-built_in">cd</span> OpenEnv
docker build -t envtorch-base:latest -f src/openenv/core/containers/images/Dockerfile .`,lang:"bash",wrap:!1}}),F=new r({props:{code:"ZG9ja2VyJTIwYnVpbGQlMjAtdCUyMGZpbnJsLWVudiUzQWxhdGVzdCUyMC1mJTIwZW52cyUyRmZpbnJsX2VudiUyRnNlcnZlciUyRkRvY2tlcmZpbGUlMjAu",highlighted:"docker build -t finrl-env:latest -f envs/finrl_env/server/Dockerfile .",lang:"bash",wrap:!1}}),V=new I({props:{title:"2. Run the Server",local:"2-run-the-server",headingTag:"h3"}}),v=new I({props:{title:"Option A: With Default Sample Data",local:"option-a-with-default-sample-data",headingTag:"h4"}}),R=new r({props:{code:"ZG9ja2VyJTIwcnVuJTIwLXAlMjA4MDAwJTNBODAwMCUyMGZpbnJsLWVudiUzQWxhdGVzdA==",highlighted:"docker run -p 8000:8000 finrl-env:latest",lang:"bash",wrap:!1}}),Q=new I({props:{title:"Option B: With Custom Configuration",local:"option-b-with-custom-configuration",headingTag:"h4"}}),E=new r({props:{code:"JTdCJTBBJTIwJTIwJTIyZGF0YV9wYXRoJTIyJTNBJTIwJTIyJTJGZGF0YSUyRnN0b2NrX2RhdGEuY3N2JTIyJTJDJTBBJTIwJTIwJTIyc3RvY2tfZGltJTIyJTNBJTIwMyUyQyUwQSUyMCUyMCUyMmhtYXglMjIlM0ElMjAxMDAlMkMlMEElMjAlMjAlMjJpbml0aWFsX2Ftb3VudCUyMiUzQSUyMDEwMDAwMCUyQyUwQSUyMCUyMCUyMm51bV9zdG9ja19zaGFyZXMlMjIlM0ElMjAlNUIwJTJDJTIwMCUyQyUyMDAlNUQlMkMlMEElMjAlMjAlMjJidXlfY29zdF9wY3QlMjIlM0ElMjAlNUIwLjAwMSUyQyUyMDAuMDAxJTJDJTIwMC4wMDElNUQlMkMlMEElMjAlMjAlMjJzZWxsX2Nvc3RfcGN0JTIyJTNBJTIwJTVCMC4wMDElMkMlMjAwLjAwMSUyQyUyMDAuMDAxJTVEJTJDJTBBJTIwJTIwJTIycmV3YXJkX3NjYWxpbmclMjIlM0ElMjAwLjAwMDElMkMlMEElMjAlMjAlMjJzdGF0ZV9zcGFjZSUyMiUzQSUyMDI1JTJDJTBBJTIwJTIwJTIyYWN0aW9uX3NwYWNlJTIyJTNBJTIwMyUyQyUwQSUyMCUyMCUyMnRlY2hfaW5kaWNhdG9yX2xpc3QlMjIlM0ElMjAlNUIlMjJtYWNkJTIyJTJDJTIwJTIycnNpXzMwJTIyJTJDJTIwJTIyY2NpXzMwJTIyJTJDJTIwJTIyZHhfMzAlMjIlNUQlMEElN0Q=",highlighted:`<span class="hljs-punctuation">{</span>
<span class="hljs-attr">&quot;data_path&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;/data/stock_data.csv&quot;</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">&quot;stock_dim&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-number">3</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">&quot;hmax&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-number">100</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">&quot;initial_amount&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-number">100000</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">&quot;num_stock_shares&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><span class="hljs-number">0</span><span class="hljs-punctuation">,</span> <span class="hljs-number">0</span><span class="hljs-punctuation">,</span> <span class="hljs-number">0</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">&quot;buy_cost_pct&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><span class="hljs-number">0.001</span><span class="hljs-punctuation">,</span> <span class="hljs-number">0.001</span><span class="hljs-punctuation">,</span> <span class="hljs-number">0.001</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">&quot;sell_cost_pct&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><span class="hljs-number">0.001</span><span class="hljs-punctuation">,</span> <span class="hljs-number">0.001</span><span class="hljs-punctuation">,</span> <span class="hljs-number">0.001</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">&quot;reward_scaling&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-number">0.0001</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">&quot;state_space&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-number">25</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">&quot;action_space&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-number">3</span><span class="hljs-punctuation">,</span>
<span class="hljs-attr">&quot;tech_indicator_list&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><span class="hljs-string">&quot;macd&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-string">&quot;rsi_30&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-string">&quot;cci_30&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-string">&quot;dx_30&quot;</span><span class="hljs-punctuation">]</span>
<span class="hljs-punctuation">}</span>`,lang:"json",wrap:!1}}),G=new r({props:{code:"ZG9ja2VyJTIwcnVuJTIwLXAlMjA4MDAwJTNBODAwMCUyMCU1QyUwQSUyMCUyMC12JTIwJTI0KHB3ZCklMkZjb25maWcuanNvbiUzQSUyRmNvbmZpZyUyRmNvbmZpZy5qc29uJTIwJTVDJTBBJTIwJTIwLXYlMjAlMjQocHdkKSUyRmRhdGElM0ElMkZkYXRhJTIwJTVDJTBBJTIwJTIwLWUlMjBGSU5STF9DT05GSUdfUEFUSCUzRCUyRmNvbmZpZyUyRmNvbmZpZy5qc29uJTIwJTVDJTBBJTIwJTIwZmlucmwtZW52JTNBbGF0ZXN0",highlighted:`docker run -p 8000:8000 \\
-v $(<span class="hljs-built_in">pwd</span>)/config.json:/config/config.json \\
-v $(<span class="hljs-built_in">pwd</span>)/data:/data \\
-e FINRL_CONFIG_PATH=/config/config.json \\
finrl-env:latest`,lang:"bash",wrap:!1}}),_=new I({props:{title:"3. Use the Client",local:"3-use-the-client",headingTag:"h3"}}),S=new r({props:{code:"ZnJvbSUyMGVudnMuZmlucmxfZW52JTIwaW1wb3J0JTIwRmluUkxFbnYlMkMlMjBGaW5STEFjdGlvbiUwQWltcG9ydCUyMG51bXB5JTIwYXMlMjBucCUwQSUwQSUyMyUyMENvbm5lY3QlMjB0byUyMHNlcnZlciUwQWNsaWVudCUyMCUzRCUyMEZpblJMRW52KGJhc2VfdXJsJTNEJTIyaHR0cCUzQSUyRiUyRmxvY2FsaG9zdCUzQTgwMDAlMjIpJTBBJTBBJTIzJTIwR2V0JTIwY29uZmlndXJhdGlvbiUwQWNvbmZpZyUyMCUzRCUyMGNsaWVudC5nZXRfY29uZmlnKCklMEFwcmludChmJTIyVHJhZGluZyUyMCU3QmNvbmZpZyU1QidzdG9ja19kaW0nJTVEJTdEJTIwc3RvY2tzJTIyKSUwQXByaW50KGYlMjJJbml0aWFsJTIwY2FwaXRhbCUzQSUyMCUyNCU3QmNvbmZpZyU1Qidpbml0aWFsX2Ftb3VudCclNUQlM0ElMkMuMGYlN0QlMjIpJTBBJTBBJTIzJTIwUmVzZXQlMjBlbnZpcm9ubWVudCUwQXJlc3VsdCUyMCUzRCUyMGNsaWVudC5yZXNldCgpJTBBcHJpbnQoZiUyMkluaXRpYWwlMjBwb3J0Zm9saW8lMjB2YWx1ZSUzQSUyMCUyNCU3QnJlc3VsdC5vYnNlcnZhdGlvbi5wb3J0Zm9saW9fdmFsdWUlM0ElMkMuMmYlN0QlMjIpJTBBJTBBJTIzJTIwVHJhZGluZyUyMGxvb3AlMEFmb3IlMjBzdGVwJTIwaW4lMjByYW5nZSgxMDApJTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwR2V0JTIwY3VycmVudCUyMHN0YXRlJTBBJTIwJTIwJTIwJTIwc3RhdGUlMjAlM0QlMjByZXN1bHQub2JzZXJ2YXRpb24uc3RhdGUlMEElMEElMjAlMjAlMjAlMjAlMjMlMjBZb3VyJTIwUkwlMjBwb2xpY3klMjBoZXJlJTIwKGV4YW1wbGUlM0ElMjByYW5kb20lMjBhY3Rpb25zKSUwQSUyMCUyMCUyMCUyMG51bV9zdG9ja3MlMjAlM0QlMjBjb25maWclNUInc3RvY2tfZGltJyU1RCUwQSUyMCUyMCUyMCUyMGFjdGlvbnMlMjAlM0QlMjBucC5yYW5kb20udW5pZm9ybSgtMSUyQyUyMDElMkMlMjBzaXplJTNEbnVtX3N0b2NrcykudG9saXN0KCklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBFeGVjdXRlJTIwYWN0aW9uJTBBJTIwJTIwJTIwJTIwcmVzdWx0JTIwJTNEJTIwY2xpZW50LnN0ZXAoRmluUkxBY3Rpb24oYWN0aW9ucyUzRGFjdGlvbnMpKSUwQSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjJTdGVwJTIwJTdCc3RlcCU3RCUzQSUyMFBvcnRmb2xpbyUzRCUyNCU3QnJlc3VsdC5vYnNlcnZhdGlvbi5wb3J0Zm9saW9fdmFsdWUlM0ElMkMuMmYlN0QlMkMlMjAlMjIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmJTIyUmV3YXJkJTNEJTdCcmVzdWx0LnJld2FyZCUzQS4yZiU3RCUyMiklMEElMEElMjAlMjAlMjAlMjBpZiUyMHJlc3VsdC5kb25lJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQoJTIyRXBpc29kZSUyMGZpbmlzaGVkISUyMiklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBicmVhayUwQSUwQWNsaWVudC5jbG9zZSgp",highlighted:`<span class="hljs-keyword">from</span> envs.finrl_env <span class="hljs-keyword">import</span> FinRLEnv, FinRLAction
<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np
<span class="hljs-comment"># Connect to server</span>
client = FinRLEnv(base_url=<span class="hljs-string">&quot;http://localhost:8000&quot;</span>)
<span class="hljs-comment"># Get configuration</span>
config = client.get_config()
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Trading <span class="hljs-subst">{config[<span class="hljs-string">&#x27;stock_dim&#x27;</span>]}</span> stocks&quot;</span>)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Initial capital: $<span class="hljs-subst">{config[<span class="hljs-string">&#x27;initial_amount&#x27;</span>]:,<span class="hljs-number">.0</span>f}</span>&quot;</span>)
<span class="hljs-comment"># Reset environment</span>
result = client.reset()
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Initial portfolio value: $<span class="hljs-subst">{result.observation.portfolio_value:,<span class="hljs-number">.2</span>f}</span>&quot;</span>)
<span class="hljs-comment"># Trading loop</span>
<span class="hljs-keyword">for</span> step <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">100</span>):
<span class="hljs-comment"># Get current state</span>
state = result.observation.state
<span class="hljs-comment"># Your RL policy here (example: random actions)</span>
num_stocks = config[<span class="hljs-string">&#x27;stock_dim&#x27;</span>]
actions = np.random.uniform(-<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, size=num_stocks).tolist()
<span class="hljs-comment"># Execute action</span>
result = client.step(FinRLAction(actions=actions))
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Step <span class="hljs-subst">{step}</span>: Portfolio=$<span class="hljs-subst">{result.observation.portfolio_value:,<span class="hljs-number">.2</span>f}</span>, &quot;</span>
<span class="hljs-string">f&quot;Reward=<span class="hljs-subst">{result.reward:<span class="hljs-number">.2</span>f}</span>&quot;</span>)
<span class="hljs-keyword">if</span> result.done:
<span class="hljs-built_in">print</span>(<span class="hljs-string">&quot;Episode finished!&quot;</span>)
<span class="hljs-keyword">break</span>
client.close()`,lang:"python",wrap:!1}}),W=new I({props:{title:"Architecture",local:"architecture",headingTag:"h2"}}),Y=new r({props:{code:"JUUyJTk0JThDJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTkwJTBBJUUyJTk0JTgyJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwUkwlMjBUcmFpbmluZyUyMEZyYW1ld29yayUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUwQSVFMiU5NCU4MiUyMCUyMCVFMiU5NCU4QyVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU5MCUyMCUyMCVFMiU5NCU4QyVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU5MCUyMCUyMCVFMiU5NCU4QyVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU5MCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUwQSVFMiU5NCU4MiUyMCUyMCVFMiU5NCU4MiUyMFBvbGljeSUyME5ldCUyMCUyMCUyMCVFMiU5NCU4MiUyMCUyMCVFMiU5NCU4MiUyMFZhbHVlJTIwTmV0JTIwJTIwJTIwJTIwJUUyJTk0JTgyJTIwJTIwJUUyJTk0JTgyJTIwUmVwbGF5JTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTBBJUUyJTk0JTgyJTIwJTIwJUUyJTk0JTgyJTIwKFB5VG9yY2gpJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTIwJTIwJUUyJTk0JTgyJTIwKFB5VG9yY2gpJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTIwJTIwJUUyJTk0JTgyJTIwQnVmZmVyJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTBBJUUyJTk0JTgyJTIwJTIwJUUyJTk0JTk0JUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JUFDJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTk4JTIwJTIwJUUyJTk0JTk0JUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JUFDJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTk4JTIwJTIwJUUyJTk0JTk0JUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JUFDJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTk4JTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTBBJUUyJTk0JTgyJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTk0JUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JUI0JUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTk4JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTBBJUUyJTk0JTgyJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTBBJUUyJTk0JTgyJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JThDJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk2JUJDJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTkwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTBBJUUyJTk0JTgyJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTIwRmluUkxFbnYlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlRTIlOTQlODIlMjAlRTIlODYlOTAlMjBIVFRQJTIwQ2xpZW50JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTBBJUUyJTk0JTgyJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTIwKEhUVFBFbnZDbGllbnQpJTIwJUUyJTk0JTgyJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTBBJUUyJTk0JTgyJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTk0JUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JUFDJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTk4JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTBBJUUyJTk0JTk0JUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JUJDJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTk4JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTIwSFRUUCUyMChKU09OKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4QyVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NiVCQyVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU5MCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUyMERvY2tlciUyMENvbnRhaW5lciVFMiU5NCU4MiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUyMCUyMFBvcnQlM0ElMjA4MDAwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTIwJUUyJTk0JThDJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTgwJUUyJTk0JTkwJTIwJUUyJTk0JTgyJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTIwJUUyJTk0JTgyRmFzdEFQSSUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUyMCVFMiU5NCU4MiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUyMCVFMiU5NCU4MlNlcnZlciUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUyMCVFMiU5NCU4MiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUyMCVFMiU5NCU5NCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCVBQyVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU5OCUyMCVFMiU5NCU4MiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUyMCVFMiU5NCU4QyVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NiVCQyVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU5MCUyMCVFMiU5NCU4MiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUyMCVFMiU5NCU4MiUyMEZpblJMJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTIwJUUyJTk0JTgyJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJUUyJTk0JTgyJTIwJUUyJTk0JTgyJTIwRW52aXJvbm1lbnQlMjAlRTIlOTQlODIlMjAlRTIlOTQlODIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlRTIlOTQlODIlMjAlRTIlOTQlOTQlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlQUMlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlOTglMjAlRTIlOTQlODIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlRTIlOTQlODIlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlRTIlOTQlODIlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlRTIlOTQlODIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlRTIlOTQlODIlMjAlRTIlOTQlOEMlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTYlQkMlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlODAlRTIlOTQlOTAlMjAlRTIlOTQlODIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlRTIlOTQlODIlMjAlRTIlOTQlODIlMjBGaW5STCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUyMCVFMiU5NCU4MiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUyMCVFMiU5NCU4MiUyMFN0b2NrVHJhZGluZyVFMiU5NCU4MiUyMCVFMiU5NCU4MiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUyMCVFMiU5NCU4MiUyMEVudiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUyMCVFMiU5NCU4MiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU4MiUyMCVFMiU5NCU5NCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU5OCUyMCVFMiU5NCU4MiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCVFMiU5NCU5NCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU4MCVFMiU5NCU5OA==",highlighted:`┌─────────────────────────────────────────────────────────────┐
│ RL Training Framework │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Policy Net │ │ Value Net │ │ Replay │ │
│ │ (PyTorch) │ │ (PyTorch) │ │ Buffer │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
│ └──────────────────┴──────────────────┘ │
│ │ │
│ ┌────────▼────────┐ │
│ │ FinRLEnv │ ← HTTP Client │
│ │ (HTTPEnvClient) │ │
│ └────────┬────────┘ │
└────────────────────────────┼─────────────────────────────────┘
│ HTTP (JSON)
┌────────▼────────┐
│ Docker Container│
│ Port: <span class="hljs-number">8000</span> │
│ │
│ ┌─────────────┐ │
│ │FastAPI │ │
│ │Server │ │
│ └──────┬──────┘ │
│ │ │
│ ┌──────▼──────┐ │
│ │ FinRL │ │
│ │ Environment │ │
│ └──────┬──────┘ │
│ │ │
│ ┌──────▼──────┐ │
│ │ FinRL │ │
│ │ StockTrading│ │
│ │ Env │ │
│ └─────────────┘ │
└─────────────────┘`,lang:"",wrap:!1}}),L=new I({props:{title:"API Reference",local:"api-reference",headingTag:"h2"}}),O=new I({props:{title:"FinRLAction",local:"finrlaction",headingTag:"h3"}}),q=new r({props:{code:"JTIzJTIwQnV5JTIwc3RvY2slMjAwJTJDJTIwc2VsbCUyMHN0b2NrJTIwMSUyQyUyMGhvbGQlMjBzdG9jayUyMDIlMEFhY3Rpb24lMjAlM0QlMjBGaW5STEFjdGlvbihhY3Rpb25zJTNEJTVCMC41JTJDJTIwLTAuMyUyQyUyMDAuMCU1RCk=",highlighted:`<span class="hljs-comment"># Buy stock 0, sell stock 1, hold stock 2</span>
action = FinRLAction(actions=[<span class="hljs-number">0.5</span>, -<span class="hljs-number">0.3</span>, <span class="hljs-number">0.0</span>])`,lang:"python",wrap:!1}}),P=new I({props:{title:"FinRLObservation",local:"finrlobservation",headingTag:"h3"}}),Ut=new r({props:{code:"b2JzJTIwJTNEJTIwcmVzdWx0Lm9ic2VydmF0aW9uJTBBcHJpbnQoZiUyMlBvcnRmb2xpbyUzQSUyMCUyNCU3Qm9icy5wb3J0Zm9saW9fdmFsdWUlM0ElMkMuMmYlN0QlMjIpJTBBcHJpbnQoZiUyMkRhdGUlM0ElMjAlN0JvYnMuZGF0ZSU3RCUyMiklMEFwcmludChmJTIyU3RhdGUlMjBkaW1lbnNpb24lM0ElMjAlN0JsZW4ob2JzLnN0YXRlKSU3RCUyMik=",highlighted:`obs = result.observation
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Portfolio: $<span class="hljs-subst">{obs.portfolio_value:,<span class="hljs-number">.2</span>f}</span>&quot;</span>)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Date: <span class="hljs-subst">{obs.date}</span>&quot;</span>)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;State dimension: <span class="hljs-subst">{<span class="hljs-built_in">len</span>(obs.state)}</span>&quot;</span>)`,lang:"python",wrap:!1}}),Tt=new I({props:{title:"Client Methods",local:"client-methods",headingTag:"h3"}}),et=new I({props:{title:"reset() -> StepResult[FinRLObservation]",local:"reset--gt-stepresultfinrlobservation",headingTag:"h4"}}),nt=new r({props:{code:"cmVzdWx0JTIwJTNEJTIwY2xpZW50LnJlc2V0KCk=",highlighted:"result = client.reset()",lang:"python",wrap:!1}}),Mt=new I({props:{title:"step(action: FinRLAction) -> StepResult[FinRLObservation]",local:"stepaction-finrlaction--gt-stepresultfinrlobservation",headingTag:"h4"}}),it=new r({props:{code:"YWN0aW9uJTIwJTNEJTIwRmluUkxBY3Rpb24oYWN0aW9ucyUzRCU1QjAuNSUyQyUyMC0wLjMlNUQpJTBBcmVzdWx0JTIwJTNEJTIwY2xpZW50LnN0ZXAoYWN0aW9uKQ==",highlighted:`action = FinRLAction(actions=[<span class="hljs-number">0.5</span>, -<span class="hljs-number">0.3</span>])
result = client.step(action)`,lang:"python",wrap:!1}}),yt=new I({props:{title:"state() -> State",local:"state--gt-state",headingTag:"h4"}}),Ct=new r({props:{code:"c3RhdGUlMjAlM0QlMjBjbGllbnQuc3RhdGUoKSUwQXByaW50KGYlMjJFcGlzb2RlJTNBJTIwJTdCc3RhdGUuZXBpc29kZV9pZCU3RCUyQyUyMFN0ZXAlM0ElMjAlN0JzdGF0ZS5zdGVwX2NvdW50JTdEJTIyKQ==",highlighted:`state = client.state()
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Episode: <span class="hljs-subst">{state.episode_id}</span>, Step: <span class="hljs-subst">{state.step_count}</span>&quot;</span>)`,lang:"python",wrap:!1}}),pt=new I({props:{title:"get_config() -> dict",local:"getconfig--gt-dict",headingTag:"h4"}}),rt=new r({props:{code:"Y29uZmlnJTIwJTNEJTIwY2xpZW50LmdldF9jb25maWcoKSUwQXByaW50KGNvbmZpZyU1QidzdG9ja19kaW0nJTVEKSUwQXByaW50KGNvbmZpZyU1Qidpbml0aWFsX2Ftb3VudCclNUQp",highlighted:`config = client.get_config()
<span class="hljs-built_in">print</span>(config[<span class="hljs-string">&#x27;stock_dim&#x27;</span>])
<span class="hljs-built_in">print</span>(config[<span class="hljs-string">&#x27;initial_amount&#x27;</span>])`,lang:"python",wrap:!1}}),ot=new I({props:{title:"Data Format",local:"data-format",headingTag:"h2"}}),ut=new I({props:{title:"Configuration Parameters",local:"configuration-parameters",headingTag:"h2"}}),dt=new I({props:{title:"Integration with RL Frameworks",local:"integration-with-rl-frameworks",headingTag:"h2"}}),ft=new I({props:{title:"Stable Baselines 3",local:"stable-baselines-3",headingTag:"h3"}}),ht=new r({props:{code:"ZnJvbSUyMHN0YWJsZV9iYXNlbGluZXMzJTIwaW1wb3J0JTIwUFBPJTBBZnJvbSUyMGVudnMuZmlucmxfZW52JTIwaW1wb3J0JTIwRmluUkxFbnYlMkMlMjBGaW5STEFjdGlvbiUwQWltcG9ydCUyMG51bXB5JTIwYXMlMjBucCUwQSUwQSUyMyUyMENyZWF0ZSUyMGN1c3RvbSUyMHdyYXBwZXIlMjBmb3IlMjBTQjMlMEFjbGFzcyUyMFNCM0ZpblJMV3JhcHBlciUzQSUwQSUyMCUyMCUyMCUyMGRlZiUyMF9faW5pdF9fKHNlbGYlMkMlMjBiYXNlX3VybCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzZWxmLmVudiUyMCUzRCUyMEZpblJMRW52KGJhc2VfdXJsJTNEYmFzZV91cmwpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY29uZmlnJTIwJTNEJTIwc2VsZi5lbnYuZ2V0X2NvbmZpZygpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2VsZi5hY3Rpb25fc3BhY2UlMjAlM0QlMjBzcGFjZXMuQm94KCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxvdyUzRC0xJTJDJTIwaGlnaCUzRDElMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzaGFwZSUzRChjb25maWclNUInYWN0aW9uX3NwYWNlJyU1RCUyQyklMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBkdHlwZSUzRG5wLmZsb2F0MzIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjApJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2VsZi5vYnNlcnZhdGlvbl9zcGFjZSUyMCUzRCUyMHNwYWNlcy5Cb3goJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbG93JTNELW5wLmluZiUyQyUyMGhpZ2glM0RucC5pbmYlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzaGFwZSUzRChjb25maWclNUInc3RhdGVfc3BhY2UnJTVEJTJDKSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGR0eXBlJTNEbnAuZmxvYXQzMiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklMEElMEElMjAlMjAlMjAlMjBkZWYlMjByZXNldChzZWxmKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMHNlbGYuZW52LnJlc2V0KCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXR1cm4lMjBucC5hcnJheShyZXN1bHQub2JzZXJ2YXRpb24uc3RhdGUlMkMlMjBkdHlwZSUzRG5wLmZsb2F0MzIpJTBBJTBBJTIwJTIwJTIwJTIwZGVmJTIwc3RlcChzZWxmJTJDJTIwYWN0aW9uKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMHNlbGYuZW52LnN0ZXAoRmluUkxBY3Rpb24oYWN0aW9ucyUzRGFjdGlvbi50b2xpc3QoKSkpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG5wLmFycmF5KHJlc3VsdC5vYnNlcnZhdGlvbi5zdGF0ZSUyQyUyMGR0eXBlJTNEbnAuZmxvYXQzMiklMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXN1bHQucmV3YXJkJTIwb3IlMjAwLjAlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXN1bHQuZG9uZSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJlc3VsdC5vYnNlcnZhdGlvbi5tZXRhZGF0YSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklMEElMEElMjMlMjBUcmFpbiUwQWVudiUyMCUzRCUyMFNCM0ZpblJMV3JhcHBlciglMjJodHRwJTNBJTJGJTJGbG9jYWxob3N0JTNBODAwMCUyMiklMEFtb2RlbCUyMCUzRCUyMFBQTyglMjJNbHBQb2xpY3klMjIlMkMlMjBlbnYlMkMlMjB2ZXJib3NlJTNEMSklMEFtb2RlbC5sZWFybih0b3RhbF90aW1lc3RlcHMlM0QxMDAwMCk=",highlighted:`<span class="hljs-keyword">from</span> stable_baselines3 <span class="hljs-keyword">import</span> PPO
<span class="hljs-keyword">from</span> envs.finrl_env <span class="hljs-keyword">import</span> FinRLEnv, FinRLAction
<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np
<span class="hljs-comment"># Create custom wrapper for SB3</span>
<span class="hljs-keyword">class</span> <span class="hljs-title class_">SB3FinRLWrapper</span>:
<span class="hljs-keyword">def</span> <span class="hljs-title function_">__init__</span>(<span class="hljs-params">self, base_url</span>):
self.env = FinRLEnv(base_url=base_url)
config = self.env.get_config()
self.action_space = spaces.Box(
low=-<span class="hljs-number">1</span>, high=<span class="hljs-number">1</span>,
shape=(config[<span class="hljs-string">&#x27;action_space&#x27;</span>],),
dtype=np.float32
)
self.observation_space = spaces.Box(
low=-np.inf, high=np.inf,
shape=(config[<span class="hljs-string">&#x27;state_space&#x27;</span>],),
dtype=np.float32
)
<span class="hljs-keyword">def</span> <span class="hljs-title function_">reset</span>(<span class="hljs-params">self</span>):
result = self.env.reset()
<span class="hljs-keyword">return</span> np.array(result.observation.state, dtype=np.float32)
<span class="hljs-keyword">def</span> <span class="hljs-title function_">step</span>(<span class="hljs-params">self, action</span>):
result = self.env.step(FinRLAction(actions=action.tolist()))
<span class="hljs-keyword">return</span> (
np.array(result.observation.state, dtype=np.float32),
result.reward <span class="hljs-keyword">or</span> <span class="hljs-number">0.0</span>,
result.done,
result.observation.metadata
)
<span class="hljs-comment"># Train</span>
env = SB3FinRLWrapper(<span class="hljs-string">&quot;http://localhost:8000&quot;</span>)
model = PPO(<span class="hljs-string">&quot;MlpPolicy&quot;</span>, env, verbose=<span class="hljs-number">1</span>)
model.learn(total_timesteps=<span class="hljs-number">10000</span>)`,lang:"python",wrap:!1}}),$t=new I({props:{title:"Troubleshooting",local:"troubleshooting",headingTag:"h2"}}),bt=new I({props:{title:"Server won’t start",local:"server-wont-start",headingTag:"h3"}}),Nt=new r({props:{code:"ZG9ja2VyJTIwaW1hZ2VzJTIwJTdDJTIwZ3JlcCUyMGVudnRvcmNoLWJhc2U=",highlighted:"docker images | grep envtorch-base",lang:"bash",wrap:!1}}),Vt=new r({props:{code:"ZG9ja2VyJTIwYnVpbGQlMjAtdCUyMGVudnRvcmNoLWJhc2UlM0FsYXRlc3QlMjAtZiUyMHNyYyUyRm9wZW5lbnYlMkZjb3JlJTJGY29udGFpbmVycyUyRmltYWdlcyUyRkRvY2tlcmZpbGUlMjAu",highlighted:"docker build -t envtorch-base:latest -f src/openenv/core/containers/images/Dockerfile .",lang:"bash",wrap:!1}}),vt=new I({props:{title:"Import errors",local:"import-errors",headingTag:"h3"}}),Bt=new r({props:{code:"Y2QlMjBPcGVuRW52JTJGc3JjJTBBcHl0aG9uJTIwLWMlMjAlMjJmcm9tJTIwZW52cy5maW5ybF9lbnYlMjBpbXBvcnQlMjBGaW5STEVudiUyMg==",highlighted:`<span class="hljs-built_in">cd</span> OpenEnv/src
python -c <span class="hljs-string">&quot;from envs.finrl_env import FinRLEnv&quot;</span>`,lang:"bash",wrap:!1}}),Qt=new I({props:{title:"Configuration errors",local:"configuration-errors",headingTag:"h3"}}),Et=new r({props:{code:"aW1wb3J0JTIwcGFuZGFzJTIwYXMlMjBwZCUwQWRmJTIwJTNEJTIwcGQucmVhZF9jc3YoJ3lvdXJfZGF0YS5jc3YnKSUwQXByaW50KGRmLmNvbHVtbnMudG9saXN0KCkp",highlighted:`<span class="hljs-keyword">import</span> pandas <span class="hljs-keyword">as</span> pd
df = pd.read_csv(<span class="hljs-string">&#x27;your_data.csv&#x27;</span>)
<span class="hljs-built_in">print</span>(df.columns.tolist())`,lang:"python",wrap:!1}}),xt=new I({props:{title:"Examples",local:"examples",headingTag:"h2"}}),St=new I({props:{title:"License",local:"license",headingTag:"h2"}}),Yt=new I({props:{title:"References",local:"references",headingTag:"h2"}}),Ot=new gU({props:{source:"https://github.com/huggingface/openenv/blob/main/docs/source/environments/finrl.md"}}),{c(){o=w("meta"),Pt=T(),Xt=w("p"),Kt=T(),s(j.$$.fragment),tl=T(),s(m.$$.fragment),ll=T(),u=w("p"),u.innerHTML=VJ,Jl=T(),s(k.$$.fragment),Ul=T(),d=w("p"),d.textContent=vJ,Tl=T(),f=w("ul"),f.innerHTML=RJ,el=T(),s(h.$$.fragment),sl=T(),s($.$$.fragment),nl=T(),b=w("p"),b.textContent=BJ,Ml=T(),s(A.$$.fragment),al=T(),N=w("p"),N.textContent=QJ,il=T(),s(F.$$.fragment),yl=T(),s(V.$$.fragment),wl=T(),s(v.$$.fragment),Cl=T(),s(R.$$.fragment),pl=T(),B=w("p"),B.textContent=ZJ,Il=T(),s(Q.$$.fragment),rl=T(),Z=w("p"),Z.innerHTML=EJ,ol=T(),s(E.$$.fragment),cl=T(),x=w("p"),x.textContent=xJ,gl=T(),s(G.$$.fragment),jl=T(),s(_.$$.fragment),ml=T(),s(S.$$.fragment),ul=T(),s(W.$$.fragment),kl=T(),s(Y.$$.fragment),dl=T(),s(L.$$.fragment),fl=T(),s(O.$$.fragment),hl=T(),D=w("p"),D.textContent=GJ,$l=T(),z=w("p"),z.innerHTML=_J,bl=T(),X=w("ul"),X.innerHTML=SJ,Al=T(),H=w("p"),H.innerHTML=WJ,Nl=T(),s(q.$$.fragment),Fl=T(),s(P.$$.fragment),Vl=T(),K=w("p"),K.textContent=YJ,vl=T(),tt=w("p"),tt.innerHTML=LJ,Rl=T(),lt=w("ul"),lt.innerHTML=OJ,Bl=T(),Jt=w("p"),Jt.innerHTML=DJ,Ql=T(),s(Ut.$$.fragment),Zl=T(),s(Tt.$$.fragment),El=T(),s(et.$$.fragment),xl=T(),st=w("p"),st.textContent=zJ,Gl=T(),s(nt.$$.fragment),_l=T(),s(Mt.$$.fragment),Sl=T(),at=w("p"),at.textContent=XJ,Wl=T(),s(it.$$.fragment),Yl=T(),s(yt.$$.fragment),Ll=T(),wt=w("p"),wt.textContent=HJ,Ol=T(),s(Ct.$$.fragment),Dl=T(),s(pt.$$.fragment),zl=T(),It=w("p"),It.textContent=qJ,Xl=T(),s(rt.$$.fragment),Hl=T(),s(ot.$$.fragment),ql=T(),ct=w("p"),ct.textContent=PJ,Pl=T(),gt=w("table"),gt.innerHTML=KJ,Kl=T(),jt=w("p"),jt.innerHTML=tU,tJ=T(),mt=w("ul"),mt.innerHTML=lU,lJ=T(),s(ut.$$.fragment),JJ=T(),kt=w("table"),kt.innerHTML=JU,UJ=T(),s(dt.$$.fragment),TJ=T(),s(ft.$$.fragment),eJ=T(),s(ht.$$.fragment),sJ=T(),s($t.$$.fragment),nJ=T(),s(bt.$$.fragment),MJ=T(),c=w("ol"),At=w("li"),Dt=w("p"),Dt.textContent=UU,bJ=T(),s(Nt.$$.fragment),AJ=T(),Ft=w("li"),zt=w("p"),zt.textContent=TU,NJ=T(),s(Vt.$$.fragment),aJ=T(),s(vt.$$.fragment),iJ=T(),Rt=w("p"),Rt.innerHTML=eU,yJ=T(),s(Bt.$$.fragment),wJ=T(),s(Qt.$$.fragment),CJ=T(),Zt=w("p"),Zt.textContent=sU,pJ=T(),s(Et.$$.fragment),IJ=T(),s(xt.$$.fragment),rJ=T(),Gt=w("p"),Gt.innerHTML=nU,oJ=T(),_t=w("ul"),_t.innerHTML=MU,cJ=T(),s(St.$$.fragment),gJ=T(),Wt=w("p"),Wt.textContent=aU,jJ=T(),s(Yt.$$.fragment),mJ=T(),Lt=w("ul"),Lt.innerHTML=iU,uJ=T(),s(Ot.$$.fragment),kJ=T(),Ht=w("p"),this.h()},l(t){const l=oU("svelte-u9bgzb",document.head);o=C(l,"META",{name:!0,content:!0}),l.forEach(J),Pt=e(t),Xt=C(t,"P",{}),qt(Xt).forEach(J),Kt=e(t),n(j.$$.fragment,t),tl=e(t),n(m.$$.fragment,t),ll=e(t),u=C(t,"P",{"data-svelte-h":!0}),p(u)!=="svelte-tybsd0"&&(u.innerHTML=VJ),Jl=e(t),n(k.$$.fragment,t),Ul=e(t),d=C(t,"P",{"data-svelte-h":!0}),p(d)!=="svelte-1baaslc"&&(d.textContent=vJ),Tl=e(t),f=C(t,"UL",{"data-svelte-h":!0}),p(f)!=="svelte-wo546c"&&(f.innerHTML=RJ),el=e(t),n(h.$$.fragment,t),sl=e(t),n($.$$.fragment,t),nl=e(t),b=C(t,"P",{"data-svelte-h":!0}),p(b)!=="svelte-1bp5hlt"&&(b.textContent=BJ),Ml=e(t),n(A.$$.fragment,t),al=e(t),N=C(t,"P",{"data-svelte-h":!0}),p(N)!=="svelte-15mgivz"&&(N.textContent=QJ),il=e(t),n(F.$$.fragment,t),yl=e(t),n(V.$$.fragment,t),wl=e(t),n(v.$$.fragment,t),Cl=e(t),n(R.$$.fragment,t),pl=e(t),B=C(t,"P",{"data-svelte-h":!0}),p(B)!=="svelte-aj0yj7"&&(B.textContent=ZJ),Il=e(t),n(Q.$$.fragment,t),rl=e(t),Z=C(t,"P",{"data-svelte-h":!0}),p(Z)!=="svelte-s9y6js"&&(Z.innerHTML=EJ),ol=e(t),n(E.$$.fragment,t),cl=e(t),x=C(t,"P",{"data-svelte-h":!0}),p(x)!=="svelte-1r5otvx"&&(x.textContent=xJ),gl=e(t),n(G.$$.fragment,t),jl=e(t),n(_.$$.fragment,t),ml=e(t),n(S.$$.fragment,t),ul=e(t),n(W.$$.fragment,t),kl=e(t),n(Y.$$.fragment,t),dl=e(t),n(L.$$.fragment,t),fl=e(t),n(O.$$.fragment,t),hl=e(t),D=C(t,"P",{"data-svelte-h":!0}),p(D)!=="svelte-7ojpde"&&(D.textContent=GJ),$l=e(t),z=C(t,"P",{"data-svelte-h":!0}),p(z)!=="svelte-1yy0stw"&&(z.innerHTML=_J),bl=e(t),X=C(t,"UL",{"data-svelte-h":!0}),p(X)!=="svelte-i7r6l3"&&(X.innerHTML=SJ),Al=e(t),H=C(t,"P",{"data-svelte-h":!0}),p(H)!=="svelte-9sr4u1"&&(H.innerHTML=WJ),Nl=e(t),n(q.$$.fragment,t),Fl=e(t),n(P.$$.fragment,t),Vl=e(t),K=C(t,"P",{"data-svelte-h":!0}),p(K)!=="svelte-1h71puy"&&(K.textContent=YJ),vl=e(t),tt=C(t,"P",{"data-svelte-h":!0}),p(tt)!=="svelte-1yy0stw"&&(tt.innerHTML=LJ),Rl=e(t),lt=C(t,"UL",{"data-svelte-h":!0}),p(lt)!=="svelte-1mjhcip"&&(lt.innerHTML=OJ),Bl=e(t),Jt=C(t,"P",{"data-svelte-h":!0}),p(Jt)!=="svelte-9sr4u1"&&(Jt.innerHTML=DJ),Ql=e(t),n(Ut.$$.fragment,t),Zl=e(t),n(Tt.$$.fragment,t),El=e(t),n(et.$$.fragment,t),xl=e(t),st=C(t,"P",{"data-svelte-h":!0}),p(st)!=="svelte-13xv2p4"&&(st.textContent=zJ),Gl=e(t),n(nt.$$.fragment,t),_l=e(t),n(Mt.$$.fragment,t),Sl=e(t),at=C(t,"P",{"data-svelte-h":!0}),p(at)!=="svelte-1ifmhjh"&&(at.textContent=XJ),Wl=e(t),n(it.$$.fragment,t),Yl=e(t),n(yt.$$.fragment,t),Ll=e(t),wt=C(t,"P",{"data-svelte-h":!0}),p(wt)!=="svelte-1tg4rwc"&&(wt.textContent=HJ),Ol=e(t),n(Ct.$$.fragment,t),Dl=e(t),n(pt.$$.fragment,t),zl=e(t),It=C(t,"P",{"data-svelte-h":!0}),p(It)!=="svelte-1qn6nox"&&(It.textContent=qJ),Xl=e(t),n(rt.$$.fragment,t),Hl=e(t),n(ot.$$.fragment,t),ql=e(t),ct=C(t,"P",{"data-svelte-h":!0}),p(ct)!=="svelte-11e79ra"&&(ct.textContent=PJ),Pl=e(t),gt=C(t,"TABLE",{"data-svelte-h":!0}),p(gt)!=="svelte-yz0452"&&(gt.innerHTML=KJ),Kl=e(t),jt=C(t,"P",{"data-svelte-h":!0}),p(jt)!=="svelte-1rz5tfh"&&(jt.innerHTML=tU),tJ=e(t),mt=C(t,"UL",{"data-svelte-h":!0}),p(mt)!=="svelte-e931ec"&&(mt.innerHTML=lU),lJ=e(t),n(ut.$$.fragment,t),JJ=e(t),kt=C(t,"TABLE",{"data-svelte-h":!0}),p(kt)!=="svelte-1s50hy6"&&(kt.innerHTML=JU),UJ=e(t),n(dt.$$.fragment,t),TJ=e(t),n(ft.$$.fragment,t),eJ=e(t),n(ht.$$.fragment,t),sJ=e(t),n($t.$$.fragment,t),nJ=e(t),n(bt.$$.fragment,t),MJ=e(t),c=C(t,"OL",{});var fJ=qt(c);At=C(fJ,"LI",{});var hJ=qt(At);Dt=C(hJ,"P",{"data-svelte-h":!0}),p(Dt)!=="svelte-1ql6723"&&(Dt.textContent=UU),bJ=e(hJ),n(Nt.$$.fragment,hJ),hJ.forEach(J),AJ=e(fJ),Ft=C(fJ,"LI",{});var $J=qt(Ft);zt=C($J,"P",{"data-svelte-h":!0}),p(zt)!=="svelte-mvonpl"&&(zt.textContent=TU),NJ=e($J),n(Vt.$$.fragment,$J),$J.forEach(J),fJ.forEach(J),aJ=e(t),n(vt.$$.fragment,t),iJ=e(t),Rt=C(t,"P",{"data-svelte-h":!0}),p(Rt)!=="svelte-1kgmspm"&&(Rt.innerHTML=eU),yJ=e(t),n(Bt.$$.fragment,t),wJ=e(t),n(Qt.$$.fragment,t),CJ=e(t),Zt=C(t,"P",{"data-svelte-h":!0}),p(Zt)!=="svelte-15qsq5t"&&(Zt.textContent=sU),pJ=e(t),n(Et.$$.fragment,t),IJ=e(t),n(xt.$$.fragment,t),rJ=e(t),Gt=C(t,"P",{"data-svelte-h":!0}),p(Gt)!=="svelte-kcw6cx"&&(Gt.innerHTML=nU),oJ=e(t),_t=C(t,"UL",{"data-svelte-h":!0}),p(_t)!=="svelte-1ytrlfe"&&(_t.innerHTML=MU),cJ=e(t),n(St.$$.fragment,t),gJ=e(t),Wt=C(t,"P",{"data-svelte-h":!0}),p(Wt)!=="svelte-qwzbgj"&&(Wt.textContent=aU),jJ=e(t),n(Yt.$$.fragment,t),mJ=e(t),Lt=C(t,"UL",{"data-svelte-h":!0}),p(Lt)!=="svelte-ysp9zp"&&(Lt.innerHTML=iU),uJ=e(t),n(Ot.$$.fragment,t),kJ=e(t),Ht=C(t,"P",{}),qt(Ht).forEach(J),this.h()},h(){yU(o,"name","hf:doc:metadata"),yU(o,"content",mU)},m(t,l){g(document.head,o),U(t,Pt,l),U(t,Xt,l),U(t,Kt,l),M(j,t,l),U(t,tl,l),M(m,t,l),U(t,ll,l),U(t,u,l),U(t,Jl,l),M(k,t,l),U(t,Ul,l),U(t,d,l),U(t,Tl,l),U(t,f,l),U(t,el,l),M(h,t,l),U(t,sl,l),M($,t,l),U(t,nl,l),U(t,b,l),U(t,Ml,l),M(A,t,l),U(t,al,l),U(t,N,l),U(t,il,l),M(F,t,l),U(t,yl,l),M(V,t,l),U(t,wl,l),M(v,t,l),U(t,Cl,l),M(R,t,l),U(t,pl,l),U(t,B,l),U(t,Il,l),M(Q,t,l),U(t,rl,l),U(t,Z,l),U(t,ol,l),M(E,t,l),U(t,cl,l),U(t,x,l),U(t,gl,l),M(G,t,l),U(t,jl,l),M(_,t,l),U(t,ml,l),M(S,t,l),U(t,ul,l),M(W,t,l),U(t,kl,l),M(Y,t,l),U(t,dl,l),M(L,t,l),U(t,fl,l),M(O,t,l),U(t,hl,l),U(t,D,l),U(t,$l,l),U(t,z,l),U(t,bl,l),U(t,X,l),U(t,Al,l),U(t,H,l),U(t,Nl,l),M(q,t,l),U(t,Fl,l),M(P,t,l),U(t,Vl,l),U(t,K,l),U(t,vl,l),U(t,tt,l),U(t,Rl,l),U(t,lt,l),U(t,Bl,l),U(t,Jt,l),U(t,Ql,l),M(Ut,t,l),U(t,Zl,l),M(Tt,t,l),U(t,El,l),M(et,t,l),U(t,xl,l),U(t,st,l),U(t,Gl,l),M(nt,t,l),U(t,_l,l),M(Mt,t,l),U(t,Sl,l),U(t,at,l),U(t,Wl,l),M(it,t,l),U(t,Yl,l),M(yt,t,l),U(t,Ll,l),U(t,wt,l),U(t,Ol,l),M(Ct,t,l),U(t,Dl,l),M(pt,t,l),U(t,zl,l),U(t,It,l),U(t,Xl,l),M(rt,t,l),U(t,Hl,l),M(ot,t,l),U(t,ql,l),U(t,ct,l),U(t,Pl,l),U(t,gt,l),U(t,Kl,l),U(t,jt,l),U(t,tJ,l),U(t,mt,l),U(t,lJ,l),M(ut,t,l),U(t,JJ,l),U(t,kt,l),U(t,UJ,l),M(dt,t,l),U(t,TJ,l),M(ft,t,l),U(t,eJ,l),M(ht,t,l),U(t,sJ,l),M($t,t,l),U(t,nJ,l),M(bt,t,l),U(t,MJ,l),U(t,c,l),g(c,At),g(At,Dt),g(At,bJ),M(Nt,At,null),g(c,AJ),g(c,Ft),g(Ft,zt),g(Ft,NJ),M(Vt,Ft,null),U(t,aJ,l),M(vt,t,l),U(t,iJ,l),U(t,Rt,l),U(t,yJ,l),M(Bt,t,l),U(t,wJ,l),M(Qt,t,l),U(t,CJ,l),U(t,Zt,l),U(t,pJ,l),M(Et,t,l),U(t,IJ,l),M(xt,t,l),U(t,rJ,l),U(t,Gt,l),U(t,oJ,l),U(t,_t,l),U(t,cJ,l),M(St,t,l),U(t,gJ,l),U(t,Wt,l),U(t,jJ,l),M(Yt,t,l),U(t,mJ,l),U(t,Lt,l),U(t,uJ,l),M(Ot,t,l),U(t,kJ,l),U(t,Ht,l),dJ=!0},p:CU,i(t){dJ||(a(j.$$.fragment,t),a(m.$$.fragment,t),a(k.$$.fragment,t),a(h.$$.fragment,t),a($.$$.fragment,t),a(A.$$.fragment,t),a(F.$$.fragment,t),a(V.$$.fragment,t),a(v.$$.fragment,t),a(R.$$.fragment,t),a(Q.$$.fragment,t),a(E.$$.fragment,t),a(G.$$.fragment,t),a(_.$$.fragment,t),a(S.$$.fragment,t),a(W.$$.fragment,t),a(Y.$$.fragment,t),a(L.$$.fragment,t),a(O.$$.fragment,t),a(q.$$.fragment,t),a(P.$$.fragment,t),a(Ut.$$.fragment,t),a(Tt.$$.fragment,t),a(et.$$.fragment,t),a(nt.$$.fragment,t),a(Mt.$$.fragment,t),a(it.$$.fragment,t),a(yt.$$.fragment,t),a(Ct.$$.fragment,t),a(pt.$$.fragment,t),a(rt.$$.fragment,t),a(ot.$$.fragment,t),a(ut.$$.fragment,t),a(dt.$$.fragment,t),a(ft.$$.fragment,t),a(ht.$$.fragment,t),a($t.$$.fragment,t),a(bt.$$.fragment,t),a(Nt.$$.fragment,t),a(Vt.$$.fragment,t),a(vt.$$.fragment,t),a(Bt.$$.fragment,t),a(Qt.$$.fragment,t),a(Et.$$.fragment,t),a(xt.$$.fragment,t),a(St.$$.fragment,t),a(Yt.$$.fragment,t),a(Ot.$$.fragment,t),dJ=!0)},o(t){i(j.$$.fragment,t),i(m.$$.fragment,t),i(k.$$.fragment,t),i(h.$$.fragment,t),i($.$$.fragment,t),i(A.$$.fragment,t),i(F.$$.fragment,t),i(V.$$.fragment,t),i(v.$$.fragment,t),i(R.$$.fragment,t),i(Q.$$.fragment,t),i(E.$$.fragment,t),i(G.$$.fragment,t),i(_.$$.fragment,t),i(S.$$.fragment,t),i(W.$$.fragment,t),i(Y.$$.fragment,t),i(L.$$.fragment,t),i(O.$$.fragment,t),i(q.$$.fragment,t),i(P.$$.fragment,t),i(Ut.$$.fragment,t),i(Tt.$$.fragment,t),i(et.$$.fragment,t),i(nt.$$.fragment,t),i(Mt.$$.fragment,t),i(it.$$.fragment,t),i(yt.$$.fragment,t),i(Ct.$$.fragment,t),i(pt.$$.fragment,t),i(rt.$$.fragment,t),i(ot.$$.fragment,t),i(ut.$$.fragment,t),i(dt.$$.fragment,t),i(ft.$$.fragment,t),i(ht.$$.fragment,t),i($t.$$.fragment,t),i(bt.$$.fragment,t),i(Nt.$$.fragment,t),i(Vt.$$.fragment,t),i(vt.$$.fragment,t),i(Bt.$$.fragment,t),i(Qt.$$.fragment,t),i(Et.$$.fragment,t),i(xt.$$.fragment,t),i(St.$$.fragment,t),i(Yt.$$.fragment,t),i(Ot.$$.fragment,t),dJ=!1},d(t){t&&(J(Pt),J(Xt),J(Kt),J(tl),J(ll),J(u),J(Jl),J(Ul),J(d),J(Tl),J(f),J(el),J(sl),J(nl),J(b),J(Ml),J(al),J(N),J(il),J(yl),J(wl),J(Cl),J(pl),J(B),J(Il),J(rl),J(Z),J(ol),J(cl),J(x),J(gl),J(jl),J(ml),J(ul),J(kl),J(dl),J(fl),J(hl),J(D),J($l),J(z),J(bl),J(X),J(Al),J(H),J(Nl),J(Fl),J(Vl),J(K),J(vl),J(tt),J(Rl),J(lt),J(Bl),J(Jt),J(Ql),J(Zl),J(El),J(xl),J(st),J(Gl),J(_l),J(Sl),J(at),J(Wl),J(Yl),J(Ll),J(wt),J(Ol),J(Dl),J(zl),J(It),J(Xl),J(Hl),J(ql),J(ct),J(Pl),J(gt),J(Kl),J(jt),J(tJ),J(mt),J(lJ),J(JJ),J(kt),J(UJ),J(TJ),J(eJ),J(sJ),J(nJ),J(MJ),J(c),J(aJ),J(iJ),J(Rt),J(yJ),J(wJ),J(CJ),J(Zt),J(pJ),J(IJ),J(rJ),J(Gt),J(oJ),J(_t),J(cJ),J(gJ),J(Wt),J(jJ),J(mJ),J(Lt),J(uJ),J(kJ),J(Ht)),J(o),y(j,t),y(m,t),y(k,t),y(h,t),y($,t),y(A,t),y(F,t),y(V,t),y(v,t),y(R,t),y(Q,t),y(E,t),y(G,t),y(_,t),y(S,t),y(W,t),y(Y,t),y(L,t),y(O,t),y(q,t),y(P,t),y(Ut,t),y(Tt,t),y(et,t),y(nt,t),y(Mt,t),y(it,t),y(yt,t),y(Ct,t),y(pt,t),y(rt,t),y(ot,t),y(ut,t),y(dt,t),y(ft,t),y(ht,t),y($t,t),y(bt,t),y(Nt),y(Vt),y(vt,t),y(Bt,t),y(Qt,t),y(Et,t),y(xt,t),y(St,t),y(Yt,t),y(Ot,t)}}}const mU='{"title":"FinRL Environment","local":"finrl-environment","sections":[{"title":"Overview","local":"overview","sections":[],"depth":2},{"title":"Quick Start","local":"quick-start","sections":[{"title":"1. Build the Docker Image","local":"1-build-the-docker-image","sections":[],"depth":3},{"title":"2. Run the Server","local":"2-run-the-server","sections":[{"title":"Option A: With Default Sample Data","local":"option-a-with-default-sample-data","sections":[],"depth":4},{"title":"Option B: With Custom Configuration","local":"option-b-with-custom-configuration","sections":[],"depth":4}],"depth":3},{"title":"3. Use the Client","local":"3-use-the-client","sections":[],"depth":3}],"depth":2},{"title":"Architecture","local":"architecture","sections":[],"depth":2},{"title":"API Reference","local":"api-reference","sections":[{"title":"FinRLAction","local":"finrlaction","sections":[],"depth":3},{"title":"FinRLObservation","local":"finrlobservation","sections":[],"depth":3},{"title":"Client Methods","local":"client-methods","sections":[{"title":"reset() -&gt; StepResult[FinRLObservation]","local":"reset--gt-stepresultfinrlobservation","sections":[],"depth":4},{"title":"step(action: FinRLAction) -&gt; StepResult[FinRLObservation]","local":"stepaction-finrlaction--gt-stepresultfinrlobservation","sections":[],"depth":4},{"title":"state() -&gt; State","local":"state--gt-state","sections":[],"depth":4},{"title":"get_config() -&gt; dict","local":"getconfig--gt-dict","sections":[],"depth":4}],"depth":3}],"depth":2},{"title":"Data Format","local":"data-format","sections":[],"depth":2},{"title":"Configuration Parameters","local":"configuration-parameters","sections":[],"depth":2},{"title":"Integration with RL Frameworks","local":"integration-with-rl-frameworks","sections":[{"title":"Stable Baselines 3","local":"stable-baselines-3","sections":[],"depth":3}],"depth":2},{"title":"Troubleshooting","local":"troubleshooting","sections":[{"title":"Server won’t start","local":"server-wont-start","sections":[],"depth":3},{"title":"Import errors","local":"import-errors","sections":[],"depth":3},{"title":"Configuration errors","local":"configuration-errors","sections":[],"depth":3}],"depth":2},{"title":"Examples","local":"examples","sections":[],"depth":2},{"title":"License","local":"license","sections":[],"depth":2},{"title":"References","local":"references","sections":[],"depth":2}],"depth":1}';function uU(FJ){return pU(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class $U extends IU{constructor(o){super(),rU(this,o,uU,jU,wU,{})}}export{$U as component};

Xet Storage Details

Size:
54.5 kB
·
Xet hash:
38713c70a31305e2607c9b3c4fe68850f4e8edc3070d6170da77ce7355cd5f9d

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.