A ideia central desta estratégia é simular eventos de probabilidade, como jogar moedas e dados, usando números aleatórios para determinar posições longas ou curtas, implementando assim negociações aleatórias.
Utilize oflip
A variável para simular eventos aleatórios e determinar longo ou curto com base nocoinLabel
tamanho de número aleatório.
Utilizaçãorisk
eratio
para definir o stop loss e tomar as linhas de lucro.
Ativar o próximo sinal de negociação aleatoriamente de acordo com o número máximo de ciclos definido.
Controlar a exibição da caixa de posição de fechamento através doplotBox
variable.
stoppedOut
etakeProfit
As variáveis são utilizadas para detectar stop loss ou take profit.
Fornecer capacidades de backtesting para testar o desempenho da estratégia.
A estrutura do código é clara e fácil de entender e de desenvolvimento secundário.
A interação da UI é amigável e vários parâmetros podem ser ajustados através da interface gráfica.
A aleatoriedade é forte e não é afectada por flutuações do mercado, com uma elevada fiabilidade.
O melhor retorno do investimento pode ser obtido através da otimização de parâmetros.
Pode ser usado como demonstração ou teste para outras estratégias.
A negociação aleatória não pode julgar o mercado e existe um certo risco de lucro.
Não sendo possível determinar a combinação ideal de parâmetros, é necessário repetir os ensaios.
Existe o risco de supercorrelação que pode resultar de sinais aleatórios excessivamente densos.
Recomenda-se o uso de mecanismos de stop loss e take profit para controlar os riscos.
Os riscos podem ser reduzidos através de um prolongamento adequado do intervalo de negociação.
Incorporar fatores mais complexos para gerar sinais aleatórios.
Aumentar as variedades comercializadas para expandir o escopo dos testes.
Otimizar a interação da UI e aumentar as capacidades de controle de estratégia.
Fornecer mais ferramentas de ensaio e indicadores para otimização de parâmetros.
Pode ser usado como um sinal de negociação ou um componente de stop loss take profit adicionado a outras estratégias.
A estrutura geral desta estratégia é completa, gerando sinais de negociação baseados em eventos aleatórios, com alta confiabilidade. Ao mesmo tempo, fornece ajuste de parâmetros, backtesting e capacidades de gráficos. Pode ser usado para testar o desenvolvimento de estratégias novatas, e também como um módulo básico para outras estratégias. Através da otimização apropriada, o desempenho da estratégia pode ser melhorado.
/*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 )