Video

Isi Kandungan:

Anonim

Nota: Saya mula memindahkan blog saya ke http://kylelix7.github.io/ . Saya akan mula menyiarkan idea-idea baru di sana juga.


Dalam salah satu jawatan saya yang lebih lama, saya menunjukkan cara untuk mengira penunjuk teknikal yang boleh digabungkan secara logik untuk membina strategi perdagangan. Seperti yang ditekankan dalam jawatan itu, seseorang harus mengesahkan betapa strategi itu dilakukan dengan backtesting sebelum memohonnya dalam pasaran sebenar.

Backtesting adalah proses menerapkan strategi perdagangan atau kaedah analitik ke data sejarah untuk melihat betapa tepatnya strategi atau kaedah akan meramalkan hasil sebenar.
- daripada melabur jawapan

Backtest adalah seperti pengesahan silang dalam pembelajaran mesin. Tetapi ia tidak sama. Backtest memerlukan pemisahan data ke dalam dua bahagian seperti pengesahan silang. Satu set adalah untuk latihan, yang lain adalah untuk tujuan pengesahan. Perbezaannya ialah ujian ujian berpecah boleh dilakukan secara rawak untuk pengesahan silang. Semasa dalam trading backtesting, data anda adalah siri masa. Data latihan anda mestilah lebih tua daripada data ujian anda. Jika tidak, anda mengintip di masa hadapan yang menyebabkan pengukuran strategi anda tidak tepat. Oleh itu perpecahan dataset tidak boleh rawak dalam backtesting. Backtesting melibatkan simulasi pasaran di dunia nyata. Ia boleh menjadi sukar dan mudah difahami untuk melaksanakan perpustakaan backtesting anda sendiri. Nasib baik ada Backtrader.

Backtrader adalah kerangka python sumber terbuka yang mengagumkan yang membolehkan anda memberi tumpuan kepada penulisan strategi perdagangan, penunjuk dan penganalisis yang boleh digunakan semula daripada perlu membina infrastruktur bangunan masa. Ia menyokong backtesting untuk anda untuk menilai strategi yang anda buat juga!

Dengan itu dikatakan, ia adalah penyelesaian yang bebas dan lengkap untuk orang teknis untuk membina strategi mereka sendiri. Mari kita mulakan.

Pemasangan dan persediaan

pip memasang backtrader merancang

Bina strategi

Backtrader telah menentukan antara muka strategi untuk anda. Anda perlu membuat kelas dengan melaksanakan antara muka ini. Kaedah penting adalah seterusnya () di mana anda harus membuat keputusan sama ada anda perlu BELI, MENJUAL atau JANGAN berdasarkan penunjuk teknikal pada hari tertentu. Strategi mudah kelihatan seperti ini.

import backtrader sebagai bt
kelas MyStrategy
(bt.Strategy):
def __init __ (diri):
self.sma = bt.indicators.SimpleMovingAverage (period = 15)
def seterusnya (diri):
jika self.sma> self.data.close:
# Lakukan sesuatu
lulus
elif self.sma <self.data.close:
# Lakukan sesuatu yang lain
lulus

Seperti yang anda lihat, backtrader telah dihantar dengan satu set penunjuk teknikal yang sama. Ini bermakna anda tidak perlu membalas sendiri atau TA lib untuk mengira penunjuk teknikal.

Backtrader juga menawarkan ciri-ciri dalam mensimulasikan dagangan dalam penandaan. Sekali boleh faktor komisen dalam operasi perdagangan anda berdasarkan dolar atau peratusan.

cerebro.broker.setcommission (komisi = 0.001)

Di bawah ini adalah contoh keseluruhan untuk demonstrasi backtesting dengan data pasaran Facebook bersejarah. Ambil perhatian bahawa, data perdagangan sejarah dimuat turun dari Yahoo Finance. Ia juga menyokong frasa data panda. Saya mempunyai jawatan mengenai mengumpul data dagangan dengan panda di sini. Contohnya terdiri daripada TestStrategy mudah dan sekeping kod pemacu yang menendang backtesting. Strategi mudah hanya menganggap RSI untuk isyarat BUY / SELL. Anda perlu menambah logik untuk stok yang anda pilih.

dari __future__ import (absolute_import, division, print_function,
unicode_literals)
import masa tarikh
import os.path
import sys
import backtrader sebagai bt

kelas TestStrategy (bt.Strategy):
def log (sendiri, txt, dt =Tiada):
dt = dt atau self.datas 0 .datetime.date (0)
cetak ('% s,% s' % (dt.isoformat (), txt))
def __init __ (diri):
self.dataclose = self.datas 0 .close
self.order = Tiada
self.buyprice = Tiada
self.buycomm = Tiada
self.sma = bt.indicators.SimpleMovingAverage (self.datas 0, period = 15)
self.rsi = bt.indicators.RelativeStrengthIndex ()
def notify_order (self, order):
jika status pesanan dalam order.Submitted, order.Accepted:
kembali
jika
status pesanan dalam order.Completed:
jika order.isbuy ():
self.log (
'BUY EXECUTED, Price:% .2f, Cost:% .2f, Comm% .2f' %
(order.executed.price,
order.executed.value,
order.executed.comm))
self.buyprice = order.executed.price
self.buycomm = order.executed.comm
lain: # Jual
self.log ('JUAL DIJUAL, Harga:% .2f, Kos:% .2f, Comm% .2f' %
(order.executed.price,
order.executed.value,
order.executed.comm))
self.bar_executed = len (diri)
elif status pesanan dalam order.Cancelled, order.Margin, order.Rejected:
self.log ('Pesanan Dibatalkan / Margin / Ditolak')
# Tulis: tiada pesanan tertunda
self.order = Tiada
def
notify_trade (diri, perdagangan):
jika tidak trade.isclosed:
kembali
self.log ('KEUNTUNGAN OPERASI, KERAHIAN% .2f, NET% .2f' %
(trade.pnl, trade.pnlcomm))
def seterusnya (diri):
self.log ('Tutup,% .2f' % self.dataclose 0)
cetak ('rsi:', self.rsi 0)
jika self.order:
kembali
jika tidak
self.position:
jika (self.rsi 0 <30):
self.log ('BELI BUAT,% .2f' % self.dataclose 0)
self.order = self.buy (size = 500)
lain:
jika (self.rsi 0> 70):
self.log ('JUAL CREATE,% .2f' % self.dataclose 0)
self.order = self.sell (size = 500)

jika __name__ == '__main__':
cerebro = bt.Cerebro ()
cerebro.addstrategy (TestStrategy)
cerebro.broker.setcommission (komisi = 0.001)
datapath = 'FB.csv'
# Buat Suapan Data
data = bt.feeds.YahooFinanceCSVData (
dataname = datapath,
fromdate = datetime.datetime (2013, 1, 1),
todate = datetime.datetime (2018, 8, 5),
terbalik =Benar)
cerebro.adddata (data)
cerebro.broker.setcash (100000.0)
cetak ('Nilai Portfolio Permulaan:% .2f' % cerebro.broker.getvalue ())
cerebro.run ()
cetak ('Nilai Portfolio Akhir:% .2f' % cerebro.broker.getvalue ())
cerebro.plot ()

Pada akhir pelaksanaan, anda boleh mengetahui nilai akhir portfolio anda. Anda juga boleh merancang harga saham, penunjuk teknikal, operasi BUY / SELL anda dan nilai portfolio anda sehubungan dengan masa.

Seperti yang anda dapat lihat, strategi mudah ini berfungsi dengan baik dengan FB kerana ia menangkap beberapa peluang membeli dan menjual.

Itulah untuk backtesting dengan backtrader. Jika anda ingin menyelam lebih mendalam, saya menggalakkan anda melawat dokumen backtrader untuk kegunaan yang lebih maju. Pengekodan dan perdagangan gembira!


Bacaan yang disyorkan:

Apa Funding Hedge Really Do

Python untuk Analisis Data: Data Wrangling dengan Pandas, NumPy, dan IPython


Jawatan saya yang lain:

Pembelajaran Peneguhan: Pengenalan kepada Pembelajaran Q

Strategi Perdagangan: Analisis Teknikal dengan TA-Lib Python

Optimasi Portfolio untuk Risiko Minimum dengan Scipy - Frontier Cekap Dijelaskan

Mengurangkan Risiko dengan Portfolio Bangunan

Dagangan: Kira Petunjuk Analisis Teknikal dengan Pandas 🐼

Kumpulkan Data Dagangan dengan Pandas

Disyorkan Pilihan Editor