1

Pyalgotrade のオプティマイザーを使用して戦略を実行し、最適なパラメーターを見つけています。私が得るメッセージはこれです:

2015-04-09 19:33:35,545 broker.backtesting [DEBUG] Not enough cash to fill 600800 order [1681] for 888 share/s
2015-04-09 19:33:35,546 broker.backtesting [DEBUG] Not enough cash to fill 600800 order [1684] for 998 share/s
2015-04-09 19:33:35,547 server [INFO] Partial result 7160083.45 with parameters: ('600800', 4, 19) from worker-16216
2015-04-09 19:33:36,049 server [INFO] Best final result 7160083.45 with parameters: ('600800', 4, 19) from client worker-16216

これはメッセージのほんの一部です。パラメーターについてのみ表示でき ('600800', 4, 19)('600800', 4, 19)結果が得られます。パラメーターの他の組み合わせについては、メッセージが表示されます: 546 broker.backtesting [DEBUG] Not enough cash to fill 600800 order [1684] for 998 share/s.

このメッセージは、買い注文を作成しましたが、それをビジーにするのに十分な現金がないことを意味していると思います。ただし、以下のスクリプトから:

        shares = self.getBroker().getShares(self.__instrument)
        if bars[self.__instrument].getPrice() > up and shares == 0:
            sharesToBuy = int(self.getBroker().getCash()/ bars[self.__instrument].getPrice())
            self.marketOrder(self.__instrument, sharesToBuy)

        if shares != 0 and bars[self.__instrument].getPrice() > up_stop:
            self.marketOrder(self.__instrument, -1 * shares)
        if shares != 0 and bars[self.__instrument].getPrice() < up:
            self.marketOrder(self.__instrument, -1 * shares)

私の戦略のロジックは、現在の価格が up よりも大きい場合は買い、現在の価格が up_stop よりも大きい場合、または購入後に up よりも小さい場合は売るというものです。したがって、コードから、注文は現在の現金で計算されるため、支払うのに十分な現金がない注文を生成する方法はありません。

では、どこが間違っているのでしょうか。

4

1 に答える 1

1

現在の価格に基づいて注文サイズを計算しますが、次のバーの価格が上昇している可能性があります。注文は現在のバーでは約定されませんが、次のバーから開始されます。

「部分的な結果」と「最良の最終結果」のメッセージに関して、いくつのパラメーターの組み合わせを試していますか? 10 個の異なる組み合わせを使用している場合、200 個の組み合わせのバッチで評価され、200 個の組み合わせの各バッチの最良の部分結果のみが出力されるため、10 個の異なる「部分的な結果」は得られないことに注意してください。

于 2015-04-10T01:46:29.027 に答える