Очень смело прыгать прямо в глубокие воды, но я бы посоветовал сначала изучить основы.Вы говорите, что «искали помощь в Интернете», но пробовали ли вы встроенный в 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 (например, Начало работы и Обзор основного языка ).