2

我需要能够通过指示每个交易的赢或输来确定特定的“交易”(由“信号”表示)是否导致了盈利或亏损。

我需要 Python 检查High 和 Low 列表(列表: 、和将具有相同数量的值)中的下一个位置(signal或入口点或 date + 1)是否增加等于或大于 2.5 % 在某个点超出入场信号。closehighslows

但是,我还希望 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'
4

2 回答 2

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"
于 2012-07-23T09:06:29.183 回答
2

您是否已经检查了 python 库以进行回测?事实上,我使用其他库,但有一些非常流行的基于 python 的解决方案,例如“pybacktest”、“PyAlgoTrade”或“UltraFinance”。也许集成这样的库可能对您的用例有利......

于 2014-10-05T07:40:25.413 回答