
Idea utama strategi ini adalah menggunakan nombor rawak untuk mensimulasikan peristiwa kebarangkalian seperti koin oren, membuat keputusan untuk melakukan multipel atau kosong berdasarkan hasil peristiwa, untuk mewujudkan perdagangan rawak. Strategi perdagangan ini boleh digunakan untuk ujian simulasi atau sebagai kerangka asas untuk pembangunan strategi yang lebih kompleks.
lulusflipVariable simulasi kejadian rawak, berdasarkancoinLabelBerpikir secara rawak untuk membuat keputusan lebih banyak atau lebih sedikit.
PenggunaanriskdanratioTetapkan tali penghalang.
Mencetuskan isyarat perdagangan seterusnya secara rawak mengikut jumlah maksimum kitaran yang ditetapkan.
lulusplotBoxPeriksa sama ada pemboleh ubah memaparkan kotak kosong.
stoppedOutdantakeProfitVariabel digunakan untuk mengesan hentikan atau berhenti.
Memberi maklum balas mengenai prestasi strategi ujian fungsi.
Kodnya jelas, mudah difahami dan boleh digunakan semula.
UI mesra interaksi, pelbagai parameter boleh disesuaikan melalui antara muka grafik.
Ia mempunyai sifat acak, tidak terjejas oleh turun naik pasaran, dan boleh dipercayai.
Anda boleh mendapatkan pulangan pendapatan yang lebih baik dengan mengoptimumkan parameter.
Ia boleh digunakan sebagai demonstrasi atau ujian strategi lain.
Perdagangan rawak tidak dapat menilai pasaran, dan ada risiko keuntungan tertentu.
Tidak dapat menentukan kombinasi parameter yang optimum dan perlu diuji berulang kali.
Terdapat risiko berkaitan super yang mungkin disebabkan oleh isyarat rawak yang terlalu padat.
Ia disyorkan untuk menggabungkan mekanisme penangguhan kerugian untuk mengawal risiko.
Risiko boleh dikurangkan dengan memanjangkan selang dagangan.
Gabungan faktor-faktor yang lebih kompleks menghasilkan isyarat rawak.
Menambah varieti dagangan dan meluaskan ruang ujian.
Mengoptimumkan interaksi UI dan menambah kawalan dasar.
Ia menyediakan lebih banyak alat ujian dan penunjuk untuk memudahkan pengoptimuman parameter.
Ia boleh dimasukkan ke dalam strategi lain sebagai isyarat perdagangan atau komponen stop loss.
Kerangka keseluruhan strategi ini lengkap, menghasilkan isyarat perdagangan berdasarkan peristiwa rawak, kebolehpercayaan yang tinggi. Ia juga menyediakan fungsi penyesuaian parameter, pengukuran semula, dan penggambaran. Ia boleh digunakan untuk menguji strategi pembangunan pemula, tetapi juga sebagai modul asas untuk strategi lain. Dengan pengoptimuman yang sesuai, prestasi strategi dapat dibuat lebih menonjol.
/*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 )