Estratégia R-Breaker de Futuros de Commodities

Autora:Bem-estar, Criado: 2020-06-02 08:57:10, Atualizado: 2023-11-02 19:52:44

img

Resumo

A estratégia R-Breaker foi desenvolvida por Richard Saidenberg e publicada em 1994. Foi selecionada como uma das dez estratégias de negociação mais lucrativas pela revista Futures Truth nos Estados Unidos por 15 anos consecutivos. Em comparação com outras estratégias, a R-Breaker é uma estratégia de negociação que combina tendência e inversão de tendência.

Resistência e apoio

Simplificando, a estratégia R-Breaker é uma estratégia de suporte e resistência de preços. Ela calcula sete preços com base nos preços mais altos, mais baixos e de fechamento de ontem: um preço central (pivot) e três níveis de suporte (s1 s2, s3), três níveis de resistência (r1, r2, r3). Em seguida, de acordo com a relação posicional entre o preço atual e esses níveis de suporte e resistência, para formar as condições de gatilho para compra e venda, e através de um certo ajuste de algoritmo, ajuste a distância entre esses sete preços, altere ainda mais o valor de gatilho da transação.

  • Preço de compra de ruptura (nível de resistência r3) = preço mais alto de ontem + 2 * (preço central - preço mais baixo de ontem) / 2

  • Observação do preço de venda (nível de resistência r2) = preço central + (preço mais alto de ontem - preço mais baixo de ontem)

  • Preço de venda inverso (nível de resistência r1) = 2 * Preço central - preço mais baixo de ontem

  • Preço central (pivô) = (preço mais elevado de ontem + preço de encerramento de ontem + preço mais baixo de ontem) / 3

  • Preço de compra inverso (nível de apoio s1) = 2 * Preço central - preço mais elevado de ontem

  • Observação do preço de compra (nível de apoio s2) = preço central - (preço mais alto de ontem - preço mais baixo de ontem)

  • Preço de venda de ruptura (nível de suporte s3) = preço mais baixo de ontem - 2 * (preço mais alto de ontem - preço central)

A partir disso, podemos ver que a estratégia R-Breaker desenha uma linha de preço semelhante a uma grade com base no preço de ontem e atualiza essas linhas de preço uma vez por dia. Na análise técnica, os níveis de suporte e resistência e o papel dos dois podem ser convertidos um no outro. Quando o preço quebra com sucesso o nível de resistência, o nível de resistência se torna o nível de suporte; quando o preço quebra com sucesso o nível de suporte, o nível de suporte se torna o nível de resistência.

Na negociação real, esses níveis de suporte e resistência indicam ao comerciante a direção das posições de abertura e fechamento e os pontos de negociação precisos.

Estratégia lógica

Em seguida, vamos ver como a estratégia R-Breaker usa esses níveis de suporte e resistência. Sua lógica não é complicada. Se não houver posição de retenção, entre no modo de tendência. Quando o preço for maior que o preço de compra de ruptura, abra a posição longa; quando o preço for menor que o preço de venda de ruptura, abra a posição curta.

  • Modo de tendência

posição longa aberta: se não houver posição de detenção e o preço for superior ao preço de compra de ruptura

posição curta aberta: se não houver posição de detenção e o preço for inferior ao preço de venda de ruptura

Fechar posição longa: se mantiver uma posição longa e o preço mais elevado do dia for superior ao preço de venda observado e o preço for inferior ao preço de venda inverso

posição curta de fechamento: se mantiver uma posição curta e o preço mais baixo do dia for inferior ao preço de compra observado e o preço for superior ao preço de compra inverso

  • Modo inverso

posição longa aberta: se você mantiver uma posição curta e o preço mais baixo do dia for inferior ao preço de compra observado e o preço for superior ao preço de compra inverso

posição curta aberta: se você detém uma posição longa, e o preço mais alto do dia é maior do que o preço de venda observado e o preço é menor do que o preço de venda inverso

Fechar posição longa: se as posições longas forem mantidas e o preço for inferior ao preço de venda de ruptura

posição curta fechada: se a posição curta for mantida e o preço for superior ao preço de compra de ruptura

Se houver posições de detenção, ele entra no modo de reversão. Quando há posições de detenção longas, e o preço mais alto no dia é maior que o preço de venda de observação, e o preço cai abaixo do preço de venda inverso, a posição longa será fechada e a posição curta será aberta sincronicamente. Quando se mantém posições curtas, e o preço mais baixo do dia é menor que o preço de compra de observação, e o preço quebra o preço de compra inverso, a posição curta será fechada e a posição longa será aberta.

Escrever estratégias

'''backtest
start: 2019-01-01 00:00:00
end: 2020-01-01 00:00:00
period: 5m
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
'''

# Strategy main function
def onTick():
    # retrieve data
    exchange.SetContractType(contract_type)   # Subscribe to futures products
    bars_arr = exchange.GetRecords(PERIOD_D1)  # Get daily K line array
    if len(bars_arr) < 2:  # If the number of K lines is less than 2
        return
    yesterday_open = bars_arr[-2]['Open']     # Yesterday's opening price
    yesterday_high = bars_arr[-2]['High']     # Yesterday's highest price
    yesterday_low = bars_arr[-2]['Low']       # Yesterday's lowest price
    yesterday_close = bars_arr[-2]['Close']   # Yesterday's closing price

    # Calculation
    pivot = (yesterday_high + yesterday_close + yesterday_low) / 3 # Pivot point
    r1 = 2 * pivot - yesterday_low # Resistance level 1
    r2 = pivot + (yesterday_high - yesterday_low) # Resistance level 2
    r3 = yesterday_high + 2 * (pivot - yesterday_low) # Resistance level 3
    s1 = 2 * pivot - yesterday_high  # Support level 1
    s2 = pivot - (yesterday_high - yesterday_low)  # Support level 2
    s3 = yesterday_low - 2 * (yesterday_high - pivot)  # Support level 3

    today_high = bars_arr[-1]['High'] # Today's highest price
    today_low = bars_arr[-1]['Low'] # Today's lowest price
    current_price = _C(exchange.GetTicker).Last # Current price

    # Get positions
    position_arr = _C(exchange.GetPosition)  # Get array of positions
    if len(position_arr) > 0:  # If the position array length is greater than 0
        for i in position_arr:
            if i['ContractType'] == contract_type:  # If the position variety equals the subscription variety
                if i['Type'] % 2 == 0:  # If it is long position
                    position = i['Amount']  # The number of assigned positions is positive
                else:
                    position = -i['Amount']  # The number of assigned positions is negative
                profit = i['Profit']  # Get position profit and loss
    else:
        position = 0  # The number of assigned positions is 0
        profit = 0  # The value of the assigned position is 0
        
    if position == 0:  # If there is no position
        if current_price > r3:  # If the current price is greater than Resistance level 3
            exchange.SetDirection("buy")  # Set transaction direction and type
            exchange.Buy(current_price + 1, 1)  # open long position
        if current_price < s3:  # If the current price is less than Support level 3
            exchange.SetDirection("sell")  # Set transaction direction and type
            exchange.Sell(current_price - 1, 1)  # open short position
        
    if position > 0:  # if holding long position
        if today_high > r2 and current_price < r1 or current_price < s3:  # If today's highest price is greater than Resistance level 2, and the current price is less than Resistance level 1
            exchange.SetDirection("closebuy")  # Set transaction direction and type
            exchange.Sell(current_price - 1, 1)  # close long position
            exchange.SetDirection("sell")  # Set transaction direction and type
            exchange.Sell(current_price - 1, 1)  # open short position

    if position < 0:  # if holding short position
        if today_low < s2 and current_price > s1 or current_price > r3:  # If today's lowest price is less than Support level 2, and the current price is greater than Support level 1
            exchange.SetDirection("closesell")  # Set transaction direction and type
            exchange.Buy(current_price + 1, 1)  # close short position
            exchange.SetDirection("buy")  # Set transaction direction and type
            exchange.Buy(current_price + 1, 1)  # open long position

            
# Program main function
def main():
    while True:     # loop
        onTick()    # Execution strategy main function
        Sleep(1000) # Sleep for 1 second

Copiar a estratégia completa

A estratégia completa foi publicada na plataforma FMZ (FMZ.COM), clique no link abaixo para copiá-lo diretamente, e você pode backtest sem configuração:https://www.fmz.com/strategy/187009

Resumo

A razão pela qual a estratégia R-Breaker é popular é que não é puramente uma estratégia de rastreamento de tendências, mas uma estratégia composta para ganhar renda tanto em alfa de tendência quanto em alfa inversa. A estratégia neste artigo é apenas para demonstração, sem otimizar os parâmetros e variedades apropriados. Além disso, a estratégia completa também deve incluir a função stop loss, e amigos interessados podem melhorá-la.


Relacionados

Mais.