与FREQTRADE反向测试一起使用的后续购买代码

2024-06-26 06:28:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用FREQTRADE进行代码的回溯测试。这一概念是指尾随止损但买入(尾随买入)。回溯测试结果表明,没有发出购买订单

def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
    # TRAILING BUY
    current_price=dataframe['close'].tail(1)
    dataframe['trailbuy'] = 0 # keep on trailing
    trailing_buy_offset = 0.005
    trailing_buy_order_enabled = True
    trailing_buy_order_started = False
    if trailing_buy_order_started:
        if current_price < trailing_buy_order_downlimit: # if price is still falling down
            trailing_buy_order_uplimit = current_price * (1 + trailing_buy_offset) # update uplimit
            trailing_buy_order_downlimit = current_price # update downlimit
            dataframe['trailbuy'] = 0 # keep on trailing 

        if current_price >= trailing_buy_order_uplimit: # if price has bounced back and now is over uplimit
            dataframe['trailbuy'] = 1 # finished trailing - buy order must be submitted immediately
            trailing_buy_order_started = False
    
    if trailing_buy_order_started == False and trailing_buy_order_enabled == True:
        trailing_buy_order_started = True
        trailing_buy_order_uplimit = current_price * (1 + trailing_buy_offset) # initialize uplimit
        trailing_buy_order_downlimit = current_price # initialize down limit
        

    return dataframe

我在spyder中分别运行了代码,使用for循环在数据帧中运行,这表明dataframe['trailing']在应该发出购买订单时会发生变化

以下是我在spyder中用于检查想法的代码:

data=[[1628812800000,44400.06,44440.62,44391.87,44425.53,62.976777],[1628812860000,44428.3,44457.45,44409.06,44442.97,36.574744]]

(使用了更多OHLCV条目)

current_price=dataframe['close'].tail(1)
trailing_buy_offset = 0.005
trailing_buy_order_enabled = 1
trailing_buy_order_started = 0

for i in (range(0,len(dataframe['open']))):

dataframe['trailbuy'] = 0
current_price=dataframe['close'][i]
if trailing_buy_order_started:
    if current_price < trailing_buy_order_downlimit: # if price is still falling down
        trailing_buy_order_uplimit = current_price * (1 + trailing_buy_offset) # update uplimit
        trailing_buy_order_downlimit = current_price # update downlimit
        dataframe['trailbuy'] = 0 # keep on trailing

    if current_price >= trailing_buy_order_uplimit: # if price has bounced back and now is over uplimit
        dataframe['trailbuy'] = 1 # finished trailing - buy order must be submitted immediately
        trailing_buy_order_started = 0

if trailing_buy_order_started == 0 and trailing_buy_order_enabled == 1:
    trailing_buy_order_started = 1
    trailing_buy_order_uplimit = current_price * (1 + trailing_buy_offset) # initialize uplimit
    trailing_buy_order_downlimit = current_price # initialize down limit

    
print(dataframe['trailbuy'].tail(1))

我不知道我在freqtrade使用的strategy.py文件中的代码定位是否有问题。任何帮助都将不胜感激


Tags: 代码dataframeifisenabledorderbuycurrent