1

特定の「トレード」(「シグナル」で示される)が勝ち負けを示すことによって利益または損失をもたらしたかどうかを判断できる必要があります。エントリ信号を超えたある時点で2.5%以上の値の増加がないか、高リストと低リストの次の場所をチェックするためにPythonが必要です。ただし、2.5%以上を評価する前に、Pythonで値が3%以上低下したかどうかを判断することも必要です。残念ながら、これまでに開発したコードは機能していないようです。私は何が欠けていますか?

Signal = [1,5,7]
Close = [5,10,10,10.5,11,12,11.9,14,14,15,16]
High =  [7,10.2,10.1,11,12,12.1,12.2,14.5,18,19,20]
Low =   [4,9.9,9.8,10,10,11.8,11.8,12,13.8,13.85,14]

for i in Signal:
    Entry = []
    Entry.append(Close[i])
    for Ent in Entry:
        print [Ent]
        for Value in High[i+1:]:
            Profit = ((Value - Ent)/Ent)*100
        for Value in Low[i+1:]:
            Loss = ((Value - Ent)/Ent)*100
        while (abs(Loss) < 3):
            if Profit >= 2.5:
                print 'Win'
                break
            else:
                print 'Loss'
                break
4

3 に答える 3

1

何をしようとしているのかよくわかりません。ここには意味のないコードがたくさんあります。

    Entry = []
    Entry.append(Close[i])

と置き換えることができます

    Entry = [Close[i]]

そして、これらの行はここにありますか?

        for Value in High[i+1:]:
            Profit = ((Value - Ent)/Ent)*100

意味的に同一です

        Profit = ((High[-1] - Ent) / Ent) * 100

これらと同じこと:

        for Value in Low[i+1:]:
            Loss = ((Value - Ent)/Ent)*100

彼らはこれを意味します、基本的に:

        Loss = ((Low[-1] - Ent) / Ent) * 100

これに関して:

        while (abs(Loss) < 3):
            if Profit >= 2.5:
                print 'Win'
                break
            else:
                print 'Loss'
                break

これに置き換えることができます:

        if abs(Loss) < 3:
            if Profit >= 2.5:
                print 'Win'
            else:
                print 'Loss'

そして、それをすべてまとめると、次のようになります。

for i in Signal:
    Entry = Close[i]
    print [Entry]
    Profit = ((High[-1] - Entry)/Entry)*100
    Loss = ((Low[-1] - Entry)/Entry)*100
    if abs(Loss) < 3:
        if Profit >= 2.5:
            print 'Win'
        else:
            print 'Loss'

それでもあまり意味がありませんね。これは基本的にあなたのコードがしていることです。私のアドバイスが必要な場合は、すべてを廃棄して最初からやり直します。

于 2012-07-23T06:10:21.523 に答える
1

整数演算を行うこともあれば、浮動小数点演算を行うこともあります。これにより、一見非常識な結果が得られる可能性があります。次のようなものを試してください:

Minimum = map(float, [1, 5, 7])

等。

于 2012-07-23T03:59:34.840 に答える
0

これはあなたのコードをリベラルに再解釈したもので、あなたのコードが何をしていると想像しているかについての説明ですが、率直に言って、私にはよくわかりません。ただし、あなたのコードは賢明な計算の領域ではほとんど機能しないことがわかります。そのため、この再解釈は、問題を解決しないとしても、おそらく何も害を及ぼさないと思います。

from __future__ import division

signals = [1, 5, 7]
closes = [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:
    print "TESTING SIGNAL %d" % i

    entry = closes[i]
    profit_pos = []
    loss_pos = []

    for j in range(i+1, len(highs)):
        # I'm assuming highs and lows are always same length ...
        profit = ((highs[j] - entry) / entry) * 100
        if profit >= 2.5:
            print "Signal %d profit: greater than or equal to 2.5%% at position %d!" % (i, j)
            profit_pos.append(j)

        loss = ((lows[j] - entry) / entry) * 100
        if abs(loss) < 3:
            print "Signal %d loss: less than 3%% at position %d!" % (i, j)
            loss_pos.append(j)

    profit_status = "Value does not drop before profit."
    if len(loss_pos) > 0:
        if len(profit_pos) == 0:
            profit_status = "Value drops, no profit."
        elif min(loss_pos) < min(profit_pos):
            profit_status = "Value drops before profit."
    else:
        if len(profit_pos) == 0:
            profit_status = "No significant profit or loss found."
    print "Signal %d result: %s" % (i, profit_status)
于 2012-07-23T05:05:17.963 に答える