GetQuotesFromFeed() diff --git a/docs/examples/Examples.sln b/docs/examples/Examples.sln index ce9820ae4..8a1fce094 100644 --- a/docs/examples/Examples.sln +++ b/docs/examples/Examples.sln @@ -7,12 +7,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleApp", "ConsoleApp\Co EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Backtest", "Backtest\Backtest.csproj", "{21707592-8CB6-40DB-8183-E1D107559EDB}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CustomIndicatorsLibrary", "CustomIndicators\CustomIndicatorsLibrary.csproj", "{D201089E-E9F6-4A67-A763-4164C8318E04}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CustomIndicatorsLibrary", "CustomIndicatorsLibrary\CustomIndicatorsLibrary.csproj", "{D201089E-E9F6-4A67-A763-4164C8318E04}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CustomIndicatorsUsage", "CustomIndicatorsUsage\CustomIndicatorsUsage.csproj", "{4C6528AB-8311-4F10-99D2-83A2AB2DFB53}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ObserveStream", "ObserveStream\ObserveStream.csproj", "{5FAD383B-DFCD-42FD-A847-53D772876595}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UseQuoteApi", "UseQuoteApi\UseQuoteApi.csproj", "{E6B2E0AE-6457-47F3-9BA5-01F4AA84118A}" EndProject Global @@ -37,10 +35,6 @@ Global {4C6528AB-8311-4F10-99D2-83A2AB2DFB53}.Debug|Any CPU.Build.0 = Debug|Any CPU {4C6528AB-8311-4F10-99D2-83A2AB2DFB53}.Release|Any CPU.ActiveCfg = Release|Any CPU {4C6528AB-8311-4F10-99D2-83A2AB2DFB53}.Release|Any CPU.Build.0 = Release|Any CPU - {5FAD383B-DFCD-42FD-A847-53D772876595}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5FAD383B-DFCD-42FD-A847-53D772876595}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5FAD383B-DFCD-42FD-A847-53D772876595}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5FAD383B-DFCD-42FD-A847-53D772876595}.Release|Any CPU.Build.0 = Release|Any CPU {E6B2E0AE-6457-47F3-9BA5-01F4AA84118A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E6B2E0AE-6457-47F3-9BA5-01F4AA84118A}.Debug|Any CPU.Build.0 = Debug|Any CPU {E6B2E0AE-6457-47F3-9BA5-01F4AA84118A}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/docs/examples/ObserveStream/ObserveStream.csproj b/docs/examples/ObserveStream/ObserveStream.csproj deleted file mode 100644 index b00a69c7f..000000000 --- a/docs/examples/ObserveStream/ObserveStream.csproj +++ /dev/null @@ -1,14 +0,0 @@ -- - diff --git a/docs/examples/ObserveStream/Program.cs b/docs/examples/ObserveStream/Program.cs deleted file mode 100644 index 80b9a54be..000000000 --- a/docs/examples/ObserveStream/Program.cs +++ /dev/null @@ -1,125 +0,0 @@ -using Alpaca.Markets; -using Skender.Stock.Indicators; - -namespace ObserveStream; - -internal class Program -{ - private static async Task Main(string[] args) - { - if (args.Length != 0) - { - Console.WriteLine(args); - } - - string symbol = "BTC/USD"; - Console.WriteLine($"STREAMING QUOTES FOR {symbol}"); - Console.WriteLine(); - - await SubscribeToQuotes(symbol); - } - - public static async Task SubscribeToQuotes(string symbol) - { - // get and validate keys, see README.md - string ALPACA_KEY = Environment.GetEnvironmentVariable("ALPACA_KEY"); - string ALPACA_SECRET = Environment.GetEnvironmentVariable("ALPACA_SECRET"); - - if (string.IsNullOrEmpty(ALPACA_KEY)) - { - throw new ArgumentNullException( - ALPACA_KEY, - $"API KEY missing, use `setx ALPACA_KEY \"MY-ALPACA-KEY\"` to set."); - } - - if (string.IsNullOrEmpty(ALPACA_SECRET)) - { - throw new ArgumentNullException( - ALPACA_SECRET, - $"API SECRET missing, use `setx AlpacaApiSecret \"MY-ALPACA-SECRET\"` to set."); - } - - // initialize our quote provider and a few subscribers - QuoteProvider provider = new(); - - SmaObserver sma = provider.GetSma(3); - EmaObserver ema = provider.GetEma(5); - EmaObserver emaChain = provider - .Use(CandlePart.HL2) - .GetEma(7); - - // connect to Alpaca WebSocket - SecretKey secretKey = new(ALPACA_KEY, ALPACA_SECRET); - - IAlpacaCryptoStreamingClient client - = Environments - .Paper - .GetAlpacaCryptoStreamingClient(secretKey); - - await client.ConnectAndAuthenticateAsync(); - - // TODO: is this needed? - AutoResetEvent[] waitObjects = [new AutoResetEvent(false)]; - - IAlpacaDataSubscription- - -Exe -net9.0 -enable -- - -- - quoteSubscription - = client.GetMinuteBarSubscription(symbol); - - await client.SubscribeAsync(quoteSubscription); - - // console display header - Console.WriteLine("A new quote will be shown when they arrive every minute."); - Console.WriteLine("PLEASE WAIT > 8 MINUTES BEFORE EXITING TO SEE ALL 3 INDICATORS CALCULATED."); - Console.WriteLine("Press any key to EXIT the process and to see results."); - Console.WriteLine(); - - Console.WriteLine("Date Close price SMA(3) EMA(5) EMA(7,HL2)"); - Console.WriteLine("----------------------------------------------------------------------"); - - // handle new quotes - quoteSubscription.Received += (q) => - { - // add to our provider - provider.Add(new Quote - { - Date = q.TimeUtc, - Open = q.Open, - High = q.High, - Low = q.Low, - Close = q.Close, - Volume = q.Volume - }); - - // display live results - string liveMessage = $"{q.TimeUtc:u} ${q.Close:N2}"; - - SmaResult s = sma.Results.Last(); - EmaResult e = ema.Results.Last(); - EmaResult c = emaChain.Results.Last(); - - if (s.Sma is not null) - { - liveMessage += $"{s.Sma,12:N1}"; - } - - if (e.Ema is not null) - { - liveMessage += $"{e.Ema,12:N1}"; - } - - if (c.Ema is not null) - { - liveMessage += $"{c.Ema,12:N1}"; - } - - Console.WriteLine(liveMessage); - }; - - // to stop watching on key press - Console.ReadKey(); - - // terminate subscriptions - provider.EndTransmission(); - await client.UnsubscribeAsync(quoteSubscription); - await client.DisconnectAsync(); - } -} diff --git a/docs/examples/README.md b/docs/examples/README.md index 6fabc94ad..6d3776dca 100644 --- a/docs/examples/README.md +++ b/docs/examples/README.md @@ -8,13 +8,12 @@ layout: page # {{ page.title }} -To help you get started, here are a few minimalist [.NET 8.0](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) C# projects that you can review. They are complete working examples. +To help you get started, here are a few minimalist [.NET 9.0](https://dotnet.microsoft.com/en-us/download/dotnet/9.0) C# projects that you can review. They are complete working examples. - `ConsoleApp` is a minimalist example of how to use the library (start here) - `Backtest` is a slightly more complicated example of how to analyze results - `CustomIndicatorsLibrary` shows how you can [create your own custom indicators]({{site.baseurl}}/custom-indicators/#content) -- `CustomIndicatorsUsage` shows how you'd use a custom indicator just like any other in the main library -- `ObserveStream` [preview] shows how you'd use live quotes from WebSocket, using the Alpaca SDK for .NET +- `CustomIndicatorsUsage` shows how you'd use custom indicators just like any other in the main library - `UseQuoteApi` shows how you'd get quotes from an API quote source, using the Alpaca SDK for .NET For more information on how to use this library overall, see the [Guide and Pro Tips]({{site.baseurl}}/guide/#content). diff --git a/docs/examples/Skender.Stock.Indicators-Examples.zip b/docs/examples/Skender.Stock.Indicators-Examples.zip index bf178881560d4cda9dd72ab9e153aeb6d5db8285..9c2b12fcb90f36916c95594d4b5e1e8340873f68 100644 GIT binary patch delta 9542 zcmc(FWmueBvUNivjk~*RaCZ-y;O-LKT|2?up>cO7!QI^n?g<*45FqH~%-oqXXYPFW z`+48C=h sB&V+92O*g*pTD6gX| z7UtG&jxJ`74j-&7EmUW1*4fbgmb5@uPRb+BZxDhdNF|cQa<8Chm~Cw>SVs~I4GvtM z?rXBLB-h?fPEFXzv|Z@#kC%tvhxO?Gh)bkG6LF!`QcwXOH?r)mhmffrf!ThehG1G^ z-X4#CIeuFu5z}PV(czp7Oa{dmYe&X@QPv30Vizy@K5WjtFotC%&Exd(`-nV;S@)z8 zF+Edwjw*0z2kz=T)ZaCdgqZ)ZC1*X@@z_T;ISl8~$KT0g#h-QhjP+(g)KKfqexdX& zl}R2WDbw$sK!bv9U4{!0C~&d$yE3IlZ3+9aQUPO!ckR;5GgHYaK6_fnjM$UrQIYNx zbnN_o@2ayI^%g7{C$;T?7hJpxGGY0t7Py6P6+eqi8p!V*uFcVyJb_>KS0aO>=Y6Ny z@^7dH5}D^#&V5 ?mG|wgF%5RS>&aCjWp>nKrVcb6C-lB!| z|C%&BOtGQbx?i|L`*T++o&9u{iemSnUw38c^@R_B_^AR3!S)Hg@A}!$rOs3C(NaZw zYWT=0XcEw|lYzwr44&WZsCXlms(2ZH`>w}JmiuHK%uZQl*(1am>zw@HfjCZK$_Ul1 zRxzc-Gp9!FNrW@6K%>Xi220XU(f8hd>hD>=&(nSpD`CApDMRM&VKw*Rqi76)4^XaD zH2S$>c$4qC2)+~%*cyQD`2AyUgGmTyZYhRVm*e_{(ILiO2}tGyfOZs5-t>?}X _5=S#7v*~Bp_7w{)OJw_jKRdpX z;`bhZ2=Qg#$0PaXEn(E~nfXxK(ORu*u!!Y4GnbOfGx2y)0MwsRnsfEj*@J=&D}e<7 zuF;Z8p(()Awb~q>+YJ%(JsUmT_LlNU`h2TmNd%;6zRGso7%6YG64j9BUjo`cldQ?f z?#wjQzwy_t_7JW1P^0?BugGEMy_?Ix;B6cd86%qGKeU8| q?B_)X&l zB~G&DDMF(+Ml@0qgRQcGph=fKszpw_XNLyKfteSKE12X)D-9Uph>8>AFx&3bbe$|% zY{oUVrA(C%cIuTnabLHJ&0jq44|e5~3`yB7m4jZAAUXyr;`ITZrR80XcM=Do(4I88 zT^(Uf*v#M{-aa$qeDilHwyT^xNqqbtI5@-AmMT~3;2Tz8Ig7Ry%!8R?nb#2*Oj17x zSNeb%ci6pHOTVL*r3LA*O& IchENDNRgFZj=?N0K7pqHxRuTp~ zA?Ny$Z8{x?PS|2!Wc-{teiXE;3Xg&*H&3l)|IDxzV?f}%hYVKb%hN7jMQM@`k>TYg zYh-}+4iaq>dzlu T@>d+M zb!6k%4XT`_B)=nTtb5E3Z(SPNbo~sTL;MyCM;LQwKupa?RWox)(=6tq)Xuq1(|G%$ z>pRIs2xL`N#DYh 5HL8F1{jAs_aVLxRM&0wH-Y8!NP<+Dc%pD8UYT znwM)M>4?e2YZ(*ks#YpZkSisS@c=q}fq56jDMl669?|9Wljre4)?xMG@`^sA_Qm#4 z>wq*}baVYi4?Qxrc|pG}sM8ECHg>$s@E7kl->LpkA!n4FYlZ%O$_%=*OS3ZIp_v+T zzE_9 K2WLEI Q8)+JnpP~pRH@kSU?+5!QY9SKvR z ia$;nJ!#$|l^mjC21^b-ZtxV5_F;NK?L78C^TN7g(4R)80J zI}`eJ{@#hGkf3+|fuv_FX5%0X5(J+&HH-$G&E7WcDX#gB*?*Zt$Th=bQE9`ENiojZ zR}NyGkf-G?nLc7Ss<%F%`=jd?saob^+#^CsJccHzn^E0|L|B&YEQ>TGnTQDhIHd_y zTh2?6z{qri+#9cyN?8`n49&(Pl_qJrk5|vfgp@dcOQps{d4(BB(?Z IeQ&hO%F4FGTZRH}h%UTBH6+H9n zT@~E_sMRuhQcff14&_*W&Yga#2v%8dU!=##9l2*ME5b-yf2#=IGTxl8%X4;)1)Erj zb~Slc@Y+>e=1gL~D E+H`OC1_ z-WALjVo32 mdYwcMRq zx#;)600242007SGsHCHVtD~KTxRVpBvWugoi-|ppnQO78-uv$|*a6eEe39`P*iI6< zW0=d;s@j@5y%KUo{$=-U_3uZR&EnDt;6H~y-{gE>zU13cbw8khq`P+e9hhs<^0Mh_ zhdDbHr1Z_mWiM}oU9MsR3=csIDpWtqMHqxJ &TW)xU;PL#LHlN H zC&`BPS)0WX#z+lVsbNrN#Y #h18cf54)Vtc%?ZLuWL3qfg*(CbjNm2gnu})E@`2 z1S{&EKDx{Gm(G7;Xmf(&w3ef@)^vhchvAmU45K5^k#qZiSw{PCmM+W^2dxIAb}n-j zpYqLp&~j(?v~HsBrqK&EGnsF$6C&Bv`Y2A^J=M5W-?Fvg3o-d&N7*){yO8zlZdI9- zGm=YRudg20j5c%n8>!ZwMP0xe#khH~VA*lY(dpw!cp8Z)89k~KVPjV>j X>R;ztOk+UDW}YE5uG_L*UGbMu-%xVe3a=$z!b{ruh+zIUg$wwr|b z%+b^L$)ULwNQXTzvCWol^CPI0O_jQ)<$507n$hu*#4a*FYb-vC=9dNL)X1}@g?6Ud z4!h&fY}720y97HaPMZsBE<@UWrD}z`MySTo)gyh 9r z>iA}Tk34kDJ&cUT-$2X-Mzfy>wBE}U^;>KWe%+E17yVA$78LrHyUzHFQxh=%-M$qu zFRR6NRy>v|wp 7si7_4f)r@9b%QN7*iA&@d?r%jUMs-^&_ z_B_)5X@*ki`m6-Q5?n=fqM*uG^(LJ!o@r81GKi~i+~Dw(Yn%4W+49x{%Rw^tT*RXKyPG&g25U>H4c%|54=j8ttCY$ki*;es zFW~;mjPS`XD0)hL5g V)snGE`V^^{TV$zT9jURlE30FQ#Ibbus57opcu*$G<7?k= z?!XOD>LicPZrfNr!I90Q!cfw<3w=8;{sz9Z#J!Hf6(anYHkUK>gI?{n^^FiOLK7nf z@1aZ3VK4Sfhkg}qR{;ja+(hfw8^LTM=ny+h^a9U!gTzq=bzi!WJSeUECv-Oj1s~wU zQrK8-%f;ca`-uI>sj9Qo&_i0Kwc_$76=29<2GN%MhN0bh->B{?3xC;VZ$Pl%{+ Q;$x8_kM&MX*o(Vjjb7yIGO86bt`xk>K4B?`mVY;B*;%pe^>S7{g|- z-lS>5E;_8DI+0_hLzSk!;pW?hmaEXXXJQH%A!)rXVl 69g%K%|UZ%zpbFIb0WM|I;9_}=4D_gyS+k<%0hIu*0+1T|FNx Q`CCI-okgX$j@5Kxzs*IU1nrrPqmQXIU|G-5} zFu%G{>!}aK6I9Qtaiv8iZ#MP--L2)#U}NlBd2lS4jogt^7@Dx;Ugngq;~I^|N(Gsy zFDngU&5Up;3X3pDw@t59TqB(KkZpoFW6ZQ`W^9^9XN+WqK~^ea44j~lL|8`GkF T%chb@)~nMD$Lp5lmN%Y?s>lM2@mM&@kz?c;?>Xp>O|6ps3Zc;*Pki?3s@ zCvbh5nWFgkMieo#&;?3yjV7m`j_cX9?fFA-@9#V=&vCwjwN!Cn&U(pkBPAXj2g5B< z>Ity3U-xd@8L*j*Z;%?M>Qm(|?~;tr(*u)0Immf=^ds|YHma)1TWd8Up13@`b<4Rx zojbM4cAVNhlHYv|^(4r2DuTG+f@!DJOHpli@EiA*PDD*Ka~Y*ywlgiIcs3zN;%adY z#bf0Lml8Wkdl{=WN;w_`YK18SBJC{vo`&8Z7F4 i-kagJqypjwf*W< z0`|ph WtQrbzY9)G8 z6ZtZiFX5HVS)36Wh|Sk}2G1E-iGWZ_UEHZ8*Em(^I__J_K;6i6(DOppbjV2hjfhS- zuA{!&Ls))asWfrLUGaAZI6g`*pS*AmX4C71)feP`S#iKv>I%<@TIi?wyA_$<;OD$f zZp(CVpH#(F;Vc; yR=Q|gJMStSH{RVQ~%>r zS<7LIU)Z=X1hRyk!^WJkh;ubhh{!IaZ4k@LO`%gFmjOz6Uym`+ZHZW0pEV2Pm?3Zx zas4q@tmb+ fO{E#j =he7*7r#ky^m=}_rO1Yxl6jE zP6&G(pzBpXU_t%gQ;DjyxRjDKi@kZZmi_x?B|_i;EK2>Wc6Q_LMMU-*HBAU9IglTm zlF(}d&5j;=9(ay^1<*OlSJuXhY_!O4R9(vPiC9tjcJ^Uzl-XmeO9jtH8jbW|eA*A3 z==QD!w%=4m)9m*L6q6qA%9RFXj8Qv2eAHlBvk9Q{t;F)ZT^yyK<4Uu>8|mjGw4%|` zbvi^PqHW7Ll#}?12`JGrm5i*PB00R^uBM?Y4(( 3c>6grW}2K{5(2+oePEzU3|O xqOVmvTOoQGCtpC|4ag` zk?zCGp0q!liGV%jxZ-fPi&u>guZz$RiCCykqd(MM^Cd$?9&3KK FCF15h-YFZmo;tiqH0&7 zzV6p1w60QA<1Q33LELKg30HG{)XcusBMmeEUJXdOXIhHzE1MQa@JBEKTz#VLy9F)7 zpmur$mHPCaOtQuMCbxUItyy!u`<%yfj3AFN`sH3KkSN9kxqepeU|9=t&vaT)jmmsH zNyup2P#KnqgSf>DF3WJW{)r2H$a;sra~FIK#6`_V>p^%f68lgQhxcxT$}ZQ9&MXbJ zosH$=)N{u>4~l(N3M#O`TKn(7&I!zg^g5g-)@i})v7^p}E*vqbg1U0uqsi7eIF@OK zkE|MbZ{Q}dYg*-qV#6%5G~Gu)n{ji?xYw?9xKje5R8+eA?DmDaZKMG@mn( DTEHG8&ct;VT3W!icT;$Be z?46@7au(2vCM2exXcfXy)oa!Yj^_->(X7|fw2fNN0y8Z*T>S{z{F{bML9GvxBPcB; zsB<3st-0NP)j?pL@(CR2WX-@k89AFSTFi9ad}|KbJ?T#*asy;%3$fH9N%Vx0*3qdI zR9HQh7;O186X>MnHKyIDlKjZ1za-m#cdQ{Gs5>kAe2K%YPnhh+{@J{@=-i-k!(n(t zBxbgoBefHq0Bb;T(wy&~h=x0?x~p9%lS!7UGAa6?a%m-0!QKl#jaF>W68Ukp`@wit z=IbGRy~7%A?YvvIY}|FUxcx?2<>0Sf9eq5M4*Ms#KM&L^M2e>YA`pQ;zUHN;i>d7S zS3Mu=l_ %=Is1JD|_n9ITft pmrc>eWhVzt8Qo)1ZqbYsEyt99toXdsgFAEceLx1t_c$! z(2rX#Uh>hX&S3~)aYGnr!sdsx{;v42w{jTjJb->pE%pf+3IQ6CatF)!JLRraXcyUf ztfAf~6}!cdQS2={nS);|yUvGGkufQo`;NhJ1SnoGATwfg2{3&gz5)P)h6@89wy&Lp z-&DA}^yn>4@fXKp# 1rb9 zsy3?+d{R?sSvQZZbM}`!Q?uVG rnyL-N;z2!?tcsU`BUk^wMr??>hd_sRI zMlA `Ay3jR3fQ-pqohthK z-Ur{vaOI?TeP6Uvu{fkcgIGH2lZAjWpG+IP138DZj--vJ@&-^9vewvD=~XXuiP8yE zC~xVCcLNc;I{J7K5#}#V#_(RYsm-|UZuxCp@34mpiT?@R>Y-U>drefFKMawd9o^FG za6mzfNE5itul?Vx3}*+2MFN#>&6rwaMQ*U{FD{Fl8qZ~${O#2ZZQKidyB2 ^%jBGEG(dL6%5)f~jF-e1lID0m2@3@oT?#p}5DcSQd zN$bhKfpxzi(KuqqHJ>%(*QiG@@b)z9$iPG&3n47yEH$4*M-ABOQNEQ|Ad=QS6e1lD z|D|2I)y-$0A5SCRJYLfagT;eE_)FrH(&KHLl}EMtgoFbhVv5=)&E(S1AnGXbOJ^8( z&7b{y`J~@DS&$!Kqc>*gM)qLHud`53OYE@m%)uB0*QTCyur%f)GL}#9ura0q2m( LVavDPyVOp01yoPnXeUamv{To1$c!r{XVt@eI3X@) z*&)QHhC<$lDv}u)u+3JWO}%7por*^`QY^s)J>gb-F>kTLub~_1
#5-R)Ci5pT4>+|%?Nt0;y>gf5p*;#k)1RZr`1KBM@;HZp>Ya~sEgU;7z0 z(|NM#k_5-k{kh-t%Q4@g%rjjw%PllPDKU7%p-2IqXHNyL?J3;Ic7n{^C)eCs#pmhM zf|Kj*gQGTg>6;*>4;BL7G1~moHSB07V18nW12ABc_(+5Ln9E4QK&G;X9ZkW~P+`)o zC!8q8NqF6qKN;g}g(L`C;)l`%WIx5RmrmR^+o=0by5TAcFvpK#C+Bzc@MTeE)Zv4@ zO!p474-km-64=7(Ji4rrN)pI-6^e1+smt9Z|0LDhkT+AULeSA%po! J|Y%zaRfu3-Luu{qQ~B9k$)J z>@xGtzgt{=INET-Tw#TrMB#)}qFV+$f$bCc)sUW3>ii}fj4g+PY#>9^<#N(3E)_I* z?=#h;7miE8)F1~~V_3ZMFW*8OYcYCguAe5Yy6x%@YcuG)tnt`$l#Cer5qB~1O_DpH zZuU}-$nM3@NjhXC=wsCoB35KEJ_1(>nEmT7%C5f6X|G6faS~J70uYA!-W@g=dS4C1 zFvUgyuuGiIrP@B9JOoa2qcv=mCP(PeOa#f zL`(? u z1#T(GK;+lRobHLBlIss}I;Wdoeb_~zY@X4Dp~VX!L-`X@>@C{ZgoaNocDs*vuY5^r z$u{b+lG@glF{zYJI36W0^?5#0(!^#(YF)_k*iRSg%0BtYGx-57=6p4uy>>8* UA=*;+vtelu21R~9Ne(b@O*oF`)M0E!f}jg$F}CW_=}6R zJqGmBwt%M0aO5Fd5$zeBmo4npQPVem&pkJm6$01B4&iSh1Kuy`?$}eA8u+YtD8$GK zw-o(YRBU?&^Mmtr#ts$hr8TEGh_$fOQ 2aN|sc+h!1hQn^B}$NW!T7BIw6 z?r?F;rzESCjnRZ)sY#a-X(%@izpDdZtSZQnpq(!)if|292L^9a;78IWgm)M`>mnl6 zj_u`>7|RFliD(=W@Hkvo}MAcnzOC5%sQ)*E5qi_dVKd&(|&&Byi#?#Bi!xTbh=q zqpAlNxBf(8e^6??{ISKISKt-#N)Ab1KOuxFKx*(SXAXIm9Dy(TP98Y}r#~T!R~S@% zW_DjP&>-jKEq!o4nT%n>%d)lO(sG;f_BuB&f;+qVuGi{%Hdj{YTsHw7;+<+4ox*?% zIC=~YK)edX^h>8#{F(zC+2Bnc{MJRQ8zMYIx&SgFt#%VbGgZU24TxDX!;j{<#*H~H zgaMa|gzg&bv?|v-aLs2JKdN1pHE0NT^dX>U!D$K#E0U-`I)mhyoRzIUQCgmVob}SW z^mV3k;AeW);= D;TSKO-00oT=_<#Sc z ?FjNUti8lKi!I zq|N^!qIl~V8ek@Z2_X2p&3_vefRds?L=aLnAoBlMllU)|Ef6_1AQRbt>ahH|<~1Zq z4M+{$5e#Wn0}=xd?x7(o_t3 wa-~j*sBIUov?>~t$f4bu!_;+^*{}eqT zf&@S^NV+-@8T_C0jX#}85dOQ9fBInkr`qwa_w*OJ adVH z8XyQFNDd^1SiNom#s47uf1m!}^J^%8kbD{-9wbBqi2Fy7vo&6Wj7;;lQM$ix;(sDG zf8GHe1XUAAME)1(hXDZK{$&|#NywHakecE@9nn8sWy=8}1S&u>TxA8=R|E+Fpuaw< OU;A!t@~>(I;J*NW+bVwm delta 11550 zcmc(FWmsG7(k_q|cbDSD-QC^Yt+)ku4Hlp{v^W%p;_mKFX`#5gyB0fi?{DvZ@4NRo zf6vNwWhGfNPqHTS%-nO&Jbgi$uRsDR%K_eCLO?*kLTm@y>#!U|ma{-YK R@kSZJC&$U<<{98hRS|7#6^#QY|3@FHle9y-$n^H$QIXAuE_ Jp)FDY$a3~{HqaJlrS~F-Dl3t zd7sP{TtiB)!yh5)zugNe7;V8HF<4)wa(49-xn!V zCeO@-JVkip!qg0Y&~c4P^GdkUDOBN`OaMPCIPL}uDHSR%Mr!8S_&&2~fBQl-dwK87 zAy*X^?mG5E HKR87twXkP8mqT0bDhkHI` z(^{+{s%n{vDuMo% 3`xv%uTQbYkj@NFTK6P~9~gRzOBP?{OgUv_gF4 zeQrhQB;Vm3YNi7y589#Q*H%l9ORDcr3k$4XM;&`hpr!6z06D5BLheNaF#+{<2VfPV zSRn6MeVf1%iClt4FfdolXoSzL(!O9QxenpbRz~lN1UZK#W2{rkES#25GLy`^IXvMA zu2+4t=6h{k9rurX;)mK)lXxSL0n`Q0Iw-LdZzpSNo=F+!FFrW_P-a#276QT!_0uL4 zDd<%Gr8l8@GlSC!zlor!@L1kD5J8H-inX_QT!6YEA$%l>ZkQ%?y>qn!NY#L$%FS+v zuD4pD*_x% @p)oTr z%O--e>oN~XqTplmvf{-2ww4OVN0$pw>kegNgBTPp)h<8fsg7hs##9E%YD|Su@DJu^ zTUWMX8kx^%efsKM^mx*qL_3Cgew#`NlpgW5@xF7)q$ZK s zcYVw5%U-O$eGNK=coMR6fK ;h&7efgC3&-4DUf3uRt*g_OF0-fI%<>1<|_tl+v1V z7>J*I$V+?t4#K10T&yCzE~ws#u_hh+h;NlW%A{EvH~Sqc0*jt@$Q@!OGYccXb;HtU z(WW~Hrje1C5oD|xb4)31Oi8LmsD*wkz~< dZupkh3SyQ1r*7eDMe@$O%lUmRp zQR9sOP(_@%BQ!Jf#}t<%2y9A3dXK-`(anl49y?S(1z@7YaSYGOQ_%MEL{S=rMdTDI z-CSK2)G3T1Gt?8NaMH!h(FB~iS;{XPT;+*K2noJuDyx+gG)N}Oz1JhJQ=FQZ{NiV1 zrPRSxw@e&$JlF63cv*e??CWUol_-jlha1OB{o8vK2Vb^Z2NSDD(2rlvyHg5N`^1En z+$~yK%gm4P4BShk>zvYL-JdF3;|{;Ne<3uwCGKfS5sGpZ+~;5Xr~|HxvMPF+)>&M+ z^4{E~MNZjCc7?++e`%qkDa~Q%S7Ow$gGKf?nZ`X2d v!;yM}gFagCn&_e9d=W1XY7dhD3dg1y67c4zRwY`mTGqX#)1*w@Mkwiqr;hvQ&_ zd^I6umD2 ?M5;Aby0bNoDdX+whc*{vX9V z(whmSFMX5IzP*6y(K+?ax0w_f`kcOaMQF1?TCd@Vfc`mFTnQwx0{4nN5w_5DU{7O2 zOH7HP{E|x0QC?P^S#NgOU9Ii3Zg4K}K75>gr$}oE^(D0SOkdWfrd`u8 3Vkh-xg`<9ytKD=du;qVzkV-4qAyzU zQbP9uaC7y4VG1c|r{GH1uu53S#!6Tyj3cDKq`~BGS5Wkz|35kJ-zg9D|0n1DJLMt$ z#$AkI2A5-RARwNT5pJLeL0Se%o06D*QX4}0r1_L@GeVMT2()RjM`-D^sXx}CXb@B0 zAf=igv9N6lV}D;=VT<`R$3m>(L4-c&vis%1YlpIywK?Z`nl~mGqZ~6#@t_Ynx!1w7 zZ4#|C_`1G~{zhg$NBN@lETJ?V;P2RNskhR!{oVxQDihfu*bseK8N_Wz|7K g}Uk(ANoxR666~ho66+?rrsBCj3-t%L-dWBd9yB1BXKMdr3o_Al2a`n;RdE|>o zH=fJ1)lO(KNg%p~EQq^M(TB>M+)ex`a&!0k*3@a7Q|%;N{`pwM!V0pgYI(2D7S+A% zboXL3nk=bXi<~fPG=zYltKd-dbYj#tFM|0;=-ZwdZEdMgGgc`?=#8XrV7HaJoeOQ6 z3vec{%G8p!5t?+Nm~=M9G-VADI5d>%he9dLp+9gZW-o+D0pu7l AanLj~bdV=l5cFhzL9T+`%Z(1$GL=2_xs;!lT{ZIY887 zf5_yAU-D1DwhD{X`U0oXu|!{;t;z)Uzz~Jb%UmY>oESCZl#DNK((zS0D7@ZBPG!F3 zBAU?;_b{5xhCAi^?IXY)1k4k%7dR T(@dqe5Egu zS%@IOfe!N5iAQk~qm0>tT9sRW9zSyqbH7Eda?@VySu8JqQLKGAIuTH+{%Pu^yjNi| zVsvpDT%vvtb*Jp^N2!ZNWD|{EOUzb~Pbk*GvRS@k;Fw!yE_!COv^D!e{#X+8Yaw?W zDNb4(ECOemBAhP7C|_oP-#>dq%Hh1>Rf)@ TcBC%Y0fw^`jwz|Ci>6XH-13@xWU^^h` z4l-1iM}!{SY_5frKTa1){HAB99@epYVylqmAx?me*83S_#6~HI;up<+AYQvS$9g$5 zPg;%QNF_hjQ(l-p%U<~}FFOsZAH17W7f2rf{0ldTSm^q-;W3F9!G5NBxYB<4P)v2s z#50*XW24VPBE)P}FS}idwlM5oBkmn;bC&_hBsFO@d7)vziVVU%LE4PGf;;$S>{MF& z9tnrM(U-S>N}(LL#>-z&&-kF &RTZHjHWJN4LO$uX4DS0UeH_~O`mnec6^R?QLj9k9o*DAULIH Odq<#w~l#2;p>DJ-$JP6 zow#r^wfDfBMaIf+f*>qh>e3k4uF{t$Di$H}G1W#8MRUvoM}Rpou~yat-H=}?fCX=9 zY8YViP00fbww5gAu$ynzQ1xl82M$qjj@Hn|<3tOy+Dp~fDDW{EIkj~p>XqZl@NnLT zg{iZbzuU;7uZ7)|Su5H|F4HhaWMjV{@f5MiiMd2EQNVF&0(EAJ_SE!QjMYn%r*?5Y z&;w&ez%0BKw{JSK&k6GSQRt8q$sA5Yomz;~p<(%(Wl(J1<3O|0aLFYBgO=KVUG>vI zt)yUnNkjm(m8ukIj=XXH5X7Fak$UA;uZXM#k)KOBRoGBgDMi;)`6k%uPHl5J9OojY z%~+Q}s@=H20Tdp##hzjQh*hemLd EZ_a3+HE4OP-_RzW~cK+Nr69|DU;h(gCd0uDdD9x1Ln_ O@ix1{3Ol_ zUBmYeqzdF#yGpH3&+&~0Q%+W~MPgSI7dRlRzIDmXc93$;Tsgh&lD)4p3bfOp{dfMA zth;RAQ5f<>1%bJdNr^@>V9TP>9V_SYeZ&alC#MJ1uDAM6LemHPlbjw*aix1gBI@xF zykNr5G_XCxAii8deWZOy@gjCE%#wjr)a5g@Nj-}CQsCChZOk+s(FTEsH|1m6+Cn|! z{4A2ZJ7|`L!i|%ZOVs#R0b1K7Y1{hy=|R(PA8vLtzH+xcZ;s5Gli09iXshiuRYvxR zmt5$%TsVGy^k@50Xr1pZm4PG(9-vhT1lSn)Ge1N9* )<4JD0Pi4Gl` z4iao051RVp`sKTVO~2RWB&@EejO_Ou>|W+mCKOVKOio$7Io}lC=S-8K l?TF!Lnjq7vDpH&-cz!`qi8OF%P-#DTGY)E4%TQrwC3_3oGM1cJ+GX4F! z5jznGWrCoJM1`YHsCP Rv7-PX}Di`F4kA`B(Ev}u##640ED3Ec#+>+jKr;g z#1?=%pbv_sK15a|{*{X{?;mh0Oib@H9l%IjB7$N1y1>|SbvfI1>Qw!HDR>>I!KHR? zfn?mpFxuaifCk5rYNmrGMid@~)3Z`4P3Chtf2)r~H2nw@@wk@(l~_o4# q3iq~s-=oas=mr0LLL|k@iF5rw_>4pIYcHs@lS}t^i z7He~?*^o4wut(Dy*hO39lhi0>fB3G@pV^k&NH+TE*y>6`ZDIB8r_V;Ug3RtO32bLJ zT=~{ X0}GQF=?knctKGx47ZS((mA;4ImEQ`FT59KG!5eT)22R?V$>I- zjWThup_jCvQevZ0%Fe&qn^Uj>>E~ yMeRg+CzM(K exoLN1>+!k&DnNkZEU)N`;(#@wH=6Xe`=dt~@ZsPtN z#E_{0B2K{%pm(`E7LMNNk+61TQ1nahl1|ICjV-2*dzOy?h^H2p!wgXavw7 S-3#o9US6KcTto^%4;Yg5wu`9K6dRj&vR5V8XzpEYfsWr_ru=G6Q>=NIPmxorGO= z5I#@GASX>J9h=}F^h1q2=#C}yxvWT-s|laX3FBF{CrtT|DV{y&tmMf*v|)AyoYAZ> zbR`49-O;YCzb0;U43ALqOg&kjIkr2q1ba2LJw;x2oo)tqzs<|YN_~r--VdQu_$nBJ zYdtB4in`|+Jb>ob&aE*LG{ua)spw|QmrXmO1j_fPTTW{a(h8jn+$=7l&XoUUuAR}; z{4D &jaJ#!}pTN9!Z2Uq4G7)CxpuZ#7^*!<|eAGuv*p2ImK{`v?AcZ@7Xs&p|cC zo*+zF^Q};~?6{KP&&f5;;tC67Hy1)t3o57QIKim#OKf7|2G0R?c*Y_>sq;c25}pq- z46xdRVrz#}4%F8x>$2zz&_kKH(PJVh(9bKTce{7vuWj#K5{yydNNZey1*%n~%SBu^ zR(vH*A-w41sy`ZaxcM@Jn6X-V;0>@b%Rwpn_y|s`KdUXI5hf@aR*x&bHv9k+?|t=Q z;M8XCu&+IL6SI~nVrX1ASzKM!Xk!5 AmoF(Zg1v;bl=8<*;=D-;(Dd+x zO)BJ&I64f1GHS@jDN$Kq%{l0qE5G@6Y=rgT*3XOAdPSDsy-y8CHzDq1H6za^J_qgk z ~bf0G-X`oJhuT(F0 zc~<#7NiLZjIzw5^ny2*ww}wHJ&4fD?<}#EMlPgimxw_Ks*Av2@Adur`qisx^Pd4}p z+_vi=ASnNpXd0O)02lwncVB-M&=9=_3EJ17jQDz8!qeE!5oqqh=mNB_Pg=I0V#XY- z)G9tzPE02qk3Z(F_Ui_JngdvOW#enL%jh|<<|`z|ezZOsZd!}?e4Amn{G$Rv2G`?; zhwA0>(&&8fG^;Z-_}1b}ftR;oR7Xl%)Ti(H)Hsxc3P18e^ztqEG@thJ;$>^ifwrzm zS|TBYuwlVke8d9z`;Lyu&2qpE2jGB6Or${{VY2$NmW2*uRxuda6}GPd8wsXJ=a $K!jd8~M_~noqhZTL`R=bog#ns%mo~4q;5Y6YMRz5By0Lw+hjt^2 zqRuB83;+kBz(zrJp}GW$qt(F0j#7J~ 4LH-2g!Jj5?nQJ=(z~TYa zZy;ZNc@<0h4Yz9GEo*1jpiV`toB$0gAyes$Uf}*r8S)+tTJso^aDERgY8e>`ZcdjA zxhzXw$6)&|WMb98C@K^VncPP*oHr3~AbL=B`584(R{&qOf2pNnyT_)KIN9-*M>jUa z5`TaLf!_$89~~4sL!yLOHpY_mh?4d7F)lbIOl+8Ob2kyl11C?Od&kdBZ}*# ``*tHuNmL)yz5t!>`KP?npJY^3JZt3LAGcx-B#JxM%AVGQ$~aKIq{pRh?85 zeEre()wG^ZHG@G{YR)2=m%nqaF~%@L#5w^C0=$Sg43;qr6iMD__-!o}%^xryZJ87I zQ!*{?yIt30+0-VNBkw61-lzaCYBCMAm>!BbedZ4)_WmwZ(fA)if+xR)23m^}|EcG7 zKO5G)Gtr0=Qa=HociXPAk_PJUeH3e%Y!LnU=_7DT*q`Z&mW%CE%Ekd>{cU$O9&xgT z@zkvBJ)#RSAmkWJKAS`sH3Gs?-3#)Xq<4MXFd%Hm@eJnAZfkkPEqO*J?1!(rDC!lv zkiDLjOkB*J-Obfpoz0EynEvvP(G=w3= Io@e< z1+CboQq)g!_O7+O7& >iZ%ULH=_W*5>xDS4$I9psp#xRX|Ians5>SWM-UK%PZeHKM0z@m#YlE zKF;nsytS{XIMb&zs87|AnPeIztaEAs<8VU-adpW$v{VNMt$L^sFx=o1PIk=`tbGV( zx+@>*ORBvx65H )X4%7wN*)kE`X{#tURG~MW){h-qBg3a $U70rle7y4U1olCk|kw z>UJPV6^|1?$@rqivy-~7p=O(!q718A61vYaG}FF3S n dM6a19?_2>M$h 6v!d;u@U z5I Wj>tYd}KF|x5p<+Sg9m8+~w-2x`$9v&gmcBwCe zMSL*Dg?6f|oJu^?oN4rZ4BX<2_JyG@!G w&Q~u%|VaNVdR9sttofGsKG!?0W z*K~pYaZXzwMR%tcEi=te&wA*Rz!vangFd6H<|F`1m~UHMR~%_4uVr1fv9#SR6sQs$ zfc_|n=+Sywh^7bZvc*xpBRh8y$a6p(&T)V)*6U@!cZDwM0%2XlKVgK!QG$-xhr~EV zX=m0V-k}Aj3I`8cUQ|*ydo(oC@}5v7(E|Ofddhp*^^}|z13EpjSnlh-9$(x(;8tLe z1Apmn;SZOT8JZ;Mk<6<~1&T6!P~*W<3=S!k7)fFl)1;Z@-R0>ZWS7V?ykrN%EyGyM z*9X}0zUfJh07c8RP?M0<_a+R44fnSO%Viofo%KSj+%3a?>2VOw;OF#xq$iO?Cb=sm zz)OmOW>12mT_NHRI*}+^yvggP4ry4mjrH-zbUlfAAAiCrPmd&*rpVecKA_M!0H&u2 z#ev%2Dc1DhDJNS*tuxhb?pUxcl-DP!EHGXzl2PY}0bM;dY4{5AaGGvZOe^}2INP|f z)=t@YTohneVx@BR;O^gHG |a29*>P$nZ1YcOvVd_v&~m$3 zN;8KP3S% N;Zaz=9fV>1n7^6XVzsQ@-X`G4?ZheC?i1&NkKI z7*aC=DQMCe`_VJ)lcut*+p_F*b0z7HcTWdSIrcoY_G G9I)d>C6!`SZPxV{V!75~Hd#6T!4Y)H>x^5q!At0{NARw?`i)t1z01oJPaQ&ZB zFpv#O-jI;zI1b5n1HxvbLh=)P &4Z&{t|$B)vvqN)w`><`DS
@}gpGPEJpmNw zo~O4
HSKPl?fs7Cvhq!kg-BdvX8JhRLlsRO=9c>T zhKnkReRXvz`O%CC@liUl^+9VJb> z-z?N}bM6&+K}E!xaMw}3( lEi?f+YJ^{2gS79gE(}PucqA %AUYp4_ H(~_C zx(ZqPa&O-SpNu~ZW8$k=uN$4~aZ4m^jSU(Ew~VqgmO*~DOhktlEhbY?os;esPs#Oi z%(TOG-U?lKph`jbb_v6|op!v&cX0RkI2aZ!xTVd}Z^R7p=)@U$zljS)Zs1)77wa;4 ztbkmBFt_&{kZ;X$`;u0_b#{WXT6Hi{N~YAX&AZF;t5cSZ6U!nBE)q5nHP|aNO4wL- z`kNRcTz;Rh-bhVdUQIZ13Ut+elu`TxS?!@b8D7gCWr~z^P%K=L$=M+%8@5&9rQ?!u zjyzR1A_W`>dJ8irl%h+mR5TDat|mSao-O UCn f7sMbz?hFABq2Nzz97H=cl6P}VgnvN5p=Tt9onyHfhl&zZOFUR z&~A4XmW< psz)H-;QUTp#FJ*J5b97hVT?)MilQt%34| zSstxiu!#3VQlC%1oWXs*)b#LLIgk_$Yo39{ZfSkFWa6+lJFJHi#S$k<$;s7~51?@W zY*aK>2peGoim~Be3Kfo0^$0q35`xIO?D&hyiZb23Bn|*ak7i{GFKeq-JJsCAwJl z0e|YTo#Z6>M}5^jxsO%W9C4_|P-3PEgF7^2BS(7Fu7fw>qyCQ0Gq<1c4U_i?G7R4g zc4t*S5LabC?2A*Us(#CXEWh~`LnpH1S>7Kg>BcdS^e~v5lKK*n$5%TYVNK*(_7qr{ z3Ob2Cph~4_1LG4|eCg-L{hFSUj~?02-UQEr(2)6aJQI5clU$2JRE@{IiZ;;i#|H~H zDSu$5-<;cN>)mtp^+y}bV$P@}Bi3oJ-IuDLPX5zNte+3*8?-}ab4Ww9)sbqKiz{m~ z?6FuCsy~M}ylEPJK8rvFitL264Zw+i%K~|uIWS=HDx{|svpbemFQ08{XM@f*EMD++ zN}dp6Zt-Pj%)K2LJ+E~`Boqmiy9p=C3#)g#>7y=T9rWzCR-}vyo7-zOzJ{KSM&4^{ zMY3EE(8W(SfjjocSD##XuEXw!sEP1nI}q8v{F+Xmc;|AuuXNlpx|?w%QEiDQ*aKP* z!SVEUaHw3ayZrh1<35PaZ(qJ#p3!u@#duJ5Uz?OLbh___VkM^A icuU9p26n_MEg zI&^syuwBSkuU4p|{M;p6!!Ly#$O{UWy19t~9_wl ?K0efaW-jV+B4(w+rcBwe9SDY}^&i;{TVcg>-x`*>Q_sn7| zF_jQ?5yl<0L3v=)dv3(ta3y@nqYvlt3GgQ!{VtZGc5||pUz_R>KFM`506Ng? ^^X~P@%^);$$(sC8z)=_Wthvj X+Dx#>4!7Pyz!>Au8G5@05BJx!a?H2O_T z_KJKGBP#He!nZps@C`s(l8Jw@{Yv-?8_ouKKxA9bmK{d7#eSWLv$Mjr*GT_HO$gL9 z^1JGRgu;aQzYlS~S^xqPf+Tre7C=J$mjR5|D)RRn;_u^C;PqKQnM4jiMf|&Z`ZI
g&@&IhM|JD=vqlfg`f&7ogW3n ?a=Zcn zo9w^!8~*6QkO2O4A85#a-{0SP^*_Q+r2i6rW!Z7a{u}@HM>vGyU&2BZ0JMMnJ^$#q z{+*HgqY*0%_zOSxza8tpu@8SVXT<>jZ!Y2=RD?3`-#qp21^S-_p(OscV6u}O0Ouc` z^EZ_FTjzh=%SsmT56qeDD+fR%{dWj>z3%hs=|umK{Fm&bG9bA{20)ChEcf;mvO++h RzdjgW$pS3ZSGE%3{{U%L4J-fv diff --git a/docs/examples/UseQuoteApi/UseQuoteApi.csproj b/docs/examples/UseQuoteApi/UseQuoteApi.csproj index 44a2c3f2c..0f2cb1061 100644 --- a/docs/examples/UseQuoteApi/UseQuoteApi.csproj +++ b/docs/examples/UseQuoteApi/UseQuoteApi.csproj @@ -7,8 +7,8 @@ - - + +