在深水中直跳非常勇敢,但我建议先尝试学习基础知识。您说您一直在“在互联网上寻求帮助”,但您是否尝试过 Mathematica 的机载文档中心?它有数千页的帮助,只需一键即可。
无论如何,关于您的代码,有一些提示:
- 不要以 $ 结束变量。虽然原则上没有错,但它们用于系统变量
- 行
SellSignal =
[MeanPrice]-[StandardDeviation$]*2
和它后面的行包含没有相应函数名的函数调用括号。您可能不打算将这些括号放在那里
,False
中和下一行的部分If[CurrentPrice>SellSignal,"Sell",False]
是不必要的,可以在这里删除
- 使用专用功能可以更好地完成较早的日期计算,该
DatePlus
功能考虑了闰年等因素
- 您可能不想看到所有行的所有输出。您可以使用 ';' 抑制输出 (它也起到分隔复合语句的作用)
- 乘法的星号是不必要的。一个空格就可以了,就像在数学中一样。a*b, ab, a 2, 2 a和2a(没有空格)都是正确的乘法。
- 您从某些电话中收到的数据包括价格和日期。您还试图平均日期并找到它们的标准偏差。
- 虽然允许以大写字母开头变量,但最好避免这样做,以防止使用 Mathematica 自己的关键字(都以大写字母开头)。
- 我不认为你的买卖信号很聪明。您可能会在价格处于历史高位时考虑卖出,但在价格高于历史低水位线时您会这样做。
- 买也一样。此外,当当前价格介于您的两个信号之间时,程序会提供相互矛盾的建议。
- 您需要一个结构来为每个 NYSE 成员重复计算
一些非常基本的代码可以帮助您入门:
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 的基本介绍性文本(例如Getting started和Core Language Overview)。