สอนสร้าง CDC Action Zone
ฟันกำไร Bitcoin บน Binance ด้วย Python ใน 5 นาที
ในยุคนี้ Indicator ยอดฮิต ทำกำไรได้ง่ายๆ ก็คือ CDC Action Zone เนื้อหาในบทนี้ จะไปไวหน่อย ไม่อธิบายแล้ว python, dataframe คืออะไร
เนื้อหานี้ เป็นฉบับย่อพิเศษ ประยุกต์จากคอร์ส Python For Investing และ Python for Crypto Trading (กำลังจะเปิด) ที่เราสอน
เนื้อแท้ของมันจริงๆแล้ว คือเส้น EMA หรือ exponential moving average 2 เส้นมาตัดกัน ซึ่งเส้น EMA นี้ จะแตกต่างกับ Simple Moving Average เส้นค่าเฉลี่ยเคลื่อนที่ปกติ ตรงที่ ให้น้ำหนักกับอดีตไม่เท่ากัน
EMA จะให้น้ำหนักกับเมื่อวาน มากกว่าเมื่อวานซืน มากกว่า เดือนที่แล้ว
เริ่มต้นกันที่
มือใหม่ ทำตาม แนะนำใช้ colab นะครับ ใครไม่รู้จัก เข้าที่นี่ได้เลย https://colab.research.google.com/ แค่ login ด้วย google แล้วทำตาม
- ลง package ที่เกี่ยวข้อง ในที่นี้เราจะดึงข้อมูลจาก binance กัน (bitkub เดี๋ยวมีอีกบทความ) โดยใช้ API python ที่ชาวเน็ตสร้างไว้ python-binance
!pip install python-binance
2. import library ที่เกี่ยวข้อง
from binance.client import Clientimport pandas as pd
3. เชื่อมต่อ API ผ่าน Client ที่เรา import ไว้ โดยที่เราจะยังไม่จำเป็นต้องใช้ API key, secret เพื่อเชื่อมต่อ เพราะเราแค่เข้าไปดึงข้อมูล
client = Client()
4. ดึง data ผ่าน get_historical_klines ซึ่งจะต้องกำหนด ticker, interval(timeframe ที่เราจะเทรด) และใส่วันที่ เป็น string ดังตัวอย่าง
bars = client.get_historical_klines('BTCUSDT', '1d', '1 Jan, 2021', '1 Jan, 2022')
5. จัดเก็บข้อมูลเข้า dataframe ให้เรียบร้อย เรื่องตลกนั้นมีอยู่ว่า ข้อมูลที่ออกมายาวเหยียด โดยไม่บอกอะไรเราเลย เราจะได้ข้อมูลมาดังรูป ใน List โดยข้อมูลทั้งหมดเป็น string ยกเว้น เวลา มาในรูปแบบ unix timestamp
จัดเข้า DataFrame กันให้เรียบร้อย โดยระบุชื่อ column
df = pd.DataFrame(bars, columns=['Date','Open','High','Low','Close','Volume','Close time','Quote asset volume','Number of trades', 'Taker buy base asset volume','Taker buy quote asset volume','Ignore'])
6. จัดการแปลงข้อมูลให้เป็นตัวเลขกันก่อน สังเกตใน dataframe ราคาเหรียญที่ออกมา มันมีเครื่องหมายฟันหนู ครอบอยู่แบบนี้ “1234” ้ แสดงว่าไม่ใช่ตัวเลข โดยใช้ pd.to_numeric เข้าไปทั้ง dataframe
df = df.apply(pd.to_numeric)
7. แปลงเป็นวันที่ให้เรียบร้อย ด้วย
df['Date'] = pd.to_datetime(df['Date'], unit='ms')
8. set index ให้เรียบร้อย
df.set_index('Date', inplace=True)
9. ตัดสิ่งไม่จำเป็นออกไป
df = df.iloc[:,5]
10. สร้าง ema 12 แท่งเทียน และ 26 แท่งเทียน
df['ema_short'] = df.Close.ewm(span=12, adjust=False,min_periods=12).mean()df['ema_long'] = df.Close.ewm(span=26, adjust=False,min_periods=26).mean()
11. สร้างเทรนด์ที่เกิดจาก ema ตัดกัน ถ้า ema_short มากกว่า ema_long ให้เป็น True แสดงว่าเป็นขาขึ้น
df['trend'] = df['ema_short'] > df['ema_long']
12. หาจุดเข้าซื้อ และจุดขาย โดยดูว่าเมื่อไหร่เส้นตัดขึ้น หรือตัดลง โดยเทียบวันนี้กับเมื่อวานว่าสัญญาณต่างกันหรือไม่
df.loc[(df.trend == True) & (df.trend.shift() == False),'action'] = 'buy'df.loc[(df.trend == False) & (df.trend.shift() == True),'action'] = 'sell'
เท่านี้ ก็เป็นอันสิ้นสุด ครับ ได้สัญญาณซื้อขายแล้ว
แต่เท่านั้นจะไปเห็นอะไร ดังนั้นเราต้องวาดกราฟออกมาด้วยครับ
13. เรามาสร้าง ลูกศรกันก่อน เรียกมันว่า marker_position ตัวนี้เราเผื่อไว้โดยใช้ Low, High ไปเลย เผื่ออนาคตไปทำเป็นกราฟแท่งเทียน เราก็ก๊อปตรงนี้ไปใช้ต่อได้ ส่วนจะห่างไป 5% หรือ กี่% นั้นก็แล้วแต่
df.loc[df['action'] == 'buy', 'marker_position'] = df['Low'] *0.95df.loc[df['action'] == 'sell', 'marker_position'] = df['High'] *1.05
14. จดไว้หน่อย ว่าเมื่อไหร่ซื้อ เมื่อไหร่ขาย ซื้อให้เป็น a ขายให้เป็น b จะได้ย่อๆก่อนไปใส่ตอนพลอตกราฟ
#buy action dataframea = df.loc[df.action == 'buy']#sell action dataframeb = df.loc[df.action == 'sell']
15 เราจะใช้ matplotlib ในการ plot แบบเบสิก กันสุดๆ
กำหนดขนาดด้วย figsize
พลอตเข้าไปทีละเส้น และระบุ label
ระบุลูกศรขึ้นสีเขียว ย่อด้วย ‘g^’ ลูกศรลงสีแดง ย่อด้วย ‘rv’
import matplotlib.pyplot as pltplt.figure(figsize=(10,6))plt.plot(df.Close, label='Close Price')plt.plot(df.ema_short, label='EMA 12')plt.plot(df.ema_long, label='EMA 26')plt.plot(a.marker_position, 'g^', markersize=10)plt.plot(b.marker_position, 'rv', markersize=10)plt.legend()
เท่านี้ ก็จะได้รูปแสนสวยไปโชว์กัน
ถัดไปก็ไปเชื่อมต่อซื้อขายครับ
แต่จะจิ้มมือ หรือใช้ API ยิงคำสั่งซื้อขายอัตโนมัติเอง ก็แล้วแต่สะดวก หากเราทำ tf สั้นหน่อย หลักนาที แล้วใช้บอทเทรด ก็สบายดี
ถ้ายังทำไม่เป็น สนใจศึกษาเพิ่ม ยิ่งเป็นเร็ว ยิ่งได้เงินเร็ว หรือสนใจเข้าร่วมกลุ่มชาว quant trader หรืออยากสนับสนุน ก็มาดูที่ Python for investing กันได้ครับ สอนตั้งแต่เบสิก ไปจน backtest และ algorithmic trading ส่งคำสั่งผ่าน API ได้ครบวงจร ตั้งแต่ หุ้น forex crypto
แต่ถ้างบน้อย เวลาน้อย ไม่ backtest ขอเทรดเลย แนะนำ python for crypto trading (เปิดตัว 30 มี.ค. ที่ skillane)
หรือค่อยๆ ติดตาม Investic ผ่านหน้าเพจ facebook หรือช่องทาง medium นี้ก็ได้ครับ