下面你可以看到我的C#方法来计算每个点的布林带(移动平均线,上行带,下行带).
如您所见,此方法使用2 for循环来计算移动平均值的移动标准偏差.它曾经包含一个额外的循环来计算过去n个时期的移动平均值.我可以通过在循环开始时将新的点值添加到total_average并删除循环结束时的i-n点值来删除.
我现在的问题基本上是:我可以用移动平均线管理的类似方式删除剩余的内部循环吗?
public static void AddBollingerBands(SortedList<DateTime, Dictionary<string, double>> data, int period, int factor)
{
double total_average = 0;
for (int i = 0; i < data.Count(); i++)
{
total_average += data.Values[i]["close"];
if (i >= period - 1)
{
double total_bollinger = 0;
double average = total_average / period;
for (int x = i; x > (i - period); x--)
{
total_bollinger += Math.Pow(data.Values[x]["close"] - average, 2);
}
double stdev = Math.Sqrt(total_bollinger / period);
data.Values[i]["bollinger_average"] = average;
data.Values[i]["bollinger_top"] = …
Run Code Online (Sandbox Code Playgroud) 我有一个包含月度财务数据的数据框:
In [89]: vfiax_monthly.head()
Out[89]:
year month day d open close high low volume aclose
2003-01-31 2003 1 31 731246 64.95 64.95 64.95 64.95 0 64.95
2003-02-28 2003 2 28 731274 63.98 63.98 63.98 63.98 0 63.98
2003-03-31 2003 3 31 731305 64.59 64.59 64.59 64.59 0 64.59
2003-04-30 2003 4 30 731335 69.93 69.93 69.93 69.93 0 69.93
2003-05-30 2003 5 30 731365 73.61 73.61 73.61 73.61 0 73.61
Run Code Online (Sandbox Code Playgroud)
我正试图计算这样的回报:
In [90]: returns = (vfiax_monthly.open[1:] - vfiax_monthly.open[:-1])/vfiax_monthly.open[1:]
Run Code Online (Sandbox Code Playgroud)
但我只得到了零:
In …
Run Code Online (Sandbox Code Playgroud) 给出一组非常类似于Motley Fool CAPS系统的数据,其中个人用户输入各种股票的买入和卖出建议.我想这样做是显示每个建议,我想一些如何率(1-5)是否是很好的预测<5>(即相关系数= 1)未来股价(或EPS或其他)的或者是一个可怕的预测者(即相关系数= -1)或介于两者之间的某个地方.
每个推荐都标记给特定用户,以便可以随时跟踪.我还可以根据sp500价格等因素跟踪市场方向(看涨/看跌).我认为在模型中有意义的组件将是:
user
direction (long/short)
market direction
sector of stock
Run Code Online (Sandbox Code Playgroud)
我们的想法是,一些用户在牛市中比熊市更好(反之亦然),有些用户在空头方面比在多头方面更好 - 然后是上述组合.我可以自动标记市场方向和行业(基于当时的市场和推荐的股权).
我的想法是,我可以提供一系列屏幕,并允许我通过显示特定时间段内的可用数据绝对值,市场和扇区输出性能来对每个单独的推荐进行排名.我会按照详细的清单对股票进行排名,以便排名尽可能客观.我的假设是单个用户的权利不超过57% - 但谁知道.
我可以加载系统并说"让我们将推荐排名为90天前的股票价值预测"; 这将代表一组非常明确的排名.
现在这里是关键 - 我想创建某种机器学习算法,可以在一系列时间内识别模式,以便当推荐流入应用程序时,我们保持该库存的排名(即类似于相关系数).该建议的可能性(除了过去的一系列建议)将影响价格.
现在这里是超级难题.我从未参加过AI课程/阅读AI书籍/从不介意机器学习.所以我想寻找指导 - 我可以适应的类似系统的样本或描述.寻找信息或任何一般帮助的地方.或者甚至推动我朝着正确的方向开始......
我的希望是与F#来实现这一点,并能够给我的朋友有一个新的技能在F#设置与机器学习的实现和潜在的东西(应用程序/源)我可以包括在高科技投资组合或博客空间留下深刻的印象;
提前感谢您的任何建议.
f# finance artificial-intelligence classification machine-learning
金融行业有一个备受瞩目的开源项目- 特别是投资银行领域 - 我可以做出贡献(理想情况下是.NET)吗?我想在这个领域加强我的简历.
我更喜欢算法交易领域的某些东西,但我对任何路线都是开放的(例如前台办公应用程序等).
我想知道使用GPGPU可以实现哪种财务应用程序.我知道使用CUDA在GPGPU上使用蒙特卡罗模拟进行期权定价/股票价格估算.有人可以枚举将GPGPU用于财务领域的任何应用程序的各种可能性,
是否有API可以让我访问我的AMEX交易?Mint或任何其他财务网站如何导出我的数据?如果是这样,它是免费的吗?
这是我在网上发现的一篇有趣的文章.
它讨论了该公司如何能够在托管环境中解析大量财务数据,主要是通过对象重用和避免不可变因素(如字符串).然后他们继续说明他们的程序在连续操作阶段没有做任何GC.
这是非常令人印象深刻的,我想知道这里是否有其他人有关于如何做到这一点的更详细的指导.首先,我想知道如何避免使用字符串,当消息中的某些数据是字符串时,无论客户端应用程序正在查看消息,都希望传递这些字符串?另外,你在启动阶段分配了什么?你怎么知道它够了?声明一大块内存并保留对它的引用以便GC不会启动是否很简单?客户端应用程序使用这些消息怎么样?是否还需要按照这些严格的标准编写?
另外,我需要一个特殊工具来查看内存吗?到目前为止,我一直在使用SciTech内存分析器.
有人可以提供一个如何使用QuantLib复制Excel/OpenOffice YIELD
和PRICE
函数的示例吗?
我有一些例子,但我还不太清楚所有的设置.当我尝试更改某些值时,我会得到零或一些荒谬的值.理想情况下,我想创建与YIELD/PRICE函数等效的c ++.
在我的第一步中,我不需要在Excel日期建模中复制缺陷.我可以等到以后才能生成完全相同的副本.虽然如果你知道这也很棒.
PRICE
例如,在OpenOffice中:
PRICE("2008-02-15","2010-11-15",5%,7%,100,2,1) = 95.068419616675
Run Code Online (Sandbox Code Playgroud)
我的QuantLib代码能够获得95.066759
有点偏差.至少我有基本的价格函数,我想现在得到一个完全匹配的结果.
我不能轻易包含所有包装代码,但基本代码如下.
#include <ql/time/calendar.hpp>
#include <ql/time/daycounters/actualactual.hpp>
#include <ql/time/daycounters/actual365fixed.hpp>
#include <ql/time/schedule.hpp>
#include <ql/time/calendars/unitedstates.hpp>
#include <ql/time/calendars/nullcalendar.hpp>
#include <ql/settings.hpp>
#include <ql/handle.hpp>
#include <ql/termstructures/yield/flatforward.hpp>
#include <ql/instruments/bonds/fixedratebond.hpp>
#include <ql/pricingengines/bond/discountingbondengine.hpp>
#include <ql/utilities/dataformatters.hpp>
#include <iostream>
#include <iomanip>
#include "boost/date_time/gregorian/gregorian.hpp"
using namespace QuantLib;
Date convert_date( boost::gregorian::date const & date )
{
unsigned mon = date.month();
return Date( date.day(), Month(mon), date.year() );
}
shared_ptr<Bond> create_bond( boost::gregorian::date const & settlement_, boost::gregorian::date const & …
Run Code Online (Sandbox Code Playgroud) Q1:将元信息保存到数据帧的最佳实践是什么?我知道以下编码实践
import pandas as pd
df = pd.DataFrame([])
df.currency = 'USD'
df.measure = 'Price'
df.frequency = 'daily'
Run Code Online (Sandbox Code Playgroud)
但正如这篇文章将元信息/元数据添加到 Pandas DataFrame 中所述,这与通过应用诸如“groupby、pivot、join 或 loc”等函数而丢失信息的风险相关联,因为它们可能会返回“一个没有元数据的新 DataFrame随附的”。
这仍然有效还是在此期间对元信息处理进行了更新?为此目的对熊猫进行子类化是一种很好的编码习惯吗?
Q2:什么是替代编码实践?
我不认为构建一个单独的对象是非常合适的。使用 Multiindex 也不能说服我。假设我想将带有价格的数据框除以带有收益的数据框。使用 Multiindices 将非常复杂。
#define price DataFrame
p_index = pd.MultiIndex.from_tuples([['Apple', 'price', 'daily'],['MSFT', 'price', 'daily']])
price = pd.DataFrame([[90, 20], [85, 30], [70, 25]], columns=p_index)
# define earnings dataframe
e_index = pd.MultiIndex.from_tuples(
[['Apple', 'earnings', 'daily'], ['MSFT', 'earnings', 'daily']])
earnings=pd.DataFrame([[5000, 2000], [5800, 2200], [5100, 3000]],
columns=e_index)
price.divide(earnings.values, level=1, axis=0)
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我什至不确保公司指数真的匹配。我可能需要调用 pd.DataFrame.reindex() 或类似的。在我看来,这不是一个好的编码实践。 …
更新:不确定在没有某种形式的循环的情况下是否可行,但np.where
在此处不起作用.如果答案是"你不能",那就这样吧.如果可以,它可以使用来自的东西scipy.signal
.
我想在下面的代码中对循环进行矢量化,但由于输出的递归性质,不确定如何.
走我当前的设置:
获取起始金额(100万美元)和季度美元分配(5,000美元):
dist = 5000.
v0 = float(1e6)
Run Code Online (Sandbox Code Playgroud)
在每月频率生成一些随机安全/帐户返回(十进制形式):
r = pd.Series(np.random.rand(12) * .01,
index=pd.date_range('2017', freq='M', periods=12))
Run Code Online (Sandbox Code Playgroud)
创建一个包含月度帐户值的空系列:
value = pd.Series(np.empty_like(r), index=r.index)
Run Code Online (Sandbox Code Playgroud)
添加"开始月份" value
.这个标签将包含v0
.
from pandas.tseries import offsets
value = (value.append(Series(v0, index=[value.index[0] - offsets.MonthEnd(1)]))
.sort_index())
Run Code Online (Sandbox Code Playgroud)
我想摆脱的循环在这里:
for date in value.index[1:]:
if date.is_quarter_end:
value.loc[date] = value.loc[date - offsets.MonthEnd(1)] \
* (1 + r.loc[date]) - dist
else:
value.loc[date] = value.loc[date - offsets.MonthEnd(1)] \
* (1 + r.loc[date])
Run Code Online (Sandbox Code Playgroud)
合并代码:
import pandas …
Run Code Online (Sandbox Code Playgroud) finance ×10
c# ×3
pandas ×3
python ×2
algorithm ×1
api ×1
c++ ×1
credit-card ×1
cuda ×1
divide ×1
f# ×1
gpgpu ×1
metadata ×1
open-source ×1
python-3.x ×1
quantlib ×1
recursion ×1
web-services ×1