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
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)
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)
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)
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)
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)
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)
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