Получайте оповещения о падении цен на акции

Уровень владения программированием : начинающий
Продолжительность : 5 минут
Тип проекта : Автоматизация с использованием триггера, срабатывающего по времени.

Цели

  • Поймите, для чего предназначено это решение.
  • Разберитесь, что делают службы Apps Script в рамках данного решения.
  • Настройте скрипт.
  • Запустите скрипт.

Об этом решении

Если вы приобрели акции, и их стоимость упала, вы можете продать эти акции, купить другие и получить налоговый вычет. Это называется «сбором налоговых убытков». Перечислите свои акции в таблице Google Sheets и получайте уведомления по электронной почте, если цена акции упадет ниже цены покупки.

Скриншот таблицы Google Sheets с котировками акций и уведомлением из Gmail.

Как это работает

В электронной таблице используется встроенная функция Google Finance в Google Sheets для получения текущих цен акций. Скрипт сравнивает цену покупки каждой акции с ее текущей ценой. Затем он отправляет вам по электронной почте список акций, цена которых упала ниже цены покупки. Вы можете настроить запуск скрипта с любой желаемой частотой.

Сервисы Apps Script

Данное решение использует следующие сервисы:

  • Сервис электронных таблиц – перебирает каждую акцию в списке и сравнивает цену акции с ценой покупки.
  • Сервис Gmail создает и отправляет электронные письма с информацией об акциях, цена которых упала ниже цены покупки.

Предварительные требования

Для использования этого примера необходимы следующие условия:

  • Для работы потребуется учетная запись Google (для учетных записей Google Workspace может потребоваться подтверждение администратора).
  • Веб-браузер с доступом в интернет.

Настройте скрипт

  1. Нажмите следующую кнопку, чтобы создать копию образца электронной таблицы « Уведомления об удержании налоговых убытков» . Проект Apps Script для этого решения прикреплен к электронной таблице.
    Сделать копию
  2. В скопированной электронной таблице обновите данные о своих акциях или используйте предоставленные тестовые данные.

Запустите скрипт

  1. В скопированной электронной таблице нажмите «Расширения» > «Apps Script» .
  2. В раскрывающемся списке функций выберите checkLosses .
  3. Нажмите «Выполнить» .
  4. При появлении запроса авторизуйте скрипт. Если на экране согласия OAuth отобразится предупреждение « Это приложение не проверено» , продолжите, выбрав «Дополнительно» > «Перейти к {Название проекта} (небезопасно)» .

  5. Проверьте свою электронную почту — там будет список акций, цена которых упала ниже цены покупки. Если вы не получили письмо, проверьте, не ниже ли цена каких-либо акций в вашем списке их цены покупки.

Создайте триггер, срабатывающий по времени.

  1. Вернуться к проекту сценария.
  2. Слева нажмите «Срабатывает .
  3. В правом нижнем углу нажмите «Добавить триггер» .
  4. В поле «Выберите, какую функцию запустить» убедитесь, что выбран параметр checkLosses .
  5. В поле «Выберите источник событий» выберите «Управляемый временем» .
  6. Укажите частоту запуска скрипта и нажмите «Сохранить» .

Просмотрите код

Чтобы просмотреть код Apps Script для этого решения, нажмите «Просмотреть исходный код» ниже:

Просмотреть исходный код

Code.gs

solutions/automations/tax-loss-harvest-alerts/Code.js
// To learn how to use this script, refer to the documentation:
// https://developers.google.com/apps-script/samples/automations/tax-loss-harvest-alerts

/*
Copyright 2022 Google LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

/**
 * Checks for losses in the sheet.
 */
function checkLosses() {
  // Pulls data from the spreadsheet
  const sheet =
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Calculations");
  const source = sheet.getRange("A:G");
  const data = source.getValues();

  //Prepares the email alert content
  let message = "Stocks: <br><br>";

  let send_message = false;

  console.log("starting loop");

  //Loops through the cells in the spreadsheet to find cells where the stock fell below purchase price
  let n = 0;
  for (const i in data) {
    //Skips the first row
    if (n++ === 0) continue;

    //Loads the current row
    const row = data[i];

    console.log(row[1]);
    console.log(row[6]);

    //Once at the end of the list, exits the loop
    if (row[1] === "") break;

    //If value is below purchase price, adds stock ticker and difference to list of tax loss opportunities
    if (row[6] < 0) {
      message += `${row[1]}: ${(Number.parseFloat(row[6].toString()) * 100).toFixed(2).toString()}%<br>`;
      send_message = true;
    }
  }
  if (!send_message) return;

  MailApp.sendEmail({
    to: SpreadsheetApp.getActiveSpreadsheet().getOwner().getEmail(),
    subject: "Tax-loss harvest",
    htmlBody: message,
  });
}

Авторы

Этот пример создан Джереми Глассенбергом, консультантом по управлению продуктами и стратегии платформы. Найти Джереми можно в Твиттере @jglassenberg .

Данный пример поддерживается компанией Google при содействии экспертов-разработчиков Google.

Следующие шаги