Ide inti dari strategi ini adalah untuk mensimulasikan peristiwa probabilitas seperti melempar koin dan melempar dadu menggunakan angka acak untuk menentukan posisi panjang atau pendek, sehingga menerapkan perdagangan acak.
Gunakanflip
variabel untuk mensimulasikan peristiwa acak dan menentukan panjang atau pendek berdasarkancoinLabel
ukuran angka acak.
Penggunaanrisk
danratio
untuk mengatur stop loss dan mengambil garis keuntungan.
Memicu sinyal perdagangan berikutnya secara acak sesuai dengan jumlah siklus maksimum yang ditetapkan.
Kontrol apakah untuk menampilkan kotak posisi dekat melaluiplotBox
variable.
stoppedOut
dantakeProfit
variabel digunakan untuk mendeteksi stop loss atau mengambil keuntungan.
Memberikan kemampuan backtesting untuk menguji kinerja strategi.
Struktur kode yang jelas dan mudah dipahami dan pengembangan sekunder.
Interaksi UI ramah dan berbagai parameter dapat disesuaikan melalui antarmuka grafis.
Kecenderungan ini kuat dan tidak terpengaruh oleh fluktuasi pasar, dengan keandalan yang tinggi.
Pengembalian investasi yang lebih baik dapat diperoleh melalui optimasi parameter.
Dapat digunakan sebagai demonstrasi atau tes untuk strategi lain.
Perdagangan acak tidak bisa menilai pasar dan ada risiko keuntungan tertentu.
Karena tidak dapat menentukan kombinasi parameter optimal, pengujian berulang diperlukan.
Ada risiko korelasi super yang mungkin disebabkan oleh sinyal acak yang terlalu padat.
Dianjurkan untuk menggunakan mekanisme stop loss dan take profit untuk mengendalikan risiko.
Risiko dapat dikurangi dengan memperpanjang interval perdagangan dengan tepat.
Masukkan faktor yang lebih kompleks untuk menghasilkan sinyal acak.
Meningkatkan varietas perdagangan untuk memperluas ruang lingkup pengujian.
Mengoptimalkan interaksi UI dan meningkatkan kemampuan kontrol strategi.
Memberikan lebih banyak alat uji dan indikator untuk optimasi parameter.
Dapat digunakan sebagai sinyal perdagangan atau komponen stop loss take profit yang ditambahkan ke strategi lain.
Kerangka kerja keseluruhan strategi ini lengkap, menghasilkan sinyal perdagangan berdasarkan peristiwa acak, dengan keandalan tinggi. Pada saat yang sama, ini menyediakan kemampuan penyesuaian parameter, backtesting, dan grafik. Ini dapat digunakan untuk menguji pengembangan strategi pemula, dan juga sebagai modul dasar untuk strategi lain. Melalui optimasi yang tepat, kinerja strategi dapat ditingkatkan lebih lanjut.
/*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 )