Backtesting торговая стратегия с использованием backtesting.py - PullRequest
0 голосов
/ 03 мая 2020

Я хочу протестировать торговую стратегию. Это относительно просто. Просто купите акции по стартовой цене. Немедленно установите ордер на продажу при разнице выхода выше и ордер на покупку при разнице входа ниже. Я хочу, чтобы это продолжалось до максимального количества открытых лотов. Мне удалось написать код ниже. Заказы являются местами, но никто не выполняет. Я использую библиотеку backtesting.py https://kernc.github.io/backtesting.py/doc/backtesting/index.html Пример: старт = 125 ордеров должны быть выставлены на покупку 124, продать 126 ... купить 125, продать 127 ... купить 126, продать 128 и так далее. Следующая функция запускается для каждой новой строки данных, и там у меня возникают проблемы с установкой моей текущей цены покупки и продажи. Помогите, пожалуйста,

from backtesting import Backtest, Strategy, Position
from backtesting.lib import crossover, SignalStrategy
from backtesting.test import SMA

class Scalp_buy(Strategy):

    start = 125
    lot_step = 5
    buy_criteria = 1
    sell_criteria = 1
    max_open = 10
    lot_size = 6000
    max_loss = 1000
    equity_list = []
    current_buy_order = []
    current_sell_order = []
    current_buy = start - buy_criteria
    current_sell = start + sell_criteria

    def init(self):
        super().init()
        self.current_buy = self.start - self.buy_criteria
        self.current_sell = self.start + self.sell_criteria
        self.buy(price = self.start, tp = self.current_sell)

    def next(self):
        super().next()
        for x in range(0,self.max_open): 
            self.orders.set_entry(price = self.current_buy)
            self.orders.set_tp(price = self.current_sell)
            self.current_buy  += self.buy_criteria
            self.current_sell  += self.sell_criteria

       # print(self.position.open_time,self.position.open_price,self.position.pl, self.position.pl_pct , self.position.size)


bt = Backtest(df, Scalp_buy, cash=10000, commission=.0014)

output = bt.run()
output```
...