Stratégie de trading quantitative basée sur des nombres aléatoires


Date de création: 2023-12-07 17:14:20 Dernière modification: 2023-12-07 17:14:20
Copier: 0 Nombre de clics: 823
1
Suivre
1619
Abonnés

Stratégie de trading quantitative basée sur des nombres aléatoires

Aperçu

L’idée centrale de cette stratégie est d’utiliser des nombres aléatoires pour simuler des événements probables tels que les orangeaux de pièces de monnaie, en fonction des résultats de l’événement pour décider de faire des têtes multiples ou vides, permettant ainsi de réaliser des transactions aléatoires. Cette stratégie de négociation peut être utilisée pour des tests de simulation ou comme cadre de base pour le développement de stratégies plus complexes.

Principe de stratégie

  1. passerflipLes variables simulent des événements aléatoires, seloncoinLabelLa taille du nombre au hasard décide de faire plus ou moins.

  2. UtilisationrisketratioRéglez le câble anti-dégâts.

  3. Le signal de transaction suivant est déclenché au hasard selon le nombre maximal de cycles réglés.

  4. passerplotBoxLe contrôle de la variable indique si la boîte de rangement est affichée.

  5. stoppedOutettakeProfitLes variables sont utilisées pour détecter l’arrêt ou l’arrêt de la perte.

  6. Fournir une stratégie de performance de test de fonctionnalités de rétroaction.

Analyse des avantages

  1. La structure du code est claire, facile à comprendre et à réutiliser.

  2. L’interface utilisateur est conviviale et les paramètres peuvent être modifiés via l’interface graphique.

  3. Il est fortement aléatoire, insensible aux fluctuations du marché et très fiable.

  4. Le retour sur investissement peut être amélioré par l’optimisation des paramètres.

  5. Il peut être utilisé comme démonstration ou test d’autres stratégies.

Analyse des risques

  1. Les transactions aléatoires ne permettent pas de juger le marché et présentent un certain risque de profit.

  2. La combinaison optimale de paramètres n’a pas pu être déterminée et doit être testée à plusieurs reprises.

  3. Il existe un risque de supercorrélation qui peut être causé par une trop forte densité de signaux aléatoires.

  4. Il est recommandé d’associer un mécanisme de prévention des pertes pour contrôler les risques.

  5. Le risque peut être réduit par une prolongation appropriée de l’intervalle entre les transactions.

Direction d’optimisation

  1. La combinaison de facteurs plus complexes produit un signal aléatoire.

  2. Augmenter les variétés commerciales et élargir la portée des tests.

  3. Optimisation de l’interaction de l’interface utilisateur et ajout de fonctionnalités de contrôle des stratégies.

  4. Il fournit plus d’outils de test et d’indicateurs pour l’optimisation des paramètres.

  5. Il peut être ajouté à d’autres stratégies comme composants de signaux de trading ou de stop-loss.

Résumer

Le cadre global de cette stratégie est complet, génère des signaux de transaction basés sur des événements aléatoires, a une grande fiabilité. Il offre également des fonctions d’ajustement de paramètres, de rétro-mesure et de cartographie. Il peut être utilisé à la fois pour tester des stratégies de développement novatrices et comme module de base pour d’autres stratégies.

Code source de la stratégie
/*backtest
start: 2022-11-30 00:00:00
end: 2023-12-06 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/
// © melodicfish

//@version=4
strategy("Coin Flipper Pro",overlay=true,max_bars_back=100)

// ======= User Inputs variables=========

h1=input(title="------- Trade Activity -------",defval=false)
maxBars=input(25.0,title="Max Bars between Coin Filps",step=1.0,minval=4.0)

h2=input(title="------- Position Settings -------",defval=false)
risk=input(defval=5.0,title="Risk in % ",type=input.float, minval=0.001 ,step=0.1)
ratio= input(defval=1.5,title="Risk to Reward Ratio x:1 ",type=input.float, minval=0.001,step=0.1)

h3=input(title="------- Plot Options -------",defval=false)
showBox=input(defval=true, title="Show Position Boxes")

h4=input(title="------- Back Testing -------",defval=false)
runTest=input(defval=true, title="Run Strategy Back Test")
customTime=input(defval=false, title="Use Custom Date Range for back test")


tsYear = input(2021,minval=1000,maxval=9999,title= "Test Start Year")
tsMonth = input(1,minval=1,maxval=12,title= "Test Start Month")
tsDay = input(1,minval=1,maxval=31,title= "Test Start Day")
start = timestamp(tsYear,tsMonth,tsDay,0,0)

teYear = input(2021,minval=1000,maxval=9999,title=  "Test Stop Year")
teMonth = input(5,minval=1,maxval=12,title=  "Test Stop Month")
teDay = input(1,minval=1,maxval=31,title=  "Test Stop Day")
end = timestamp(teYear,teMonth,teDay,0,0)

// ======= variables =========
var barsBetweenflips=25
var coinFlipResult=0.0
var flip=true
var coinLabel=0.0
var stoppedOut= true
var takeProfit=true
var posLive=false
var p1=0.0
var p2=0.0
var p3=0.0
var plotBox=false
var posType=0
long=false
short=false


// ===== Functions ======

getColor() => 
    round(random(1,255))


// ===== Logic ========
if barssince(flip==true)>barsBetweenflips and posLive==false
    flip:=true
    coinLabel:=random(1,10)

    // Candle Colors   
candleColor= flip==true and flip[1]==false and barstate.isconfirmed==false?color.rgb(getColor(),getColor(),getColor(),0):flip==false and close>=open?color.green:color.red
candleColor:= barstate.ishistory==true and close>=open?color.green: barstate.ishistory==true and close<open? color.red:candleColor 
barcolor(candleColor)

if flip[1]==true and posLive==false
    flip:=false
    barsBetweenflips:=round(random(3,round(maxBars)))
    posLive:=true
    
long:= flip[1]==true and coinLabel[1]>=5.0
short:= flip[1]==true and coinLabel[1]<5.0


    // Calculate Position Boxes
if long==true and posType!=1 

    riskLDEC=1-(risk/100) 
    p1:= close[1]*(1+((risk/100)*ratio)) // TargetLine
    p2:=close[1]
    p3:= close[1]*riskLDEC // StopLine
    plotBox:=true
    posType:=1
  
if short==true and posType!=-1 

    riskSDEC=1-((risk*ratio)/100)
    p1:= close[1]*riskSDEC   // TargetLine
    p2:=close[1]
    p3:= close[1]*(1+(risk/100)) // StopLine
    plotBox:=true
    posType:=-1

    
    // Check Trade Status 
stoppedOut:= posType==1 and long==false and low<= p3? true: posType==-1 and short==false and high>=p3? true: false  
takeProfit:= posType==1 and long == false and high>= p1? true: posType==-1 and short==false and low<=p1? true: false  
if stoppedOut==true or takeProfit==true
    posType:=0
    plotBox:=false
    posLive:=false


// ====== Plots ========
plot1=plot(plotBox and showBox? p1:na,style=plot.style_linebr,color=color.white, transp= 100)
plot2=plot(plotBox and showBox? p2:na,style=plot.style_linebr,color=color.white, transp= 100)
plot3=plot(plotBox and showBox? p3:na,style=plot.style_linebr,color=color.white, transp= 100)
fill(plot1,plot2,color= color.green)
fill(plot2,plot3,color= color.red)
plotshape(flip==true and flip[1]==false and coinLabel>=5.0,style=shape.labelup,location=location.belowbar, color=color.green,size=size.tiny,title="short label",text="Heads",textcolor=color.white)
plotshape(flip==true and flip[1]==false and coinLabel<5.0,style=shape.labeldown,location=location.abovebar, color=color.red,size=size.tiny,title="short label",text="Tails",textcolor=color.white)
if stoppedOut==true
    label.new(bar_index-1, p3, style=label.style_xcross, color=color.orange)
if takeProfit==true
    label.new(bar_index-1, p1, style=label.style_flag, color=color.blue)
    
    

if runTest==true and customTime==false or runTest==true and customTime==true and time >= start and time <= end 
    strategy.entry("Sell", strategy.short,when=short==true)
    strategy.close("Sell", comment="Close Short", when=stoppedOut==true or takeProfit==true)
    strategy.entry("Long", strategy.long,when=long==true)
    strategy.close("Long",comment="Close Long", when= stoppedOut==true or takeProfit==true )