Ý tưởng cốt lõi của chiến lược này là mô phỏng các sự kiện xác suất như ném tiền xu và ném xúc xắc bằng cách sử dụng số ngẫu nhiên để xác định các vị trí dài hoặc ngắn, do đó thực hiện giao dịch ngẫu nhiên.
Sử dụngflip
biến để mô phỏng các sự kiện ngẫu nhiên và xác định dài hoặc ngắn dựa trêncoinLabel
kích thước số ngẫu nhiên.
Sử dụngrisk
vàratio
để thiết lập lệnh dừng lỗ và lấy lợi nhuận.
Khởi động tín hiệu giao dịch tiếp theo ngẫu nhiên theo số chu kỳ tối đa được đặt.
Kiểm soát xem có hiển thị hộp vị trí đóng thông quaplotBox
variable.
stoppedOut
vàtakeProfit
Các biến được sử dụng để phát hiện stop loss hoặc take profit.
Cung cấp khả năng backtesting để kiểm tra hiệu suất chiến lược.
Cấu trúc mã là rõ ràng và dễ hiểu và phát triển thứ cấp.
Sự tương tác của UI là thân thiện và các tham số khác nhau có thể được điều chỉnh thông qua giao diện đồ họa.
Sự ngẫu nhiên là mạnh mẽ và không bị ảnh hưởng bởi biến động thị trường, với độ tin cậy cao.
Lợi nhuận đầu tư tốt hơn có thể đạt được thông qua tối ưu hóa tham số.
Có thể được sử dụng như một minh chứng hoặc thử nghiệm cho các chiến lược khác.
Giao dịch ngẫu nhiên không thể đánh giá thị trường và có một rủi ro lợi nhuận nhất định.
Không thể xác định kết hợp tham số tối ưu, cần phải thử nghiệm lặp lại.
Có nguy cơ siêu tương quan có thể là kết quả của các tín hiệu ngẫu nhiên quá dày đặc.
Nên sử dụng các cơ chế dừng lỗ và lấy lợi nhuận để kiểm soát rủi ro.
Rủi ro có thể được giảm bằng cách kéo dài khoảng thời gian giao dịch một cách thích hợp.
Kết hợp các yếu tố phức tạp hơn để tạo ra các tín hiệu ngẫu nhiên.
Tăng các giống thương mại để mở rộng phạm vi thử nghiệm.
Tối ưu hóa tương tác UI và tăng khả năng kiểm soát chiến lược.
Cung cấp nhiều công cụ thử nghiệm và chỉ số để tối ưu hóa tham số.
Có thể được sử dụng như một tín hiệu giao dịch hoặc dừng lỗ lấy lợi nhuận thành phần được thêm vào các chiến lược khác.
Khung tổng thể của chiến lược này hoàn chỉnh, tạo ra các tín hiệu giao dịch dựa trên các sự kiện ngẫu nhiên, với độ tin cậy cao. Đồng thời, nó cung cấp khả năng điều chỉnh tham số, kiểm tra lại và biểu đồ. Nó có thể được sử dụng để kiểm tra phát triển chiến lược mới, và cũng là một mô-đun cơ bản cho các chiến lược khác. Thông qua tối ưu hóa thích hợp, hiệu suất chiến lược có thể được cải thiện hơn nữa.
/*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 )