首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数理统计股票扫描器

数理统计股票扫描器
EN

Stack Overflow用户
提问于 2011-06-07 17:04:13
回答 2查看 2.7K关注 0票数 3

我的目标是用Mathematica编写一个算法,搜索当前价格低于或高于平均值2标准差的股票。我从昨天开始学习这个程序,但从那时起我就一直在网上寻找帮助。我有代码,但在这过程中我会出错。有人能帮我吗?下面是我的当前代码

代码语言:javascript
运行
复制
Today = Date[]
StartDate = Today-{0,3,0,0,0,0}
NYSEMem = FinancialData["NYSE","Members"]
CurrentPrice = FinancialData[NYSEMem,"Price"]
HistoricalPrice = FinancialData[NYSEMem,{{StartDate},{Today}}]
StandardDeviation$ = StandardDeviation[HistoricalPrice]
MeanPrice = Mean[HistoricalData]
SellSignal = [MeanPrice]-[StandardDeviation$]*2
BuySignal = [MeanPrice]+[StandardDeviation$]*2
If[CurrentPrice>SellSignal,"Sell",False]
If[CurrenPrice<BuySignal,"Buy",False]
EN

回答 2

Stack Overflow用户

发布于 2011-06-07 17:26:21

非常勇敢地跳入深海,但我建议你先学一些基本知识。你说你一直在“搜索互联网上的帮助”,但你有没有尝试过Mathematica的车载文档中心?它有数千页的帮助,只有一个按键的距离。

不管怎么说,关于您的代码,以下几点建议:

  • 不要以$结束变量。虽然原则上没有错误,但它们被用于系统变量。
  • SellSignal = [MeanPrice]-[StandardDeviation$]*2及其后面的一行包含函数调用括号,没有相应的函数名。你可能不打算把这些括号放在那里
  • ,False部件在If[CurrentPrice>SellSignal,"Sell",False]中和下一行是不必要的,可以在这里删除
  • 较早的日期计算可以更好地使用专用的DatePlus函数,该函数考虑到闰年等问题。
  • 您可能不想看到所有行的所有输出。您可以使用';‘来抑制输出(这也可以分离复合语句)
  • 乘法的星号是不必要的。一个空格就行,就像数学一样。a*b、a b、a 2、2 a和2a (没有空格)都是正确的乘法。
  • 您从一些电话中收到的数据包括价格和日期。你也试图平均日期,并找出他们的标准差。
  • 尽管允许以大写字母开头变量,但您最好避免这样做,以防止使用Mathematica自己的关键字(所有关键字都以大写字母开头)。
  • 我不认为你的买卖信号很聪明。当价格处于历史高位时,你可能会想到卖出,但当价格高于历史低点时,你就会这么做。
  • 买的也一样。另外,当当前价格介于两个信号之间时,程序提供了相互矛盾的建议。
  • 你需要一个结构来重复对每个纽约证券交易所会员的计算

一些非常基本的代码可以帮助您入门:

代码语言:javascript
运行
复制
StartDate = DatePlus[Date[], {-3, "Month"}];
NYSEMem = Select[FinancialData["NYSE", "Members"], (\[Not] StringMatchQ[#, ___ ~~ 
       "^" ~~ ___] &)]; (* Throw away indices *)
Do[
 currentPrice = Check[FinancialData[stock, "Price"], $Failed];
 historicalPrice = 
  Check[FinancialData[stock, {StartDate, Date[]}], $Failed];
 If[currentPrice == $Failed || historicalPrice == $Failed || 
   currentPrice == Missing["NotAvailable"] || 
   historicalPrice == Missing["NotAvailable"], 
  Continue[]]; (* Shamefully inadequate error handling *)
 standardDeviationPrice = StandardDeviation[historicalPrice[[All, 2]]];
 meanPrice = Mean[historicalPrice[[All, 2]]]; 
            (* Mean of the second column of the data matrix *)
 sellSignal = meanPrice + 2 standardDeviationPrice; 
             (* swapped + and - in these two lines, plug your own method here *)
 buySignal = meanPrice - 2 standardDeviationPrice;
 Print[stock, ": ", 
  If[currentPrice > sellSignal, "Sell", 
   If[currentPrice < buySignal, "Buy", "Neutral"]]];
 , {stock, NYSEMem}
 ]

请注意,Stackoverflow是为那些忠实地尽力对他们遇到的问题做一些研究的人设计的。我觉得你不符合这个标准。我的迫切要求是:阅读一些关于Mathematica的基本介绍性文章(例如快速入门核心语言概述)。

票数 4
EN

Stack Overflow用户

发布于 2011-06-07 18:47:53

在这里,您的程序正在运行:

代码语言:javascript
运行
复制
Today              = Date[];
StartDate          = Today - {0, 3, 0, 0, 0, 0};
NYSEMem            = FinancialData["NYSE", "Members"];
NYSEMem            = NYSEMem[[1000 ;; 1001]];
CurrentPrice       = FinancialData[#, "Price"] & /@ NYSEMem;
HistoricalPrice    = FinancialData[#, {StartDate, Today}] & /@ NYSEMem;
StandardDeviation$ = StandardDeviation[#[[All, 2]]] & /@ HistoricalPrice;
MeanPrice          = Mean[#[[All, 2]]] & /@ HistoricalPrice;
SellSignal         = MeanPrice - StandardDeviation$*2
BuySignal          = MeanPrice + StandardDeviation$*2
Do[
   If[CurrentPrice[[i]] > SellSignal[[i]], Print["Sell ", NYSEMem[[i]]]];
   If[CurrentPrice[[i]] < BuySignal[[i]],  Print["Buy ",  NYSEMem[[i]]]],
 {i, 2}]

但请注意,我只是修改了最小值,使它在不使用成语的情况下运行。--无论如何,这并不是一个好的程序。我这么做只是为了让你玩一玩,学习一些构造。

哈哈!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6268943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档