éåæèµç³»åæç« ï¼
Backtrader æç¨ â Python éåæèµå®ææç¨(1)
Python éåæèµå®ææç¨(2) âMACDçç¥
Python éåæèµå®ææç¨(3) âAè¡åæµMACDçç¥
Python éåæèµå®ææç¨(4) âKDJ çç¥
Python éåæèµå®ææç¨(5) â Aè¡åæµKDJ çç¥
Githubä»åºï¼
github.com/Ckend/pythoâ¦
å¨ä¹åçäºç¯ç³»åæç« ä¸ï¼è®¡ç®æ¶ççæ¶æ²¡æèèæ¯æ¬¡æçç¥è¿è¡äº¤ææ¶çæ¶ççï¼èæ¯åçº¯åæµä¸æ®µæ¶é´åï¼éè¿è®¡ç®æç»ä»·å¼åæ¬éçå·®è·å¹¶é¤ä»¥æ¬éï¼å¾å°æç»æ¶ççãè¿æ ·çè®¡ç®æ¹æ³å
¶å®æ¯ä¸åç¡®çï¼å ä¸ºäº¤ææ¶æ¯æ¬¡é½éç¨100è¡çå½¢å¼è¿è¡ï¼å¨æ²¡æå¼å
¥è°ä»ææ¯åï¼æä»¬åºè¯¥ä»¥æ¯æ¬¡äº¤æç平忶çç为åã
å
·ä½è®¡ç®æ¹æ³å¦ä¸ï¼
卿¯æ¬¡ä¹°å
¥è¡ç¥¨çæ¶åï¼è®°å½è´ä¹°ä»·æ ¼ï¼self.buyprice
卿¯æ¬¡ååºè¡ç¥¨çæ¶åï¼è®¡ç®æ¶ççï¼
(ååºä»·æ ¼-ä¹°å
¥ä»·æ ¼)/ä¹°å
¥ä»·æ ¼
ï¼å¿½ç¥ä½£éã
å°æ¯æ¬¡äº¤ææ¶çåå
¥paramsåéä¸ï¼ä»¥ä¾¿åç»åæã
å¼å§ä¹åï¼ä½ è¦ç¡®ä¿Pythonåpipå·²ç»æåå®è£
å¨çµèä¸ï¼å¦ææ²¡æï¼è¯·è®¿é®è¿ç¯æç« ï¼
è¶
详ç»Pythonå®è£
æå
è¿è¡å®è£
ãå¦æä½ ç¨Pythonç主è¦ç®çæ¯æ°æ®åæï¼å¯ä»¥ç´æ¥å®è£
Anacondaï¼
Pythonæ°æ®åæä¸ææå¥½å¸®æâAnaconda
ï¼å
å«è®¸å¤ç§å¦è®¡ç®æ¨¡åã
Windowsç¯å¢ä¸æå¼Cmd(å¼å§âè¿è¡âCMD)ï¼è¹æç³»ç»ç¯å¢ä¸è¯·æå¼Terminal(command+ç©ºæ ¼è¾å
¥Terminal)ï¼åå¤å¼å§è¾å
¥å½ä»¤å®è£
ä¾èµã
å½ç¶ï¼ææ´æ¨è大家ç¨VSCodeç¼è¾å¨ï¼ææ¬æä»£ç Copy䏿¥ï¼å¨ç¼è¾å¨ä¸æ¹çç»ç«¯è¿è¡å½ä»¤å®è£
ä¾èµæ¨¡åï¼å¤èæçä¸ä»¶äºï¼
Python ç¼ç¨çæå¥½ææ¡£âVSCode è¯¦ç»æåã
å¨ç»ç«¯è¾å
¥ä»¥ä¸å½ä»¤å®è£
æä»¬æéè¦çä¾èµæ¨¡å:
pip install backtrader
çå° Successfully installed xxx å说æå®è£
æåã
Backtraderåºæ¬ä½¿ç¨è¯·çæä»¬åä¸ç¯æç« ï¼
backtraderæç¨âéåæèµå®ææç¨(1)
æ¬æå
¨é¨ä»£ç ï¼è¯·å¨Pythonå®ç¨å®å
¸åå°åå¤ï¼
éåæèµ6
è¿è¡ä¸è½½ã
2.äº¤ææ¶çç
以第äºç¯ç
macdçç¥
为ä¾ï¼é¦å
åå§åçç¥åéï¼ç¨äºè®°å½è¡ç¥¨äº¤æçæ¯æ¬¡æ¶ççï¼
class TestStrategy(bt.Strategy):
params = (
('code', 0),
('profits', [])
å¤å¶ä»£ç
第äºï¼è¦å¨notify_order彿°ä¸è®°å½è´ä¹°æ¶çä»·æ ¼ï¼
def notify_order(self, order):
if order.status in [order.Submitted, order.Accepted]:
return
if order.status in [order.Completed]:
if 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
self.bar_executed_close = self.dataclose[0]
å¤å¶ä»£ç
第ä¸ï¼å¨ååºçæ¶åï¼æ ¹æ®ååºä»·æ ¼åä¹°å
¥ä»·æ ¼è®¡ç®æ¶ççï¼å¹¶åå
¥çç¥åééçprofitsåéä¸ï¼
def notify_order(self, order):
if order.status in [order.Submitted, order.Accepted]:
return
if order.status in [order.Completed]:
if 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
self.bar_executed_close = self.dataclose[0]
else:
self.log(
"SELL EXECUTED, Price: %.2f, Cost: %.2f, Comm %.2f"
% (order.executed.price, order.executed.value, order.executed.comm)
profit_rate = float(order.executed.price - self.buyprice)/float(self.buyprice)
self.params.profits.append(profit_rate)
self.bar_executed = len(self)
å¤å¶ä»£ç
å¨çç¥è¿è¡å®æ¯åï¼å¯ä»¥éè¿ä»¥ä¸åéè·å¾çç¥åééprofitsçå¼ï¼
cerebro.runstrats[0][0].params.profits
å¤å¶ä»£ç
ç»æå¦ä¸ï¼
[0.021676761236850372, -0.1054225992123598, 0.10678571428571423, 0.11044953855314062, 0.21502209131075103, 0.15729837813819164, 0.10841304881039966, 0.16918294849023086]
å¤å¶ä»£ç
å¯ä»¥çå°ï¼æ¯æ¬¡è¯¥çç¥è¿è¡äº¤ææ¶çæ¶ççï¼ç¬¬ä¸æ¬¡çå©2%ãç¬¬äºæ¬¡äºæ10%ãç¬¬ä¸æ¬¡çå©10%ãç¬¬åæ¬¡çå©11%...
æè¶£çæ¯ç¬¬äºæ¬¡ï¼çå©äº21%ï¼è¿ä¸ªçç¥æææ¯å¨çå©10%çæ¶åååºï¼ä¸ºä»ä¹è¿æ¬¡äº¤æè½çå©21%ï¼
ä¸»è¦æ¯å¨æ¶¨åæ¿ä¹ä¸ï¼è¡ç¥¨æ æ³ååºå¯¼è´çã
è¿ä¹ç»æä»¬ä¸ä¸ªhintï¼è¿ä¸ªçç¥åæ»ç涨/è·10%ååºæ¯ä¸æ¯è¿äºæ»æ¿äºï¼ææ²¡ææ´åéçååºçç¥ï¼
大家å¯ä»¥å°è¯ä¸ä¸æ¾å°æ´å¥½çååºçç¥ï¼ä¸ä¸ç¯æç« 䏿们å°éç¹è®¨è®ºè¿ä¸ªé®é¢ã
3. 平忶çç
使ç¨numpyçmean彿°ï¼å¯ä»¥ç´æ¥ç®åºæ°ç»çå¹³åå¼ï¼
print(np.mean(profits))
å¤å¶ä»£ç
ç»æå¦ä¸ï¼
0.09792573520161482
å¹³å䏿¥ï¼è¯¥çç¥å¨è¿åªè¡ç¥¨ä¸çæ¶çç为9.7%.
使¯è¿å¹¶ä¸ä»£è¡¨è¿ä¸ªçç¥æ¯å¯ç¨çï¼å 为æå¯è½å®åªæ¯éç¨äºè¿åªè¡ç¥¨ï¼æ¯å¦éåææè¡ç¥¨éè¦éè¿åæµAè¡æ¥å³å®ï¼
Python éåæèµå®ææç¨(3) âAè¡åæµMACDçç¥
æä»¬çæç« å°æ¤å°±ç»æå¦ï¼å¦æä½ 忬¢æä»¬ä»å¤©ç
Python 宿æç¨
ï¼è¯·æç»å
³æ³¨æä»¬ï¼å¦æå¯¹ä½ æå¸®å©ï¼éº»ç¦å¨ä¸é¢ç¹ä¸ä¸ªèµ/å¨çå¦ï¼æä»»ä½é®é¢é½å¯ä»¥å¨ä¸æ¹çè¨åºçè¨ï¼æä»¬é½ä¼èå¿è§£ççï¼
Pythonå®ç¨å®å
¸
ä¸åªæ¯ä¸ä¸ªå®å
¸