
A idéia central desta estratégia é usar um número aleatório para simular eventos de probabilidade, como um pixel de uma moeda, e decidir fazer um multi-cabeça ou um cabeçalho vazio, de acordo com o resultado do evento, para realizar uma negociação aleatória. Esta estratégia de negociação pode ser usada em testes de simulação ou como uma estrutura básica para o desenvolvimento de estratégias mais complexas.
passarflipVariabilidade simula eventos aleatórios, de acordo comcoinLabelO número aleatório decide o que fazer ou não.
UtilizaçãoriskeratioConfigure o fio de suspensão.
Acionando o próximo sinal de negociação aleatoriamente de acordo com o número máximo de ciclos definidos.
passarplotBoxControle de variáveis para mostrar a caixa de depósito.
stoppedOutetakeProfitAs variáveis são usadas para detetar a perda ou o bloqueio.
Fornecer estratégias de teste de desempenho de função de feedback.
A estrutura do código é clara, fácil de entender e reutilizar.
A interface do usuário é amigável e os parâmetros podem ser ajustados através da interface gráfica.
É altamente aleatória, não é afetada pelas flutuações do mercado e é altamente confiável.
Otimizando os parâmetros, você pode obter melhores retornos de receita.
Pode ser usado como demonstração ou teste de outras estratégias.
A negociação aleatória não é uma forma de julgar o mercado, existindo um certo risco de lucro.
Não é possível determinar a melhor combinação de parâmetros e é necessário testar repetidamente.
Existe um risco de super correlação que pode ser causado por sinais aleatórios muito densos.
Recomenda-se a combinação de um mecanismo de prevenção de perdas para controlar o risco.
O risco pode ser reduzido com o prolongamento apropriado do intervalo de negociação.
A combinação de fatores mais complexos gera um sinal aleatório.
Aumentar a variedade de transações e ampliar o alcance dos testes.
Otimizar a interação da interface do usuário e adicionar o controle de políticas.
Fornecer mais ferramentas de teste e indicadores para facilitar a otimização de parâmetros.
Pode ser adicionado a outras estratégias como um componente de sinal de negociação ou de parada de perda.
O quadro geral da estratégia é completo, gerando sinais de negociação com base em eventos aleatórios, com alta confiabilidade. Ao mesmo tempo, oferece ajustes de parâmetros, retroalimentação e funções de mapeamento. Pode ser usado tanto para testar estratégias de desenvolvimento de novatos quanto como módulo básico de outras estratégias.
/*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 )