Stratégie d'optimisation de l'entrée moyenne mobile

Auteur:ChaoZhang est là., Date: 14 septembre 2023 à 16h52
Les étiquettes:

La logique de la stratégie

Cette stratégie optimise les points d'entrée après les signaux d'un système de moyenne mobile de base.

La logique principale est la suivante:

  1. Calculer la moyenne mobile sur une période (par exemple 20 jours)

  2. Les croisements génèrent des signaux long/court

  3. Après les signaux, n'entrez pas immédiatement mais attendez de meilleurs niveaux.

  4. Si des niveaux meilleurs se produisent dans les jours spécifiés (par exemple 3 jours), entrer des transactions

  5. Si ce n'est pas le cas, entrez au prix de clôture le 5ème jour pour éviter de manquer

Il s'agit de capitaliser sur la reprise des tendances après les consolidations plutôt que d'entrer immédiatement dans les signaux.

Les avantages

  • Optimisation de l'entrée pour de meilleurs niveaux d'entrée

  • Les jours d'attente maximaux permettent d'éviter de manquer complètement des transactions

  • Des règles simples et claires faciles à mettre en œuvre

Les risques

  • Le temps d'attente et les seuils nécessitent une optimisation

  • Peut manquer des opportunités de tendance à court terme

  • Besoin de surveiller les conditions de temps et de prix

Résumé

Cette stratégie vise à obtenir de meilleurs niveaux d'entrée grâce à une simple optimisation de l'entrée tout en veillant à ne pas manquer les tendances.


/*backtest
start: 2023-08-14 00:00:00
end: 2023-09-13 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © dongyun

//@version=4
strategy("等待一个更好的入场机会", overlay=true)

period = input(20,'')
maxwait = input(3,'')
threshold = input(0.01,'')

signal = 0
trend = 0.0
newtrend = 0.0
wait = 0.0
initialentry = 0.0

trend := sma(close,period)
signal := nz(signal[1])
if trend > nz(trend[1])
	signal := 1
else
	if trend < nz(trend[1])
		signal := -1

wait := nz(wait[1])
initialentry := nz(initialentry[1])

if signal != signal[1]
	if strategy.position_size > 0
		strategy.close('long',comment='trend sell')
		signal := -1
	else
		if strategy.position_size < 0
    		strategy.close('short',comment='trend buy')
    		signal := 1
	wait := 0
	initialentry := close
else
	if signal != 0 and strategy.position_size == 0
		wait := wait + 1

// test for better entry
if strategy.position_size == 0
	if wait >= maxwait
		if signal > 0
			strategy.entry('long',strategy.long, comment='maxtime Long')
		else
			if signal < 0
				strategy.entry('short',strategy.short, comment='maxtime Short')
	else
		if signal > 0 and close < initialentry - threshold
			strategy.entry('long',strategy.long, comment='delayed Long')
		else
			if signal < 0 and close > initialentry + threshold
				strategy.entry('short',strategy.short, comment='delayed short')


Plus de