2012-07-23 89 views
1

我需要能夠確定某個特定的「交易」(以「信號」表示)是否通過指示每個贏利或虧損而導致盈利或虧損。如何在Python中對策略進行回溯測試

我需要Python來檢查在高和低列出的下一個位置(signal或入口點或日期+ 1)(名單:closehighs,並lows將有相同數量的值),以便在輸入信號之外的某個點增加等於或大於2.5%的值。

但是,我還希望Python確定在升值2.5%或更多之前值是否下降3%或更多。

這必須發生在signal中的每個條目。

從本質上講,我需要一個限價在102.5%出售,止損在97%。

不幸的是,到目前爲止我開發的代碼似乎沒有工作。

我錯過了什麼?

signals = [1,5,7] 
close = [5,10,10,10.5,11,12,11.9,14,14,15,16] 
highs = [7,10.2,10.1,11,12,12.1,12.2,14.5,18,19,20] 
lows = [4,9.9,9.8,10,10,11.8,11.8,12,13.8,13.85,14] 

for i in signals: 
    entry = close[i] 
    print i 
    for high in highs[i+1:]: 
     profit = ((high - entry)/entry) * 100 
    for low in lows[i+1:]: 
     loss = ((low - entry)/entry) * 100 
    if abs(loss) < 3: 
     if profit >= 2.5: 
      print 'Win' 
     else: 
      print 'Loss' 

回答

2

profit只爲highs[-1]loss計算的計算只針對lows[-1]。其他所有內容都將被丟棄,因爲您在每個循環中替換了profitloss

您想要查找集合其中您的條件爲真的值。使用zip將低點和高點放在一起:

for i in signals: 
    entry = float(close[i]) 
    for high, low in zip(high[i + 1:], low[i + 1:]): 
     profit = ((high - entry)/entry) * 100 
     loss = ((low - entry)/entry) * 100 
     if loss > -3: 
      if profit >= 2.5: 
       print "Win" 
      else: 
       print "Loss" 
+0

我該如何解決這個問題? – user1526586 2012-07-23 09:08:04

+0

我需要它來看每個高點,如果一個比入口點高2.5%,而沒有低於2.5%增加點之前的入口點的3%,它將打印出「Win 「。 – user1526586 2012-07-23 09:14:26

+0

@ user1526586:成對?所以如果高[3]高2.5,低[3]低於3%?你的算法不清楚。 – 2012-07-23 09:18:37

1

您是否已經檢查過python-libraries進行回溯測試?事實上,我使用其他庫,但也有一些非常流行的基於python的解決方案,如「pybacktest」,「PyAlgoTrade」或「UltraFinance」。也許整合這樣一個庫可能對你的用例有利...