示例#1
0
def metals_command():
    """Displays metals futures data [Finviz]"""
    # Debug user input
    if cfg.DEBUG:
        logger.debug("econ-metals")

    # Retrieve data
    d_futures = finviz_model.get_futures()
    df = pd.DataFrame(d_futures["Metals"])

    # Check for argument
    if df.empty:
        raise Exception("No available data found")

    formats = {"last": "${:.2f}", "prevClose": "${:.2f}"}
    for col, value in formats.items():
        df[col] = df[col].map(lambda x: value.format(x))  # pylint: disable=W0640

    # Debug user output
    if cfg.DEBUG:
        logger.debug(df)

    df = df.sort_values(by="ticker", ascending=False)
    df = df.fillna("")
    df.set_index("label", inplace=True)

    df = df[[
        "prevClose",
        "last",
        "change",
    ]]

    df.index.names = [""]
    df = df.rename(columns={
        "prevClose": "PrevClose",
        "last": "Last",
        "change": "Change"
    })

    dindex = len(df.index)
    fig = df2img.plot_dataframe(
        df,
        fig_size=(800, (40 + (40 * dindex))),
        col_width=[6, 3, 3],
        tbl_cells=dict(
            align="left",
            height=35,
        ),
        template="plotly_dark",
        font=dict(
            family="Consolas",
            size=20,
        ),
        paper_bgcolor="rgba(0, 0, 0, 0)",
    )
    imagefile = save_image("econ-metals.png", fig)
    return {
        "title": "Economy: [WSJ] Metals Futures",
        "imagefile": imagefile,
    }
示例#2
0
async def meats_command(ctx):
    """Displays meats futures data [Finviz]"""

    try:
        # Debug user input
        if cfg.DEBUG:
            print("\n!economy.meats")

        # Retrieve data
        d_futures = finviz_model.get_futures()

        df = pd.DataFrame(d_futures["Meats"])
        df = df.set_index("label")
        df = df.sort_values(by="ticker", ascending=False)

        # Debug user output
        if cfg.DEBUG:
            print(df.to_string())

        # Output data
        if df.empty:
            df_str = "No available meats futures data"
        else:
            df_str = (
                df[["prevClose", "last", "change"]].fillna("").to_string(index=True)
            )

        embed = discord.Embed(
            title="Economy: [Finviz] Meats Futures",
            description="```" + df_str + "```",
            colour=cfg.COLOR,
        )
        embed.set_author(
            name=cfg.AUTHOR_NAME,
            icon_url=cfg.AUTHOR_ICON_URL,
        )

        await ctx.send(embed=embed)

    except Exception as e:
        embed = discord.Embed(
            title="ERROR Economy: [Finviz] Meats Futures",
            colour=cfg.COLOR,
            description=e,
        )
        embed.set_author(
            name=cfg.AUTHOR_NAME,
            icon_url=cfg.AUTHOR_ICON_URL,
        )

        await ctx.send(embed=embed)
示例#3
0
def display_future(
    future_type: str = "Indices",
    sort_col: str = "ticker",
    ascending: bool = False,
    export: str = "",
):
    """Display table of a particular future type. [Source: Finviz]

    Parameters
    ----------
    future_type : str
        From the following: Indices, Energy, Metals, Meats, Grains, Softs, Bonds, Currencies
    sort_col : str
        Column to sort by
    ascending : bool
        Flag to sort in ascending order
    export : str
        Export data to csv,json,xlsx or png,jpg,pdf,svg file
    """
    d_futures = finviz_model.get_futures()

    df = pd.DataFrame(d_futures[future_type])
    df = df.set_index("label")
    df = df.sort_values(by=sort_col, ascending=ascending)
    if gtff.USE_TABULATE_DF:
        print(
            tabulate(
                df[["prevClose", "last", "change"]].fillna(""),
                showindex=True,
                floatfmt=".2f",
                headers=["prevClose", "last", "change (%)"],
                tablefmt="fancy_grid",
            ))
    else:
        print(df[["prevClose", "last",
                  "change"]].fillna("").to_string(index=True))

    export_data(
        export,
        os.path.dirname(os.path.abspath(__file__)),
        future_type.lower(),
        df,
    )
    print("")
示例#4
0
def display_future(
    future_type: str = "Indices",
    sort_col: str = "ticker",
    ascending: bool = False,
    export: str = "",
):
    """Display table of a particular future type. [Source: Finviz]

    Parameters
    ----------
    future_type : str
        From the following: Indices, Energy, Metals, Meats, Grains, Softs, Bonds, Currencies
    sort_col : str
        Column to sort by
    ascending : bool
        Flag to sort in ascending order
    export : str
        Export data to csv,json,xlsx or png,jpg,pdf,svg file
    """
    d_futures = finviz_model.get_futures()

    df = pd.DataFrame(d_futures[future_type])
    df = df.set_index("label")
    df = df.sort_values(by=sort_col, ascending=ascending)
    print_rich_table(
        df[["prevClose", "last", "change"]].fillna(""),
        show_index=True,
        headers=["prevClose", "last", "change (%)"],
        title="Future Table [Source: FinViz]",
    )

    export_data(
        export,
        os.path.dirname(os.path.abspath(__file__)),
        future_type.lower(),
        df,
    )
    console.print("")
示例#5
0
async def softs_command(ctx):
    """Displays softs futures data [Finviz]"""

    try:
        # Debug user input
        if cfg.DEBUG:
            logger.debug("econ-softs")

        # Retrieve data
        d_futures = finviz_model.get_futures()
        df = pd.DataFrame(d_futures["Softs"])

        # Check for argument
        if df.empty:
            raise Exception("No available data found")

        formats = {"last": "${:.2f}", "prevClose": "${:.2f}"}
        for col, value in formats.items():
            df[col] = df[col].map(lambda x: value.format(x))  # pylint: disable=W0640

        # Debug user output
        if cfg.DEBUG:
            logger.debug(df)

        df = df.sort_values(by="ticker", ascending=False)
        df = df.fillna("")
        df.set_index("label", inplace=True)

        df = df[[
            "prevClose",
            "last",
            "change",
        ]]

        df.index.names = [""]
        df = df.rename(columns={
            "prevClose": "PrevClose",
            "last": "Last",
            "change": "Change"
        })

        dindex = len(df.index)
        fig = df2img.plot_dataframe(
            df,
            fig_size=(800, (40 + (40 * dindex))),
            col_width=[6, 3, 3],
            tbl_cells=dict(
                align="left",
                height=35,
            ),
            template="plotly_dark",
            font=dict(
                family="Consolas",
                size=20,
            ),
            paper_bgcolor="rgba(0, 0, 0, 0)",
        )
        imagefile = "econ-softs.png"
        df2img.save_dataframe(fig=fig, filename=imagefile)

        image = Image.open(imagefile)
        image = autocrop_image(image, 0)
        image.save(imagefile, "PNG", quality=100)

        image = disnake.File(imagefile)

        title = "Economy: [Finviz] Softs Futures"
        embed = disnake.Embed(title=title, colour=cfg.COLOR)
        embed.set_image(url=f"attachment://{imagefile}")
        embed.set_author(
            name=cfg.AUTHOR_NAME,
            icon_url=cfg.AUTHOR_ICON_URL,
        )
        os.remove(imagefile)

        await ctx.send(embed=embed, file=image)

    except Exception as e:
        embed = disnake.Embed(
            title="ERROR Economy: [Finviz] Softs Futures",
            colour=cfg.COLOR,
            description=e,
        )
        embed.set_author(
            name=cfg.AUTHOR_NAME,
            icon_url=cfg.AUTHOR_ICON_URL,
        )

        await ctx.send(embed=embed, delete_after=30.0)
示例#6
0
def softs_command():
    """Displays softs futures data [Finviz]"""

    # Debug user input
    if imps.DEBUG:
        logger.debug("econ-softs")

    # Retrieve data
    d_futures = finviz_model.get_futures()
    df = pd.DataFrame(d_futures["Softs"])

    # Check for argument
    if df.empty:
        raise Exception("No available data found")

    formats = {
        "last": "${:.2f}",
        "prevClose": "${:.2f}",
        "change": "<b>{:.2f}%</b>"
    }
    for col, value in formats.items():
        df[col] = df[col].map(lambda x: value.format(x))  # pylint: disable=W0640

    # Debug user output
    if imps.DEBUG:
        logger.debug(df)

    df = df.sort_values(by="ticker", ascending=False)
    df = df.fillna("")
    df.set_index("label", inplace=True)

    df = df[[
        "prevClose",
        "last",
        "change",
    ]]

    df.index.names = [""]
    df = df.rename(columns={
        "prevClose": "PrevClose",
        "last": "Last",
        "change": "Change"
    })

    font_color = ["white"] * 3 + [[
        "#e4003a" if boolv else "#00ACFF"
        for boolv in df["Change"].str.contains("-")
    ]]

    fig = imps.plot_df(
        df,
        fig_size=(550, (40 + (40 * len(df.index)))),
        col_width=[5, 3, 3],
        tbl_header=imps.PLT_TBL_HEADER,
        tbl_cells=imps.PLT_TBL_CELLS,
        font=imps.PLT_TBL_FONT,
        row_fill_color=imps.PLT_TBL_ROW_COLORS,
        paper_bgcolor="rgba(0, 0, 0, 0)",
    )
    fig.update_traces(cells=(dict(
        align=["center", "right"],
        font=dict(color=font_color),
    )))
    imagefile = imps.save_image("econ-softs.png", fig)

    return {
        "title": "Economy: [Finviz] Softs Futures",
        "imagefile": imagefile,
    }
示例#7
0
def test_get_futures(recorder):
    result_dict = finviz_model.get_futures()

    recorder.capture(result_dict)