Стратегия Turtle Trading — это стратегия следования за трендом, разработанная Ричардом Деннисом и Уильямом Экхардтом. Стратегия основана на наборе правил, которые определяют, когда входить и выходить из сделки на основе ценового действия актива. Стратегия известна своей простотой и способностью приносить прибыль в долгосрочной перспективе.

Основная идея стратегии Turtle Trading заключается в том, чтобы определить направление тренда и войти в сделку в этом направлении. Стратегия использует две скользящие средние для определения направления тренда: долгосрочную скользящую среднюю и краткосрочную скользящую среднюю. Когда краткосрочная скользящая средняя пересекает долгосрочную скользящую среднюю, это сигнал к покупке актива. Когда краткосрочная скользящая средняя пересекает долгосрочную скользящую среднюю, это сигнал к продаже актива.

Теперь давайте посмотрим на код Python, реализующий стратегию Turtle Trading. Первые две строки кода вычисляют две скользящие средние:

df['SMA1']=((ta.trend.sma_indicator(close=df['close'], window=55,fillna= True)) )
df['SMA2']=((ta.trend.sma_indicator(close=df['close'], window=20,fillna= True)) )

Здесь мы используем функцию sma_indicator() из библиотеки ta (технический анализ) для расчета простых скользящих средних (SMA) цен закрытия. Первая скользящая средняя имеет окно 55 дней, а вторая скользящая средняя имеет окно 20 дней.

Затем мы используем цикл для перебора каждой строки в DataFrame и генерации торговых сигналов на основе положения цены закрытия относительно скользящих средних:

signals.append(0) 
for i in range(1, len(df)-1):    
    # Your trading strategy goes here
    # For example, you could use a simple moving average crossover strategy
    if df.iloc[i]['close'] > df.iloc[i]['SMA1'] :
        signals.append(-1)
    elif df.iloc[i]['close'] < df.iloc[i]['SMA2'] :
        signals.append(1)
    else :
        signals.append(0)  
signals.append(0) 

Если цена закрытия выше долгосрочной скользящей средней, мы добавляем сигнал -1 к списку signals, что указывает на сигнал продажи. Если цена закрытия ниже краткосрочной скользящей средней, мы добавляем сигнал 1, который указывает на сигнал покупки. Если цена закрытия находится между двумя скользящими средними, мы добавляем сигнал 0, что указывает на то, что торговать не следует.

После того, как мы сгенерировали торговые сигналы, мы используем другой цикл для имитации сделок и расчета прибыли:

df["signal"] = signals
print(signals)
investment = 1000
current_investment = 1000
invested_amount = 0
fees = 0
profit = 0
is_invested = False
best_trade = -99999999
worst_trade = 99999999
largest_loss = 0
largest_gain = 0
total_trades = 0
loss_threshold = 0.03 # Stop loss threshold at 5% loss
loss_amount = 0 # variable to track loss amount

for i in range(500, len(df)):
    signal = df.iloc[i]['signal'] 
    close = df.iloc[i]['close']

    if signal == 1 and not is_invested:
        Entrypoint = close
        print(signal)
        print(close)
        quantity = (current_investment / close)
        print(current_investment)       
        print(quantity)
        invested_amount = quantity * close
        is_invested = True
    elif signal == -1 and is_invested:
        print(signal)
        print('close', close)
        profit = quantity * (  close - Entrypoint) - 2
        print('profit' ,profit)
        current_investment += profit
        invested_amount = 0
        total_trades += 1
        is_invested = False
        if profit > largest_gain:
            largest_gain = profit
        if profit < largest_loss:
            largest_loss = profit
        if profit > best_trade:
            best_trade = profit
        if profit < worst_trade:
            worst_trade = profit
        loss_amount = 0 # reset loss_amount when position is closed
    elif is_invested:
        # check if stop loss threshold has been reached
        loss = invested_amount - (quantity * close)
        if loss > invested_amount * loss_threshold:
            print("Stop loss triggered!")
            profit = invested_amount * (1 - loss_threshold) - invested_amount - 2
            current_investment += profit
            invested_amount = 0
            total_trades += 1
            is_invested = False
            if profit > largest_gain:
                largest_gain = profit
            if profit < largest_loss:
                largest_loss = profit
            if profit > best_trade:
                best_trade = profit
            if profit < worst_trade:
                worst_trade = profit
            loss_amount = 0 # reset loss_amount when position is closed
        else:
            loss_amount = loss # update loss_amount
    else: 
        pass
        
final_profit = current_investment - investment
print("Final Profit: ", final_profit)
print("Best Trade: ", best_trade)
print("Worst Trade: ", worst_trade)
print("Largest Loss: ", largest_loss)
print("Largest Gain: ", largest_gain)
print("Total Trades: ", total_trades)

После запуска бэктеста на часовом таймфрейме в ETHUSDT мы можем увидеть результаты:

Тестирование на истории показывает общую прибыль в размере 250 391 долларов США при 2069 сделках. Лучшая сделка привела к прибыли в размере 26 299 долларов, а худшая сделка привела к убытку в размере 7 870 долларов.

Хотя эти результаты впечатляют, важно отметить, что прошлые результаты не гарантируют будущих результатов. Стратегия торговли черепахами была успешной в прошлом, но в будущем она может оказаться нерентабельной. Кроме того, бэктест не учитывает проскальзывание, торговые сборы или другие рыночные условия, которые могут повлиять на прибыльность.

Результаты ретроспективного тестирования показывают, что стратегия хорошо зарекомендовала себя на данном наборе данных, принося прибыль в размере 250 000 долларов США за определенный период времени. Однако важно иметь в виду, что прошлые результаты не гарантируют будущих результатов, и стратегия может работать по-разному на других наборах данных или в других рыночных условиях.

Как и в случае с любой торговой стратегией, важно тщательно протестировать и оптимизировать параметры на ряде наборов данных, чтобы убедиться, что стратегия надежна и эффективна. Также важно эффективно управлять рисками, используя стоп-лоссы, размер позиции и другие методы управления рисками, чтобы минимизировать убытки и максимизировать прибыль.

В целом, торговая стратегия черепах является полезной и эффективной стратегией для трейдеров, которые хотят следовать тенденциям и получать прибыль на рынках. Сочетая технический анализ и разумные принципы управления рисками, трейдеры могут использовать эту стратегию для получения стабильной прибыли в долгосрочной перспективе.

Сообщение от InsiderFinance

Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь: