
La idea central de esta estrategia es utilizar números aleatorios para simular eventos de probabilidad, como el orange de una moneda, y decidir si se hace un multi-cabeza o un cabezón vacío según el resultado del evento, lo que permite realizar operaciones aleatorias. Esta estrategia de negociación puede usarse para pruebas de simulación o como marco básico para el desarrollo de estrategias más complejas.
aprobarflipVariables que simulan eventos aleatorios, basados encoinLabelEl número aleatorio determina si se hace más o menos.
AprovechoriskyratioConfiguración de un cable para detener el daño.
La siguiente señal de negociación se activa al azar según el número máximo de ciclos establecido.
aprobarplotBoxEl control de variables muestra si la caja de depósito está limpia.
stoppedOutytakeProfitLas variables se utilizan para detectar el deterioro o el bloqueo.
Proporcionar estrategias de prueba de rendimiento de la función de retroalimentación.
La estructura del código es clara, fácil de entender y de reutilizar.
La interfaz de usuario es amigable con los usuarios y permite ajustar los parámetros a través de la interfaz gráfica.
Es muy aleatorio, no se ve afectado por las fluctuaciones del mercado y es muy fiable.
Se puede obtener una mejor rentabilidad de los ingresos mediante la optimización de los parámetros.
Se puede utilizar como demostración o prueba de otras estrategias.
Las operaciones aleatorias no permiten juzgar el mercado y existen ciertos riesgos de ganancias.
No se puede determinar la combinación óptima de parámetros y se requiere una prueba repetida.
Existen riesgos de superrelación que pueden surgir de una señal aleatoria demasiado densa.
Se recomienda la combinación de un mecanismo de detención de pérdidas para controlar el riesgo.
Se puede reducir el riesgo prolongando adecuadamente el intervalo de operaciones.
La combinación de factores más complejos produce una señal aleatoria.
Aumentar la variedad comercial y ampliar el alcance de las pruebas.
Optimización de la interactividad de la interfaz de usuario y control de políticas.
Ofrecer más herramientas de prueba y indicadores para facilitar la optimización de los parámetros.
Se puede agregar a otras estrategias como una señal de negociación o un componente de stop loss.
El marco general de esta estrategia es completo, genera señales de negociación basadas en eventos aleatorios, y tiene una alta fiabilidad. Además, ofrece ajustes de parámetros, retroalimentación y funciones de cartografía. Puede usarse tanto para probar estrategias de desarrollo de novatos como como un módulo básico para otras estrategias.
/*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 )