กลยุทธ์การซื้อขายด้วย SMA Crossover
import pandas as pd
import matplotlib.pyplot as plt
data['SMA5'] = data['Close'].rolling(window=180).mean()
data['SMA20'] = data['Close'].rolling(window=365).mean()
buy_signals = (data['SMA5'] > data['SMA20']) & (data['SMA5'].shift(1) <= data['SMA20'].shift(1))
sell_signals = (data['SMA5'] < data['SMA20']) & (data['SMA5'].shift(1) >= data['SMA20'].shift(1))
plt.figure(figsize=(14, 7))
plt.plot(data['Close'], label='Close Price',color = 'bisque', alpha=0.5)
plt.plot(data['SMA5'], label='SMA 180 days', color='salmon', linewidth=1)
plt.plot(data['SMA20'], label='SMA 365 days', color='orange', linewidth=1)
plt.scatter(data.index[buy_signals], data['Close'][buy_signals], marker='^', color='green', label='Buy Signal')
plt.scatter(data.index[sell_signals], data['Close'][sell_signals], marker='v', color='red', label='Sell Signal')
plt.title('Buy/Sell Points with SMA Crossover')
plt.xlabel('Date')
plt.ylabel('Close Price')
plt.legend()
plt.grid()
plt.show()
กลยุทธ์ SMA Crossover เป็นหนึ่งในกลยุทธ์การซื้อขายทางเทคนิคที่นิยมใช้ในการลงทุน ซึ่งช่วยระบุแนวโน้มของตลาดและให้สัญญาณซื้อขายที่ชัดเจน
ในโค้ดนี้ เราคำนวณค่าเฉลี่ยเคลื่อนที่ 2 แบบ:
SMA5
: ค่าเฉลี่ยเคลื่อนที่ในช่วง 180 วัน (ระยะสั้น)SMA20
: ค่าเฉลี่ยเคลื่อนที่ในช่วง 365 วัน (ระยะยาว)เมื่อ SMA 180 วัน ตัดขึ้นเหนือ SMA 365 วัน แสดงว่าเป็นแนวโน้มขาขึ้น จึงเป็นสัญญาณซื้อ
buy_signals = (data['SMA5'] > data['SMA20']) & (data['SMA5'].shift(1) <= data['SMA20'].shift(1))
เมื่อ SMA 180 วัน ตัดลงต่ำกว่า SMA 365 วัน แสดงว่าเป็นแนวโน้มขาลง จึงเป็นสัญญาณขาย
sell_signals = (data['SMA5'] < data['SMA20']) & (data['SMA5'].shift(1) >= data['SMA20'].shift(1))
เราแสดงราคาปิด, เส้น SMA ทั้งสอง, และจุดสัญญาณซื้อขายบนกราฟเดียวกัน เพื่อให้เห็นภาพชัดเจน