Stratégie quantitative en rythme rapide

Auteur:ChaoZhang est là., Date: 2023-11-21 13h43 et 24h
Les étiquettes:

img

Résumé

Le but de cette stratégie est de tester si différentes variables d'entrée telles que les couleurs des bougies, le volume et les méthodes aléatoires peuvent être utilisées pour prédire les changements de prix sous forme d'ondes sinusoïdales.

Principe de stratégie

La stratégie est divisée en trois parties. La première partie détecte les changements de couleur des bougies. Quand une bougie de couleur différente apparaît après plusieurs bougies de la même couleur, l'onde sinusoïdale tourne de direction. La deuxième partie détecte si le volume est supérieur ou inférieur à la moyenne. Lorsque la moyenne est brisée, l'onde tourne de direction.

Le code contrôle le fonctionnement des ondes en suivant la direction actuelle, le nombre de pics et la position du chandelier précédent pour les trois ondes.

Analyse des avantages

Cette théorie de l'onde sinusoïdale semble avoir du sens, et les formes d'onde simulées ont également une certaine corrélation avec le marché réel. Mais à travers le test de cette stratégie, il peut être constaté qu'ils sont en fait des résultats aléatoires.

Ainsi, un avantage de cette stratégie est de réfuter l'idée fausse selon laquelle "le marché peut être prédit". Les variables du marché affectent les prix, mais elles sont imprévisibles et les décisions aléatoires peuvent également obtenir des résultats similaires.

Analyse des risques

Le plus grand risque de cette stratégie est qu'il est difficile de déterminer le profit et la perte dans le trading aléatoire.

En outre, la théorie de la prédiction des ondes sinusoïdales elle-même est fausse. Les changements du marché sont trop complexes pour être simulés avec une simple cyclicité.

Pour réduire les risques, il est nécessaire d'analyser davantage les résultats aléatoires pour déterminer la plage de paramètres; ou combiner d'autres méthodes analytiques pour vérifier les signaux de trading.

Directions d'optimisation

Cette stratégie peut être optimisée dans les directions suivantes:

  1. Augmenter plus de variables converties en ondes pour élargir l'espace d'échantillonnage
  2. Combinez les trois vagues de courant pour trouver la meilleure combinaison de traversée
  3. Les méthodes d'arrêt des pertes définies, telles que les arrêts des pertes en pourcentage
  4. Optimiser la logique d'entrée et de sortie et le backtest pour trouver les paramètres optimaux

Résumé

En testant différentes ondes sinusoïdales, cette stratégie illustre la nature imprévisible du marché. En même temps, elle réfute également la théorie erronée de l'utilisation de cycles d'ondes pour prédire.

Ensuite, la praticité de la stratégie peut être améliorée en augmentant les variables, en combinant les formes d'onde, en définissant des arrêts et en optimisant les paramètres. Mais la clé est toujours de comprendre que les changements du marché sont complexes et imprévisibles.


/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
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/
// © Gentleman-Goat

//@version=5
strategy("Sine Wave Theory",overlay=false, precision = 2, initial_capital = 1000,shorttitle = "SINE_W_T")

var bar_change_wave_direction = input.int(defval=1,title="Starting Wave Direction",group="Bar Change")
bar_change_sine_wave_number = input.int(defval=28,title="Sine Wave #",group="Bar Change")
bar_change_sine_wave_res = input.timeframe(defval="D",title="Resolution",group="Bar Change")
bar_change_trade = input.bool(defval=true,title="Trade",group="Bar Change")

var volume_wave_direction = input.int(defval=1,title="Starting Wave Direction",group="Volume")
avg_volume_length = input.int(7,title="Lookback Length",group="Volume")
volume_sine_wave_number = input.int(defval=28,title="Sine Wave #",group="Volume")
volume_sine_wave_res = input.timeframe(defval="D",title="Resolution",group="Volume")
volume_trade = input.bool(defval=false,title="Trade",group="Volume")

var coin_flip_wave_direction = input.int(defval=1,title="Starting Wave Direction",group="Coin Flip")
coin_flip_sine_wave_number = input.int(defval=28,title="Sine Wave #",group="Coin Flip")
coin_flip_seed = input.int(defval=1,title="Seed #",group="Coin Flip")
coin_flip_trade = input.bool(defval=false,title="Trade",group="Coin Flip")

avg_volume = ta.sma(volume,avg_volume_length)

//Green or Red Candle
bar_color = close>open ? color.green : color.red
bar_color_time_adj = request.security(syminfo.tickerid, bar_change_sine_wave_res, bar_color)

//Above or Below Average
volume_state = (volume>avg_volume) ? color.blue : color.purple
volume_state_time_adj = request.security(syminfo.tickerid, volume_sine_wave_res, volume_state)
 
//Coinflip
coin_flip = math.random(0,100,coin_flip_seed)>=50 ? color.teal : color.yellow

var bar_change_wave_count = 0
var volume_wave_count = 0
var coin_flip_wave_count = 0

//Wave Counters
if(volume_state_time_adj[1] != volume_state_time_adj)
    volume_wave_count := volume_wave_count + volume_wave_direction

if(bar_color_time_adj[1] != bar_color_time_adj)
    bar_change_wave_count := bar_change_wave_count + bar_change_wave_direction

if(coin_flip[1] != coin_flip)
    coin_flip_wave_count := coin_flip_wave_count + coin_flip_wave_direction

//Direction changers
if(math.abs(bar_change_wave_count) == bar_change_sine_wave_number and bar_color_time_adj[1] != bar_color_time_adj)
    bar_change_wave_direction := bar_change_wave_direction * -1

if(math.abs(volume_wave_count) == volume_sine_wave_number and volume_state_time_adj[1] != volume_state_time_adj)
    volume_wave_direction := volume_wave_direction * -1

if(math.abs(coin_flip_wave_count) == coin_flip_sine_wave_number and coin_flip[1] != coin_flip)
    coin_flip_wave_direction := coin_flip_wave_direction * -1

//Entry positions
if(bar_change_wave_count==bar_change_sine_wave_number and bar_change_trade==true)
    strategy.entry(id="short",direction=strategy.short)
if(bar_change_wave_count==bar_change_sine_wave_number*-1 and bar_change_trade==true)
    strategy.entry(id="long",direction=strategy.long)

if(volume_wave_count==volume_sine_wave_number and volume_trade==true)
    strategy.entry(id="short-volume",direction=strategy.short)
if(volume_wave_count==volume_sine_wave_number*-1 and volume_trade==true)
    strategy.entry(id="long-volume",direction=strategy.long)

if(coin_flip_wave_count==coin_flip_sine_wave_number and coin_flip_trade==true)
    strategy.entry(id="short-coinflip",direction=strategy.short)
if(coin_flip_wave_count==coin_flip_sine_wave_number*-1 and coin_flip_trade==true)
    strategy.entry(id="long-coinflip",direction=strategy.long)

hline(0, title='Center', color=color.white, linestyle=hline.style_dashed, linewidth=1)
plot(bar_change_wave_count,title="Bar Change", color=bar_color, linewidth=2)
plot(volume_wave_count,title="Volume Average Change", color=volume_state, linewidth=2)
plot(coin_flip_wave_count,title="Coin Flip Change", color=coin_flip, linewidth=2)


Plus de