Il s'agit d'une stratégie de trading de rupture basée sur des moyennes mobiles. Il calcule le prix moyen sur une certaine période comme la moyenne mobile. Lorsque le prix dépasse la moyenne mobile, des signaux de trading sont générés.
La stratégie est principalement basée sur l'indicateur de moyenne mobile. Elle utilise la fonction sma pour calculer le prix de clôture moyen sur une période pour obtenir la moyenne mobile. Lorsque le dernier prix de clôture dépasse la moyenne mobile vers le haut, un signal d'achat est généré. Lorsque le dernier prix de clôture dépasse la moyenne mobile vers le bas, un signal de vente est généré.
Plus précisément, il définit la source (prix de clôture récent) et la longueur de la moyenne mobile dans la stratégie pour obtenir la séquence de données de moyenne mobile. Ensuite, il définit deux conditions: créer un ordre long lorsque le prix dépasse la moyenne mobile; créer un ordre court lorsque le prix dépasse la moyenne mobile. Après avoir créé les ordres, il définit également la prise de profit et le stop loss: il ferme une partie de la position lorsque l'ordre atteint un taux de profit fixé et ferme toute la position lorsque l'ordre atteint le prix prédéfini de prise de profit ou de stop loss.
Il s'agit d'une stratégie simple et pratique, qui présente les avantages suivants:
Bien que cette stratégie présente de nombreux avantages, elle comporte encore certains risques:
Pour contrôler ces risques, nous pouvons optimiser en combinant d'autres indicateurs pour la filtration, introduire un jugement de tendance de marché à court terme ou utiliser des méthodes d'apprentissage automatique pour trouver les combinaisons optimales de paramètres.
La stratégie peut être optimisée dans les aspects suivants:
Ajouter d'autres indicateurs techniques pour le jugement pour construire un système de trading et améliorer le taux de gain.
Ajouter des mécanismes de stop-loss. Utilisez un stop-loss de trailing ou un stop-loss basé sur le temps pour verrouiller les profits et éviter des pertes plus importantes.
Optimisation des paramètres. Modifier le paramètre de la moyenne mobile pour trouver la meilleure combinaison. Différents types de moyennes mobiles peuvent également être testés.
Utilisez des algorithmes comme les forêts aléatoires et LSTM combinés à plusieurs facteurs pour déterminer la direction de la tendance.
Optimiser la logique d'entrée et de sortie. Définir des conditions de filtrage de tendance pour éviter les transactions contre la tendance à la fin.
Dans l'ensemble, cette stratégie de rupture de moyenne mobile est très appropriée comme stratégie de trading quantitatif débutante. Elle a une logique simple, facile à comprendre et à utiliser, avec quelques effets pratiques. En même temps, elle laisse beaucoup de place pour des tests et une optimisation supplémentaires. Nous pouvons introduire plus d'indicateurs et de modèles techniques sur cette base pour développer de meilleures stratégies quantitatives.
/*backtest start: 2023-11-20 00:00:00 end: 2023-11-22 08:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 // |-- Initialize Strategy Parameters: strategy( // |-- Strategy Title. title='[Tutorial][RS]Working with orders', // |-- if shorttitle is specified, it will overwrite the name on the chart window. shorttitle='WwO', // |-- if true it overlays current chart window, otherwise it creates a drawer to display plotting outputs. overlay=true, // |-- Strategy unit type for default quantity, possible arguments: (strategy.cash, strategy.fixed, strategy.percent_of_equity) default_qty_type=strategy.cash, // |-- Value to use for default trade size default_qty_value=1000, // |-- Default Account size initial_capital=100000, // |-- Account Currency parameter currency=currency.USD ) // |-- Strategy Profit/loss parameters: profit = input(defval=5000, title='Take Profit') loss = input(defval=5000, title='Stop Loss') ratio = input(defval=2.0, title='Ratio at wich to take out a percentage off the table (take profit / ratio).') percent = input(defval=50.0, title='Percentage of position to take profit.') // |-- Signal Parameters: // | // |-- Moving Average input source and length parameters. src = input(defval=close) length = input(defval=100) // |-- Moving Average Data series. ma = sma(src, length) // |-- Condition for triggering a buy(long) order(trade). if crossover(src, ma) // |-- Create the order. strategy.order(id='Buy', long=true) // |-- Issue a exit order to close a percentage of the trade when a specified ratio(take profit / ratio) is reached. strategy.exit(id='Buy Half Exit', from_entry='Buy', qty_percent=percent, profit=profit/ratio) // |-- Issue a exit order to close the full position, when take profit or stop loss's are reached. strategy.exit(id='Buy Full Exit', from_entry='Buy', qty_percent=100, profit=profit, loss=loss) if crossunder(src, ma) // |-- Create the order. strategy.order(id='Sell', long=false) // |-- Issue a exit order to close a percentage of the trade when a specified ratio(take profit / ratio) is reached. strategy.exit(id='Sell Half Exit', from_entry='Sell', qty_percent=percent, profit=profit/ratio) // |-- Issue a exit order to close the full position, when take profit or stop loss's are reached. strategy.exit(id='Sell Full Exit', from_entry='Sell Half Exit', qty_percent=100, profit=profit, loss=loss) // |-- Output Functions. plot(series=ma, title='MA', color=black)