VNPY利用郵件引擎,把引數最佳化結果作為附件傳送給預定郵箱

張國平發表於2022-12-13

一個簡單的引用,分成兩步,第一步增強郵件引擎,使得可以傳送附件郵件,第二部在回測widget的裡面加入一個新方法,在最佳化完成適合被呼叫。
下面程式碼是加入EmailEngine,新增一個add_attch, 增強send_email,不是很優雅,不過不會對已有用到send_email的不會又太大影響。

    def add_attch(self,msg,attch_dir,filename):
        """
        給郵件資訊物件新增附件
        """
        file_path = os.path.join(attch_dir, filename)
        ctype, encoding = mimetypes.guess_type(file_path)
        if ctype is None:
            ctype = "application/octet-stream"
        maintype, subtype = ctype.split("/")
        with open(file_path, "rb") as r:
            msg.add_attachment(
                r.read(), maintype=maintype, subtype=subtype, filename=filename)
        return msg
    def send_email(self, subject: str, content: str, receiver: str = "",attch_dir = "",filename = "") -> None:
        """"""
        # Start email engine when sending first email.
        if not self.active:
            self.start()
        # Use default receiver if not specified.
        if not receiver:
            receiver = SETTINGS["email.receiver"]
        msg = EmailMessage()
        msg["From"] = SETTINGS["email.sender"]
        msg["To"] = receiver
        msg["Subject"] = subject
        msg.set_content(content)
        if attch_dir:
            msg = self.add_attch(msg,attch_dir,filename)
        self.queue.put(msg)

然後在BacktesterManager這個類裡面新增一個方法,最佳化結果csv儲存到一個預定folder,併傳送

    def save_and_send_csv(self) -> None:
        """
        Save table data into a csv file
        """
        filepath  = r"C:\Desktop"
        filename = self.symbol_line.currentText() + self.start_date_edit.dateTime().toPyDateTime() + ".csv"
        path = os.path.join(filepath, filename)
        with open(path, "w", encoding='utf-8-sig') as f:
            writer = csv.writer(f, lineterminator="\n")
            writer.writerow(["引數", self.target_display])
            for tp in self.backtester_engine.get_result_values():
                setting, target_value, _ = tp
                row_data = [str(setting), str(target_value)]
                writer.writerow(row_data)
       self.main_engine.send_email_attchment(subject = filename , content = filename , attch_dir = filepath, filename = filename )


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2927868/,如需轉載,請註明出處,否則將追究法律責任。

相關文章