Exemple #1
0
def run_lsi_alert(tkLst, pgDB=None, **kwargs):
    for ky, va in kwargs.items():
        exec("{}=va".format(ky))
    print >> sys.stderr, "region={};dbname={};numLimit={};lang={}".format(
        region, dbname, numLimit, lang)

    if tkLst is None:
        (f, pgDB) = get_alert_list(dbname=dbname, numLimit=numLimit)
        numLimit = len(f['label'])
        ts_title = '智能伏羲 {} 晨間綜合快報:今日值得觀察股票名單如下: {}。\n接下來播報所選個股評估内容:\n'
        ts_disclaim = "\n以上名單,是經由一周内一百大熱絡交易股中選出。有關選股進出策咯在這兩天出現,并且回測的獲利為正向的前{}名,此一名單,並不代表本公司的任何持有部位,謝謝您的收聽。"
    else:
        (f, pgDB) = get_select_list(dbname=dbname, tkLst=tkLst)
        numLimit = len(f['label'])
        ts_title = '智能伏羲 {} 綜合快報:今日您的觀察股票名單如下: {}。\n接下來播報所選個股評估内容:\n'
        ts_disclaim = "\n以上名單,是經由您的觀察股中選出。有關選股進出策咯在這兩天出現的前{}名,此一名單,並不代表本公司的任何持有部位,謝謝您的收聽。"

    if region.upper() == "US":
        aTmp = f[['label', 'ticker']].apply(lambda x: '{}代號{}'.format(*x),
                                            axis=1)
    else:
        aTmp = f[['label']].apply(lambda x: '{}'.format(*x), axis=1)
    aStr = ", ".join(list(aTmp))
    print >> sys.stderr, aStr
    currDateWd = ymd2md(str(f['curr_date'][0]), lang=lang)

    comment_title = ts_title.format(currDateWd, aStr)
    comment_disclaim = ts_disclaim.format(numLimit)
    commentLst = f[[
        'comment_pricing', 'comment_ohlc', 'comment_pppscf', 'comment_fcst'
    ]].sum(axis=1)
    xstr = comment_title + "\n".join(commentLst) + comment_disclaim
    return xstr
Exemple #2
0
def generate_comment_header_en(f,
                               ts=None,
                               dotSign='.',
                               prcn=0,
                               usdSign='$',
                               udfLst=None,
                               lang="en",
                               mp3YN=False):
    """ macro market comment
		required 
		required ts fields: currency,indicator,rate,mkt1,mkt2
	"""
    if ts is None:
        return None
    for (ky, va) in f.iteritems():
        exec("{}=va".format(ky))
    xsign = 1 if currencyTicker[-2:] == "US" else -1
    currencyXTrendWd = udfStr(xsign * currencyXChg,
                              ["depreciated", "appreciated", "stayed flat"],
                              0.0001)
    indicatorXTrendWd = udfStr(indicatorXChg,
                               ["increased", "decreased", "remained"], 0.0001)
    rateXTrendWd = udfStr(rateXChg, ["rose", "fell", "unchanged"], 0.0001)
    mkt1XTrendWd = udfStr(mkt1XChg, ["increased", "decreased", "remained"],
                          0.0001)
    mkt2XTrendWd = udfStr(mkt2XChg, ["went up", "went down", "stayed flat"],
                          0.0001)
    vntDateWd = ymd2md(str(macroVntdate), ym="%B %d",
                       lang=lang) if 'macroVntdate' in f else ""
    unitStr = fq2unit_str(macroMfreq, lang) if 'macroMfreq' in f else "month"
    pastTrendWd = udfStr(macroXChg, udfLst, 0.0001, lang=lang)
    if indicatorXChg * currencyXChg > 0:
        macro1Adv = 'and'
        macro11Adv = 'also'
    else:
        macro1Adv = 'yet'
        macro11Adv = ''
    if mkt1XChg * mkt2XChg > 0:
        macro2Adv = 'also'
    else:
        macro2Adv = ''
    dux = locals()
    ret = ts.format(**dux)
    return (ret)
Exemple #3
0
def generate_comment_header_cn(f,
                               ts=None,
                               dotSign='.',
                               prcn=0,
                               usdSign='$',
                               udfLst=None,
                               lang="cn",
                               mp3YN=False):
    """ macro market comment
		required 
		required ts fields: currency,indicator,rate,mkt1,mkt2
	"""
    if ts is None:
        return None
    for (ky, va) in f.iteritems():
        exec("{}=va".format(ky))
    #xsign = 1 if currencyTicker[-2:] == "US" else -1
    xsign = -1  # cn version always use EURO direction
    currencyXTrendWd = udfStr(xsign * currencyXChg, ["貶值", "升值", "持平"],
                              0.0001,
                              lang=lang)
    indicatorXTrendWd = udfStr(indicatorXChg, udf=udfLst, zs=0.0001, lang=lang)
    rateXTrendWd = udfStr(rateXChg, udf=udfLst, zs=0.0001, lang=lang)
    mkt1XTrendWd = udfStr(mkt1XChg, udf=udfLst, zs=0.0001, lang=lang)
    mkt2XTrendWd = udfStr(mkt2XChg, udf=udfLst, zs=0.0001, lang=lang)
    vntDateWd = ymd2md(str(macroVntdate), ym="%B %d",
                       lang=lang) if 'macroVntdate' in f else ""
    unitStr = fq2unit_str(macroMfreq, lang) if 'macroMfreq' in f else "月"
    pastTrendWd = udfStr(macroXChg, udfLst, 0.0001, lang=lang)
    if indicatorXChg * currencyXChg * xsign < 0:
        macro1Adv = '並且'
        macro11Adv = '也在'
    else:
        macro1Adv = '然而'
        macro11Adv = '卻在'
    if mkt1XChg * mkt2XChg > 0:
        macro2Adv = '也正'
    else:
        macro2Adv = '卻正'
    dux = locals()
    ret = ts.format(**dux)
    return (ret)
Exemple #4
0
def run_lsi_mkt(tkLst=[], opts=None, optx=None):
    """ Create market commentary based on macro list
	"""
    if opts is None:
        (opts, _) = opt_lsi_mkt([])
    if optx is not None:
        opts.update(optx)
    #for ky,va in opts.items():
    #	exec("{}=va".format(ky))
    debugTF, lang, j2ts_header, dbname = getKeyVal(
        opts, ['debugTF', 'lang', 'j2ts_header', 'dbname'],
        [False, None, None, 'ara'])
    mp3YN, mp3Make, region, dirname = getKeyVal(
        opts, ['mp3YN', 'mp3Make', 'region', 'dirname'],
        ['False', 'False', 'en', './'])

    if debugTF is True:
        print("OPTS:\n{}".format(opts), file=sys.stderr)

    if lang == "en":
        ts_title = '{currDateWd} Market Closing Report: brought to you by Beyondbond.'
        headerAddiClause = "{{macro1Label}} published at {{vntDateWd}}, {{pastTrendWd}} from last {{unitStr}}. "
        ts_header = """{{indicator1Label}} {{indicator1XTrendWd}}, while the {{currency1Label}} {{currency1XTrendWd}} against the US dollar, {{macro1Adv}} the {{rate1Label}} {{macro11Adv}} {{rate1XTrendWd}}.  In the stock market, {{mkt1Label}} {{mkt1XTrendWd}}, while the {{mkt2Label}} {{mkt2Adv}} {{mkt2XTrendWd}}.  Our AI recommended sector is {{mkt0Label}}.
	Now, here is our exclusive AICaas market updates and forecasts.  """
        ts_footer = """Finally, our forecast calls for {mkt1NTrendWd} {mkt1Label} and {rateNTrendWd} {rate1Label} next week. As these two are {rhoWd} correlated, if the {rate1Label} {rateIfWd} further, then the {mkt1Label} is likely to {mkt1IfWd} {macro1Adv}."""
        ts_disclaim = """This electronic message is our opinion only and is not intended to be an investment advise."""
        ts_stock = ts_indicator = ts_currency = ts_rate = ts_macro = None
    else:
        ts_title = '智能伏羲 {currDateWd} 晨間大盤走勢快報:今日值得觀察國際金融走勢如下\n'
        headerAddiClause = "{macro1Label}在{vntDateWd}公佈,比前一{unitStr}{pastTrendWd} 。"
        ts_header = """在股市中,隨者{mkt1Label}的{mkt1XTrendWd},{mkt1Adv}{mkt2Label}{mkt2Adv}{mkt2XTrendWd}。
{indicator1Label}在日前{indicator1XTrendWd},{indicator1Adv}{indicator2Label}{indicator2Adv}{indicator2XTrendWd}。
{currency1Label}{currency1XTrendWd},{currency1Adv}{currency2Label}{currency2Adv}{currency2XTrendWd}。
與此同時,{rate1Label}處於{rate1XTrendWd}狀態,{rate1Adv}{rate2Label}{rate2Adv}{rate2XTrendWd}。
有關大宗商品{commodity1Label}和{commodity2Label}基本上呈現{commodity12Adv}的趨勢。
{commodity1Label}目前{commodity1XTrendWd},{commodity1Adv}{commodity2Label}{commodity2Adv}{commodity2XTrendWd}。
依據本週走勢分析,智能伏羲 AI推薦的產業為{mkt0Label} 。
接下來是我們獨家智能伏羲有關市場更新和預測。"""
        ts_footer = """最後我們總結一下下週預測, {mkt1Label}預期{mkt1NTrendWd},{rate1Label}預期{rateNTrendWd}。由於這兩者呈{rhoWd} 相關關係,如果{rate1Label}價格進一步 {rateIfWd},那麼,{mkt1Label}可能會{mkt1IfWd}{macro1Adv}"""
        ts_disclaim = "\n以上名單,是經由國際金融中選出重要指標。此一名單,並不代表本公司的任何持有部位,謝謝您的收聽。"
        ts_stock = "{label}在前一個交易日{xdTrendWd} {xdChgWd},收盤價為{price}元。依據{label}波動狀況,預估下一{unitStr}有七成可能{rangeWd}。{posPbWd}"
        ts_indicator = "{label}在前個一交易日{xdTrendWd} {xdChgWd},目前為{price} 。依據{label}波動狀況,預估下一{unitStr}有七成可能{rangeWd}。{posPbWd}"
        #ts_stock="{label}在前一{unitStr}{pastTrendWd} {xwChgWd},收盤價為{price}元{xdTrendWd}{xdChgWd} 。依據{label}波動狀況,預估下一{unitStr}有七成可能{rangeWd}。{posPbWd}"
        #ts_indicator="{label}在前一{unitStr}{pastTrendWd} {xwChgWd},目前為{price} {xdTrendWd}{xdChgWd}。依據{label}波動狀況,預估下一{unitStr}有七成可能{rangeWd}。{posPbWd}"
        #ts_stock="{label}在前一{unitStr}{pastTrendWd} {xwChgWd},目前收盤價{price}元 。依據{label}波動狀況,預估下一{unitStr}有七成可能{rangeWd}。{posPbWd}"
        #ts_indicator="{label}在前一{unitStr}{pastTrendWd} {xwChgWd},目前為{price} 。依據{label}波動狀況,預估下一{unitStr}有七成可能{rangeWd}。{posPbWd}"
        ts_currency = "{label}在前一{unitStr}{pastTrendWd} {xwBpsWd}分,目前為{price} 。其{pastTrendWd}{movingWd}部分{cmpWd} 過去一年歷史波動率{sigmaWd}。依據{label}波動狀況,預估下一{unitStr}有七成可能{rangeWd}。{posPbWd}"
        ts_rate = "{label}在前一{unitStr}{pastTrendWd} {xwBpsWd}基本點,目前為{price} 。依據{label}波動狀況,預估下一{unitStr}有七成可能{rangeWd}。{posPbWd}"
        ts_macro = "{label}在{vntDateWd}公佈,比前一{unitStr}{pastTrendWd} {xwDifWd},目前為{price} 。依據{label}波動狀況,預估下一{unitStr}有七成可能{rangeWd}。{posPbWd}"
    if j2ts_header is not None and len(j2ts_header) > 10:
        ts_header = j2ts_header

    for x in [z for z in opts if 'j2name_' == z[:7]]:
        if x[-6:] == 'footer':
            ts_footer = readfile_j2name(opts[x], ts_footer)
        elif x[-6:] == 'header':
            ts_header = readfile_j2name(opts[x], ts_header)
        elif x[-5:] == 'title':
            ts_title = readfile_j2name(opts[x], ts_title)
    f = {}
    comment_content = ''
    vcmt = []  # list of each comment
    tkLst = []  # list of tickers
    ct_ts = {
        "stock": ts_stock,
        "macro": ts_macro,
        "rate": ts_rate,
        "currency": ts_currency,
        "indicator": ts_indicator
    }

    cmt_temp = "SELECT cmt_temp_{} FROM mapping_cmt_temp WHERE category='{}' and cmt_type='{}' AND sub_id={}"
    # collect stock part
    (dm, datax, pgDB) = get_index_list(idxLst=None,
                                       pgDB=None,
                                       dbname=dbname,
                                       lang=lang)
    currdate = dm[0]['pbdate']
    for j, xd in enumerate(dm):
        ky = xd['category'].split()[-1]
        sqx = cmt_temp.format(lang, ky, "mkt", j % 3)
        ts_cmt = get_ts_cmt(sqx, ts_rate, pgDB=pgDB, dbname=dbname)
        #ts_cmt = ct_ts[ky] if ky in ct_ts else ts_rate
        xcmt, tkS = create_stock_comment(f,
                                         j,
                                         xd,
                                         ts_cmt,
                                         pgDB=pgDB,
                                         lang=lang,
                                         mp3YN=mp3YN,
                                         ctky=ky)
        tkLst += tkS
        vcmt.append(xcmt)
        comment_content = "\n".join([comment_content, xcmt])
    f['rho'] = -0.333333
    f['macroXChg'] = 0

    # collect macro part by category
    (dm, df, pgDB) = get_macro_list(currdate=currdate,
                                    pgDB=pgDB,
                                    dbname=dbname,
                                    lang=lang,
                                    debugTF=debugTF)
    flgAddi = 0
    for k, xm in enumerate(dm):
        for j, xd in enumerate(xm):
            ky = xd['category'].split()[-1]
            sqx = cmt_temp.format(lang, ky, "mkt", 2)
            ts_cmt = get_ts_cmt(sqx,
                                ts_rate,
                                pgDB=pgDB,
                                dbname=dbname,
                                debugTF=debugTF)
            #ts_cmt = ct_ts[ky] if ky in ct_ts else ts_rate
            xcmt, flgAddi, tkS = create_macro_comment(f,
                                                      j + 1,
                                                      xd,
                                                      ts_cmt,
                                                      flgAddi,
                                                      pgDB=pgDB,
                                                      lang=lang,
                                                      mp3YN=mp3YN,
                                                      debugTF=debugTF)
            tkLst += tkS
            vcmt.append(xcmt)
            comment_content = "\n".join([comment_content, xcmt])
    f['inflation_expectation'] = df.query(
        "freq=='W' & ticker=='T5YIFR'")['prc_cur'].iloc[0]
    try:
        f['rate10y3m_dif'] = df.query(
            "freq=='W' & ticker=='DGS10'")['prc_cur'].iloc[0] - df.query(
                "freq=='W' & ticker=='DGS3MO'")['prc_cur'].iloc[0]
    except:
        f['rate10y3m_dif'] = 0
    #if flgAddi>0:
    #	ts_header = headerAddiClause + ts_header
    currDateWd = ymd2md(currdate, ym="%B %d", ymd="%Y%m%d", lang=lang)
    comment_header = generate_cmt(f,
                                  ts=ts_header,
                                  lang=lang,
                                  funcname="generate_comment_header",
                                  mp3YN=mp3YN)
    comment_footer = generate_cmt(f,
                                  ts=ts_footer,
                                  lang=lang,
                                  funcname="generate_comment_footer",
                                  mp3YN=mp3YN)
    comment_title = jj_fmt(ts_title, dict(currDateWd=currDateWd))
    comment_disclaim = ts_disclaim
    vcmt = [comment_title, comment_header
            ] + vcmt + [comment_footer, comment_disclaim]
    tcmt = prn_mkt_cmt(vcmt, region, lang, mp3YN, mp3Make, dirname)
    tkLst = ["','".join(tkLst[:3])] * 2 + tkLst
    open("mktCmt_US.list", "w").write("\n".join(tkLst))
    return "\n".join(vcmt)
Exemple #5
0
def generate_comment_header_cn(f,
                               ts=None,
                               dotSign='.',
                               prcn=0,
                               usdSign='$',
                               udfLst=None,
                               lang="cn",
                               mp3YN=False):
    """ macro1 market comment
		required ts fields: currency1,indicator1,rate1,mkt1,mkt2
	"""
    if ts is None:
        return None
    for (ky, va) in f.iteritems():
        exec("{}=va".format(ky))
    if 'macro1XChg' not in f:
        macro1XChg = 0
        macro1Vntdate = 20180101
    #xsign = 1 if currency1Ticker[-2:] == "US" else -1
    xsign = -1  # cn version always use EURO direction
    currency1XTrendWd = udfStr(xsign * currency1XChg, ["貶值", "升值", "持平"],
                               0.0001,
                               lang=lang)
    indicator1XTrendWd = udfStr(indicator1XChg,
                                udf=udfLst,
                                zs=0.0001,
                                lang=lang)
    rate1XTrendWd = udfStr(rate1XChg, udf=udfLst, zs=0.0001, lang=lang)
    commodity1XTrendWd = udfStr(commodity1XChg,
                                udf=udfLst,
                                zs=0.0001,
                                lang=lang)
    currency2XTrendWd = udfStr(xsign * currency2XChg, ["貶值", "升值", "持平"],
                               0.0001,
                               lang=lang)
    indicator2XTrendWd = udfStr(indicator2XChg,
                                udf=udfLst,
                                zs=0.0001,
                                lang=lang)
    rate2XTrendWd = udfStr(rate2XChg, udf=udfLst, zs=0.0001, lang=lang)
    commodity2XTrendWd = udfStr(commodity2XChg,
                                udf=udfLst,
                                zs=0.0001,
                                lang=lang)
    mkt1XTrendWd = udfStr(mkt1XChg, udf=udfLst, zs=0.0001, lang=lang)
    mkt2XTrendWd = udfStr(mkt2XChg, udf=udfLst, zs=0.0001, lang=lang)
    vntDateWd = ymd2md(str(macro1Vntdate), ym="%B %d",
                       lang=lang) if 'macro1Vntdate' in f else ""
    unitStr = fq2unit_str(macro1Mfreq, lang) if 'macro1Mfreq' in f else "月"
    pastTrendWd = udfStr(macro1XChg, udfLst, 0.0001, lang=lang)
    mkt0Label = mkt0Label[:mkt0Label.find('指數基金')]

    (currency1Adv,
     currency2Adv) = ('同時',
                      '也在') if currency1XChg * currency2XChg >= 0 else ('然而',
                                                                        '卻在')
    (indicator1Adv, indicator2Adv, indicator12Adv) = (
        '並且', '也在',
        '正相關') if indicator1XChg * indicator2XChg > 0 else ('然而', '卻在', '負相關')
    (rate1Adv, rate2Adv) = ('', '也在') if rate1XChg * rate2XChg >= 0 else ('可是',
                                                                          '卻在')
    (commodity1Adv, commodity2Adv, commodity12Adv) = (
        '並且', '也在',
        '正相關') if commodity1XChg * commodity2XChg >= 0 else ('然而', '卻在', '負相關')
    (mkt1Adv, mkt2Adv) = ('', '也正') if mkt1XChg * mkt2XChg >= 0 else ('但是',
                                                                      '卻正')
    (macro1Adv,
     macro11Adv) = ('', '也正') if mkt1XChg * mkt2XChg >= 0 else ('但是', '卻正')
    dux = locals()
    #ret=ts.format(**dux)
    ret = jj_fmt(ts, dux)
    return (ret)
Exemple #6
0
def generate_comment_header_en(f,
                               ts=None,
                               dotSign='.',
                               prcn=0,
                               usdSign='$',
                               udfLst=None,
                               lang="en",
                               mp3YN=False):
    """ macro1 market comment
		required ts fields: currency1,indicator1,rate1,mkt1,mkt2
	"""
    if ts is None:
        return None
    for (ky, va) in f.iteritems():
        exec("{}=va".format(ky))
    if 'macro1XChg' not in f:
        macro1XChg = 0
        macro1Vntdate = 20180101
    #xsign = 1 if currency1Ticker[-2:] == "US" else -1
    xsign = -1  # cn version always use EURO direction
    currency1XTrendWd = udfStr(xsign * currency1XChg,
                               ["depreciated", "appreciated", "stayed flat"],
                               0.0001,
                               lang=lang)
    indicator1XTrendWd = udfStr(indicator1XChg,
                                udf=udfLst,
                                zs=0.0001,
                                lang=lang)
    rate1XTrendWd = udfStr(rate1XChg, udf=udfLst, zs=0.0001, lang=lang)
    commodity1XTrendWd = udfStr(commodity1XChg,
                                udf=udfLst,
                                zs=0.0001,
                                lang=lang)
    currency2XTrendWd = udfStr(xsign * currency2XChg,
                               ["depreciated", "appreciated", "stayed flat"],
                               0.0001,
                               lang=lang)
    indicator2XTrendWd = udfStr(indicator2XChg,
                                udf=udfLst,
                                zs=0.0001,
                                lang=lang)
    rate2XTrendWd = udfStr(rate2XChg, udf=udfLst, zs=0.0001, lang=lang)
    commodity2XTrendWd = udfStr(commodity2XChg,
                                udf=udfLst,
                                zs=0.0001,
                                lang=lang)
    mkt1XTrendWd = udfStr(mkt1XChg, udf=udfLst, zs=0.0001, lang=lang)
    mkt2XTrendWd = udfStr(mkt2XChg, udf=udfLst, zs=0.0001, lang=lang)
    vntDateWd = ymd2md(str(macro1Vntdate), ym="%B %d",
                       lang=lang) if 'macro1Vntdate' in f else ""
    unitStr = fq2unit_str(macro1Mfreq, lang) if 'macro1Mfreq' in f else "month"
    pastTrendWd = udfStr(macro1XChg, udfLst, 0.0001, lang=lang)
    mkt0Label = mkt0Label[:mkt0Label.find('Index')]

    (currency1Adv, currency2Adv) = (
        'and', 'also') if currency1XChg * currency2XChg >= 0 else ('', 'yet')
    (indicator1Adv, indicator2Adv, indicator12Adv) = (
        'and', 'also',
        'positively correlated') if indicator1XChg * indicator2XChg > 0 else (
            '', 'however', 'negatively correlated')
    (rate1Adv,
     rate2Adv) = ('', 'also') if rate1XChg * rate2XChg >= 0 else ('', 'yet')
    (commodity1Adv, commodity2Adv, commodity12Adv) = (
        'and', 'also',
        'positively correlated') if commodity1XChg * commodity2XChg >= 0 else (
            '', 'however', 'negatively correlated')
    (mkt1Adv, mkt2Adv) = ('', 'also') if mkt1XChg * mkt2XChg >= 0 else ('',
                                                                        'yet')
    (macro1Adv,
     macro11Adv) = ('', 'also') if mkt1XChg * mkt2XChg >= 0 else ('but', '')
    dux = locals()
    #ret=ts.format(**dux)
    ret = jj_fmt(ts, dux)
    return (ret)
Exemple #7
0
def run_lsi_mkt(tkLst, **kwargs):
    """ Create market commentary based on macro list
	"""
    for ky, va in kwargs.items():
        exec("{}=va".format(ky))

    if lang == "en":
        ts_title = '{} Market Closing Report: brought to you by Beyondbond.'
        headerAddiClause = "{macro1Label} published at {vntDateWd}, {pastTrendWd} from last {unitStr}. "
        ts_header = """{indicator1Label} {indicator1XTrendWd}, while the {currency1Label} {currency1XTrendWd} against the US dollar, {macro1Adv} the {rate1Label} {macro11Adv} {rate1XTrendWd}.  In the stock market, {mkt1Label} {mkt1XTrendWd}, while the {mkt2Label} {mkt2Adv} {mkt2XTrendWd}.  Our AI recommended sector is {mkt0Label}.
	Now, here is our exclusive AICaas market updates and forecasts.  """
        ts_footer = """Finally, our forecast calls for {mkt1NTrendWd} {mkt1Label} and {rateNTrendWd} {rate1Label} next week. As these two are {rhoWd} correlated, if the {rate1Label} {rateIfWd} further, then the {mkt1Label} is likely to {mkt1IfWd} {macro1Adv}."""
        ts_disclaim = """This electronic message is our opinion only and is not intended to be an investment advise."""
        ts_stock = ts_indicator = ts_currency = ts_rate = ts_macro = None
    else:
        ts_title = '智能伏羲 {} 晨間大盤走勢快報:今日值得觀察國際金融走勢如下\n'
        headerAddiClause = "{macro1Label}在{vntDateWd}公佈,比前一{unitStr}{pastTrendWd} 。"
        ts_header = """在股市中,隨者{mkt1Label}的{mkt1XTrendWd},{mkt1Adv}{mkt2Label}{mkt2Adv}{mkt2XTrendWd}。
{indicator1Label}在日前{indicator1XTrendWd},{indicator1Adv}{indicator2Label}{indicator2Adv}{indicator2XTrendWd}。
{currency1Label}{currency1XTrendWd},{currency1Adv}{currency2Label}{currency2Adv}{currency2XTrendWd}。
與此同時,{rate1Label}處於{rate1XTrendWd}狀態,{rate1Adv}{rate2Label}{rate2Adv}{rate2XTrendWd}。
有關大宗商品{commodity1Label}和{commodity2Label}基本上呈現{commodity12Adv}的趨勢。
{commodity1Label}目前{commodity1XTrendWd},{commodity1Adv}{commodity2Label}{commodity2Adv}{commodity2XTrendWd}。
依據本週走勢分析,智能伏羲 AI推薦的產業為{mkt0Label} 。
接下來是我們獨家智能伏羲有關市場更新和預測。"""
        ts_footer = """最後我們總結一下下週預測, {mkt1Label}預期{mkt1NTrendWd},{rate1Label}預期{rateNTrendWd}。由於這兩者呈{rhoWd} 相關關係,如果{rate1Label}價格進一步 {rateIfWd},那麼,{mkt1Label}可能會{mkt1IfWd}{macro1Adv}"""
        ts_disclaim = "\n以上名單,是經由國際金融中選出重要指標。此一名單,並不代表本公司的任何持有部位,謝謝您的收聽。"
        ts_stock = "{label}在前一個交易日{xdTrendWd} {xdChgWd},收盤價為{price}元。依據{label}波動狀況,預估下一{unitStr}有七成可能{rangeWd}。{posPbWd}"
        ts_indicator = "{label}在前個一交易日{xdTrendWd} {xdChgWd},目前為{price} 。依據{label}波動狀況,預估下一{unitStr}有七成可能{rangeWd}。{posPbWd}"
        #ts_stock="{label}在前一{unitStr}{pastTrendWd} {xwChgWd},收盤價為{price}元{xdTrendWd}{xdChgWd} 。依據{label}波動狀況,預估下一{unitStr}有七成可能{rangeWd}。{posPbWd}"
        #ts_indicator="{label}在前一{unitStr}{pastTrendWd} {xwChgWd},目前為{price} {xdTrendWd}{xdChgWd}。依據{label}波動狀況,預估下一{unitStr}有七成可能{rangeWd}。{posPbWd}"
        #ts_stock="{label}在前一{unitStr}{pastTrendWd} {xwChgWd},目前收盤價{price}元 。依據{label}波動狀況,預估下一{unitStr}有七成可能{rangeWd}。{posPbWd}"
        #ts_indicator="{label}在前一{unitStr}{pastTrendWd} {xwChgWd},目前為{price} 。依據{label}波動狀況,預估下一{unitStr}有七成可能{rangeWd}。{posPbWd}"
        ts_currency = "{label}在前一{unitStr}{pastTrendWd} {xwBpsWd}分,目前為{price} 。其{pastTrendWd}{movingWd}部分{cmpWd} 過去一年歷史波動率{sigmaWd}。依據{label}波動狀況,預估下一{unitStr}有七成可能{rangeWd}。{posPbWd}"
        ts_rate = "{label}在前一{unitStr}{pastTrendWd} {xwBpsWd}基本點,目前為{price} 。依據{label}波動狀況,預估下一{unitStr}有七成可能{rangeWd}。{posPbWd}"
        ts_macro = "{label}在{vntDateWd}公佈,比前一{unitStr}{pastTrendWd} {xwDifWd},目前為{price} 。依據{label}波動狀況,預估下一{unitStr}有七成可能{rangeWd}。{posPbWd}"

    f = {}
    comment_content = ''
    vcmt = []  # list of each comment
    tkLst = []  # list of tickers
    ct_ts = {
        "stock": ts_stock,
        "macro": ts_macro,
        "rate": ts_rate,
        "currency": ts_currency,
        "indicator": ts_indicator
    }

    cmt_temp = "SELECT cmt_temp_{} FROM mapping_cmt_temp WHERE category='{}' and cmt_type='{}' AND sub_id={}"
    # collect stock part
    (dm, datax, pgDB) = get_index_list(idxLst=None,
                                       pgDB=None,
                                       dbname=dbname,
                                       lang=lang)
    currdate = dm[0]['pbdate']
    for j, xd in enumerate(dm):
        ky = xd['category'].split()[-1]
        sqx = cmt_temp.format(lang, ky, "mkt", j % 3)
        ts_cmt = get_ts_cmt(sqx, ts_rate, pgDB=pgDB, dbname=dbname)
        #ts_cmt = ct_ts[ky] if ky in ct_ts else ts_rate
        xcmt, tkS = create_stock_comment(f,
                                         j,
                                         xd,
                                         ts_cmt,
                                         pgDB=pgDB,
                                         lang=lang,
                                         mp3YN=mp3YN,
                                         ctky=ky)
        tkLst += tkS
        vcmt.append(xcmt)
        comment_content = "\n".join([comment_content, xcmt])
    f['rho'] = -0.333333
    f['macroXChg'] = 0

    # collect macro part by category
    (dm, df, pgDB) = get_macro_list(currdate=currdate,
                                    pgDB=pgDB,
                                    dbname=dbname,
                                    lang=lang)
    flgAddi = 0
    for k, xm in enumerate(dm):
        for j, xd in enumerate(xm):
            ky = xd['category'].split()[-1]
            sqx = cmt_temp.format(lang, ky, "mkt", 2)
            ts_cmt = get_ts_cmt(sqx, ts_rate, pgDB=pgDB, dbname=dbname)
            #ts_cmt = ct_ts[ky] if ky in ct_ts else ts_rate
            xcmt, flgAddi, tkS = create_macro_comment(f,
                                                      j + 1,
                                                      xd,
                                                      ts_cmt,
                                                      flgAddi,
                                                      pgDB=pgDB,
                                                      lang=lang,
                                                      mp3YN=mp3YN)
            tkLst += tkS
            vcmt.append(xcmt)
            comment_content = "\n".join([comment_content, xcmt])
    if flgAddi > 0:
        ts_header = headerAddiClause + ts_header
    currDateWd = ymd2md(currdate, ym="%B %d", ymd="%Y%m%d", lang=lang)
    comment_header = generate_cmt(f,
                                  ts=ts_header,
                                  lang=lang,
                                  funcname="generate_comment_header",
                                  mp3YN=mp3YN)
    comment_footer = generate_cmt(f,
                                  ts=ts_footer,
                                  lang=lang,
                                  funcname="generate_comment_footer",
                                  mp3YN=mp3YN)
    comment_title = ts_title.format(currDateWd)
    comment_disclaim = ts_disclaim
    vcmt = [comment_title, comment_header
            ] + vcmt + [comment_footer, comment_disclaim]
    tcmt = prn_mkt_cmt(vcmt, region, lang, mp3YN, mp3Make, dirname)
    tkLst = ["','".join(tkLst[:3])] * 2 + tkLst
    open("mktCmt_US.list", "w").write("\n".join(tkLst))
    return "\n".join(vcmt)
Exemple #8
0
    fname = 'ohlc_alert_list.sql.tmp'
    pgDB = conn2pgdb(dbname=dbname)
    xqTmp = open(fname).read()
    cdate = pd.read_sql("SELECT * FROM ara_uptodate", pgDB).pbdate[0]
    x1dYmd = ymd_delta(cdate, 1)
    x1wYmd = ymd_delta(cdate, 7)
    xqr = xqTmp.format(**locals())
    df = pd.read_sql(xqr, pgDB)
    return (df, pgDB)


if __name__ == '__main__':
    args = sys.argv[1:]
    dbname = 'ara.tw' if len(args) < 1 else args[0]
    numLimit = 10 if len(args) < 2 else args[1]
    (f, pgDB) = get_alert_list(dbname=dbname, numLimit=numLimit)
    aStr = ", ".join(list(f['label']))
    lang = "cn"
    numLimit = len(f['label'])
    print >> sys.stderr, aStr
    currDateWd = ymd2md(str(f['curr_date'][0]), lang=lang)
    ts_title = '智能伏羲 {} 晨間綜合快報:今日值得觀察股票名單如下: {}。\n接下來播報所選個股評估内容:\n'
    ts_disclaim = "\n以上名單,是經由一周内一百大熱絡交易股中選出。有關選股進出策咯在這兩天出現,并且回測的獲利為正向的前{}名,此一名單,並不代表本公司的任何持有部位,謝謝您的收聽。".format(
        numLimit)

    comment_title = ts_title.format(currDateWd, aStr)
    commentLst = f[[
        'comment_pricing', 'comment_ohlc', 'comment_pppscf', 'comment_fcst'
    ]].sum(axis=1)
    print comment_title, "\n".join(commentLst), ts_disclaim