재테크 A2Z

미국직투 모멘텀투자 구글시트 자동화 본문

재테크

미국직투 모멘텀투자 구글시트 자동화

a2ztec 2025. 6. 30. 18:45

https://docs.google.com/spreadsheets/d/1yrocVMn2A8FJpNoYY9WmzhN5X55XUnda46DLlh3JiPA/edit?usp=sharing

 

JEPI_JEPQ_SCHG_SCHD_BIL_XLP

ABCDEFGHIJKLMNOPQRSTUVWXYZ모멘텀 기반 ETF 배당 재투자 전략ETF 순위 (최신)현재 날짜2025. 6. 29순위ETF 1M수익률3M수익률6M수익률 모멘텀스코어1SCHG1SCHG9.13%1.69%-1.03%9.78%29.78%2XLP1.28%-0.24%-0.29%0.75%3BILL-0.31%-0.31%-

docs.google.com

 

https://a2ztec.tistory.com/255

 

월말 모멘텀 기반 ETF 배당 재투자 전략

1. 전략 개요본 전략은 JEPI, JEPQ, SCHG, SCHD, BILL, XLP 6개 ETF를 대상으로 **월말 기준 모멘텀 점수(Momentum Score)**를 산출한 후, 다음 달 배당금 또는 현금 유입금을 가장 우수한 ETF에 재투자하는 방식입

a2ztec.tistory.com

 

 

챗지피티가 알려준 내용에 조금 이러저리 수정해서 만들어봤다. 

6개 ETF 중 모멘텀이 가장 좋은 ETF에 배당금을 몰빵하는 로직이다. 

 

제대로 모멘텀 하려면 비중조정도 해야 하는데 그게 잘 안되서 일단 여기까지만 해보고 잘되면 비중조정도 해봐야겠다.

 

 

6/30 결과

모멘텀 기반 ETF 배당 재투자 전략
    ETF 순위 (최신)          
현재 날짜 2025. 6. 30   순위 ETF 1M수익률 3M수익률 6M수익률 모멘텀스코어
1 SCHG   1 SCHG 9.13% 1.69% -1.03% 9.78%
2 9.78%   2 XLP 1.28% -0.24% -0.29% 0.75%
      3 BIL -0.31% -0.31% -0.03% -0.64%
      4 JEPQ 1.73% -6.70% -8.32% -13.29%
      5 JEPI 0.07% -6.36% -7.74% -14.04%
      6 SCHD 1.67% -8.02% -10.53% -16.89%

 

7/5 결과

 

function onOpen(){
  SpreadsheetApp.getUi()
    .createMenu('MomentumBot')
    .addItem('모멘텀 업데이트', 'updateMomentum')
    .addToUi();
}

function updateMomentum(){
  const ss = SpreadsheetApp.getActive();
  const dataSh = ss.getSheetByName('Data');
  const dashSh = ss.getSheetByName('Dashboard');

  const tickers = ['JEPI','JEPQ','BIL','SCHG','SCHD','XLP'];
  const cols = ['B','C','D','E','F','G']; // Data 시트에서의 ETF 컬럼
  const lastRow = dataSh.getLastRow();

  let scores = [];
  for (let i = 0; i < tickers.length; i++) {
    let close = dataSh.getRange(cols[i] + lastRow).getValue();
    let close1 = dataSh.getRange(cols[i] + (lastRow - 1)).getValue();
    let close3 = dataSh.getRange(cols[i] + (lastRow - 3)).getValue();
    let close6 = dataSh.getRange(cols[i] + (lastRow - 6)).getValue();

    let r1 = (close / close1) - 1;
    let r3 = (close / close3) - 1;
    let r6 = (close / close6) - 1;
    let score = r1 + r3 + r6;

    scores.push({ticker: tickers[i], r1: r1, r3: r3, r6: r6, score: score});
  }

  // 스코어 기준 내림차순 정렬
  scores.sort((a, b) => b.score - a.score);

  // Dashboard 업데이트
  dashSh.getRange("b2").setValue(Utilities.formatDate(new Date(), "GMT+9", "yyyy. M. d"));
  dashSh.getRange("b3").setValue(scores[0].ticker);
  dashSh.getRange("b4").setValue((scores[0].score * 100).toFixed(2) + "%");

  // 순위표 출력 시작 위치
  const startRow = 3;
  for (let i = 0; i < scores.length; i++) {
    let row = startRow + i;
    dashSh.getRange("D" + row).setValue(i + 1); // 순위
    dashSh.getRange("E" + row).setValue(scores[i].ticker);
    dashSh.getRange("F" + row).setValue((scores[i].r1 * 100).toFixed(2) + "%");
    dashSh.getRange("G" + row).setValue((scores[i].r3 * 100).toFixed(2) + "%");
    dashSh.getRange("H" + row).setValue((scores[i].r6 * 100).toFixed(2) + "%");
    dashSh.getRange("I" + row).setValue((scores[i].score * 100).toFixed(2) + "%");
  }

  SpreadsheetApp.getUi().alert("모멘텀 업데이트 완료! 추천 ETF: " + scores[0].ticker);
}