2023-05-17|閱讀時間 ‧ 約 17 分鐘

用AI打造交易人需要的日常工具(零)

使用AI如ChatGPT來提昇工作效率已經成為今年最熱門的顯學,透過提示工程(Prompt Engineering)不管是使用AI寫作,寫code,甚至快速寫出所需要的工具,都可以在比以往所需時間的一半甚至更少時間完成。這個工具系列挑戰就是想透過AI快速的建立一個交易人在交易的時候所需要的各種工具,包括報表,策略,技術分析,機器學習等所有工具。看完這個系列相信除了產生交易相關工具外,對怎麼使用AI加速工作效率也能略有領悟。
這篇文章是第零篇文章,將會透過介紹如何實作提示工程來產生所需要的文圖程式碼來產生一個紀錄交易小程式。(劇透: 本篇文章文字產生時間約為半小時,主要時間花在重複測試prompt與加入所需要的元素)。為區分AI與本人的寫作,AI寫作部分將由粗體字呈現。

要解決的問題: 產生一個交易紀錄小服務

在證券期貨商品交易的世界,一個好的交易者最重要的第一步就是保持交易紀錄,並透過檢視分析自己的交易紀錄來驗證自己的交易策略和績效是否符合期待。這個交易紀錄可以是最基本的google sheet或是excel檔,也可以是進階一些的網路服務(web app)。接下來示範如何透過AI(chatGPT)來產生此份需求。
通常正常人很難一次到位的把提示寫的盡善盡美。前史丹佛大學教授AI界大神Andrew Ng在他的Prompt Engineering課程中再三呼籲好的提示要能:
  1. 寫出清楚且明確的指示,給出AI必須擔任的角色。
  2. 給模型時間思考,也就是將工作條列式表達完成。
  3. 一步一步建構,每一次建構時都需回頭檢視哪裡沒有達到需求。
  4. 清楚表達所需要產生的格式,如python程式碼,csv檔案。
在不斷實驗下驗證下,以下是經過數次循環產生文件與程式碼並透過檢查輸出不斷修改出來的最終版提示,這邊以括號內的數字表示不同階段給的提示。
----
你是一位熟悉Excel或Google表格的專業人士,我需要一個工作表來記錄股票交易者的交易紀錄。該工作表應包含以下內容:
  1. 交易編號
  2. 入場日期
  3. 做多或做空
  4. 股票代號
  5. 交易股數
  6. 入場價格
  7. 當前價格
  8. 入場交易費用
  9. 其他費用
  10. 總入場花費 = 第5項 * 第6項 + 第7項 + 第8項
  11. 交易指標(例如通道寬度)
  12. 出場日期
  13. 出場價格
  14. 出場交易費用
  15. 其他費用
  16. 總出場收益 = 第13項 * 第5項 - 第14項 - 第15項
  17. 盈虧 = 第16項 - 第10項
  18. 入場評分
  19. 出場評分
  20. 交易評分
  • 請提供一段用於生成上述工作表的Python代碼。(一)
  • 將程式碼轉化成 streamlit網路服務介面並創造出相應之按鈕。(二)
(註:streamlit為資料科學家常用之雛形網路服務庫)
  • 接下來你是一個部落客作家,透過產生之程式碼寫出相應之文章。(三)
  • 加入以下引用: 引用自進入我的交易室一書第八章,作者亞歷山大·埃爾德(四)
  • 另外產生一個python檔案讀取生成之交易紀錄檔並產生Profit/Loss對應時間的圖表(五)
---
以下為AI產生出來的結果,確實很驚人!
標題:使用Python建立交易工作表:逐步指南(參考《進入我的交易室》一書,作者:亞歷山大·埃爾德)
簡介: 在股票交易領域中,準確記錄交易紀錄對於分析績效和做出明智決策至關重要。儘管像Excel或Google Sheets等試算表工具通常用於此目的,但我們可以利用Python創建定制的交易工作表。在本逐步指南中,我們將引導您透過Python建立交易工作表的過程,使您能夠高效記錄和分析您的股票交易紀錄。
先決條件: 為了跟隨本教程,您需要安裝Python和以下庫:
  • pandas:一個強大的數據處理庫。
  • streamlit:一個用於構建交互式應用程序的易用框架。
第1步:環境設置 首先,在項目目錄中創建一個新目錄並初始化虛擬環境。打開終端或命令提示符,運行以下命令:
mkdir trading-worksheet
cd trading-worksheet
python -m venv env
source env/bin/activate  # 對於Unix系統
env\Scripts\activate  # 對於Windows系統
第2步:安裝所需庫 在終端中運行以下命令安裝所需庫:
pip install streamlit pandas
第3步:創建Streamlit界面 創建一個新的Python文件,例如trading_worksheet.py,並在首選的文本編輯器中打開它。將以下代碼複製到文件中:
import streamlit as st
import pandas as pd

# 創建一個空字典以存儲交易細節
columns = {
    '交易編號': [],
    '入場日期': [],
    '做多或做空': [],
    '股票代號': [],
    '交易股數': [],
    '入場價格': [],
    '當前價格': [],
    '入場交易費用': [],
    '其他費用': [],
    '總入場花費': [],
    '交易指標': [],
    '出場日期': [],
    '出場價格': [],
    '出場交易費用': [],
    '其他費用': [],
    '總出場收益': [],
    '盈虧': [],
    '入場評分': [],
    '出場評分': [],
    '交易評分': []
}

# 創建Streamlit界面
st.title('股票交易紀錄')

# 提示用戶輸入要記錄的交易數量
num_transactions = st.number_input('輸入交易數量:', min_value=1, step=1)

# 根據交易數量迭代
for i in range(num_transactions):
    st.header(f'交易 {i + 1}')
    # 提示用戶輸入交易細節並將其添加到字典中

# 從字典創建DataFrame
df = pd.DataFrame(columns)

第4步:收集交易細節 在迴圈中,提示用戶輸入交易細節,如入場日期、做多或做空、股票代號、交易股數、入場價格、當前價格、入場交易費用、其他費用、交易指標、出場日期、出場價格、出場交易費用和其他費用。將以下代碼更新到迴圈中:
for i in range(num_transactions):
    st.header(f'交易 {i + 1}')
    transaction_number = i + 1
    date_of_entry = st.text_input('入場日期(YYYY-MM-DD):')
    long_or_short = st.selectbox('做多或做空:', ['做多', '做空'])
    stock_ticker = st.text_input('股票代號:')
    number_of_stocks_traded = st.number_input('交易股數:', min_value=0.0, step=0.01)
    price_of_entry = st.number_input('入場價格:', min_value=0.0, step=0.01)
    current_price = st.number_input('當前價格:', min_value=0.0, step=0.01)
    entry_transaction_fees = st.number_input('入場交易費用:', min_value=0.0, step=0.01)
    other_fees = st.number_input('其他費用:', min_value=0.0, step=0.01)
    trading_metric = st.text_input('交易指標(例如通道寬度):')
    date_of_exit = st.text_input('出場日期(YYYY-MM-DD):')
    price_of_exit = st.number_input('出場價格:', min_value=0.0, step=0.01)
    exit_transaction_fees = st.number_input('出場交易費用:', min_value=0.0, step=0.01)
    other_fees_exit = st.number_input('其他出場費用:', min_value=0.0, step=0.01)

    total_entry_spend = number_of_stocks_traded * price_of_entry + current_price + entry_transaction_fees
    total_exit_gain = price_of_exit * number_of_stocks_traded - exit_transaction_fees - other_fees_exit
    profit_loss = total_exit_gain - total_entry_spend

    # 將值添加到字典的相應列中
    columns['交易編號'].append(transaction_number)
    columns['入場日期'].append(date_of_entry)
    columns['做多或做空'].append(long_or_short)
    columns['股票代號'].append(stock_ticker)
    columns['交易股數'].append(number_of_stocks_traded)
    columns['入場價格'].append(price_of_entry)
    columns['當前價格'].append(current_price)
    columns['入場交易費用'].append(entry_transaction_fees)
    columns['其他費用'].append(other_fees)
    columns['總入場花費'].append(total_entry_spend)
    columns['交易指標'].append(trading_metric)
    columns['出場日期'].append(date_of_exit)
    columns['出場價格'].append(price_of_exit)
    columns['出場交易費用'].append(exit_transaction_fees)
    columns['其他費用'].append(other_fees_exit)
    columns['總出場收益'].append(total_exit_gain)
    columns['盈虧'].append(profit_loss)
    columns['入場評分'].append('')
    columns['出場評分'].append('')
    columns['交易評分'].append('')

5步:此外,借助Python及其強大的可視化庫(如matplotlib或seaborn),您可以基於記錄在交易工作表中的盈虧數據創建深入的視覺化效果。通過將盈虧數據與日期進行繪製,您可以在視覺上對自己的交易績效有更深入的了解。
要生成盈虧的視覺化效果,您可以利用從交易工作表生成的Excel表格中存儲的數據。首先,導入必要的庫:接下來,將Excel文件讀取到DataFrame中:假設您的Excel表格中有一個名為「Date of Entry」的列,其中包含日期,以及一個名為「Profit/Loss」的列,代表每筆交易的盈虧情況,您可以創建一個折線圖來視覺化隨時間累計的盈虧情況。
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_excel('transaction_logs.xlsx')

# Convert the "Date of Entry" column to datetime data type
df['Date of Entry'] = pd.to_datetime(df['Date of Entry'])

# Sort the DataFrame by date
df.sort_values('Date of Entry', inplace=True)

# Calculate the cumulative sum of profit/loss
df['Cumulative Profit/Loss'] = df['Profit/Loss'].cumsum()

# Create the plot
plt.figure(figsize=(10, 6))
plt.plot(df['Date of Entry'], df['Cumulative Profit/Loss'])
plt.title('Cumulative Profit/Loss Over Time')
plt.xlabel('Date')
plt.ylabel('Cumulative Profit/Loss')
plt.xticks(rotation=45)
plt.grid(True)

# Display the plot
plt.show()
第6步:保存工作表 在這一點上,用戶已經輸入了所有必要的交易細節。要將交易工作表保存為Excel文件,在迴圈之後添加以下代碼:
# 從字典創建DataFrame
df = pd.DataFrame(columns)

# 將DataFrame保存為CSV文件
df.to_excel('transaction_logs.xlsx', index=False)
st.success('交易工作表已保存為「transaction_logs.xlsx」')

第7步:運行應用程序 要運行應用程序,打開終端或命令提示符,切換到項目目錄並執行以下命令:
streamlit run trading_worksheet.py
結論: 在本逐步指南中,我們展示了如何使用Python和Streamlit庫來創建交易工作表,並參考了亞歷山大·埃爾德的《進入我的交易室》一書中的原則。通過遵循本指南,您可以開發一個定制的工具,用於記錄和分析您的股票交易紀錄,幫助您深入了解自己的績效並為未來的交易策略做出基於數據的決策。隨著Python的靈活性和埃爾德博士的原則,您將能夠建立一個強大的交易系統。祝您交易愉快!
--
檢視以上AI產生的程式碼和文字,可以很坦白的說正確率尤其是程式碼部份極高。拜chatGPT大量閱讀程式碼之賜,現在的AI已經可以準確地寫出提示明確的程式碼。在文字部份也是基本符合給出的提示需求。最後產生出來的web服務測試過後略為修改一點點也可以正確啟用。如此一來AI已經可以幫助我們大幅度減少所需要的工時,而讓我們尤其是交易者可以專心思考重要的細節,如策略條件,產生何種技術分析。若是分析師也可以快速產生所需要的文字說明。
各位要不要也試試看呢?
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.