Основная идея этой стратегии заключается в моделировании вероятностных событий, таких как бросок монеты и качание кости, с использованием случайных чисел для определения длинных или коротких позиций, тем самым реализуя случайную торговлю.
Используйтеflip
Изменная для моделирования случайных событий и определения длинного или короткого на основеcoinLabel
Размер случайного числа.
Использованиеrisk
иratio
чтобы установить стоп-лосс и взять линию прибыли.
Запускать следующий торговый сигнал случайным образом согласно установленному максимальному числу циклов.
Управлять тем, чтобы отобразить поле позиции закрытия черезplotBox
variable.
stoppedOut
иtakeProfit
переменные используются для обнаружения стоп-лосса или прибыли.
Предоставление возможностей обратного тестирования для проверки эффективности стратегии.
Структура кода ясна и легко понятна, и второстепенно развивается.
Взаимодействие пользовательского интерфейса удобное, и различные параметры можно регулировать через графический интерфейс.
Случайность высока и не подвержена влиянию колебаний рынка, с высокой надежностью.
Лучшая отдача от инвестиций может быть получена за счет оптимизации параметров.
Может использоваться в качестве демонстрации или теста для других стратегий.
Случайная торговля не может судить о рынке и существует определенный риск прибыли.
Невозможно определить оптимальную комбинацию параметров, требуется повторное испытание.
Существует риск сверхкорреляции, которая может возникнуть в результате чрезмерно плотных случайных сигналов.
Рекомендуется использовать механизмы стоп-лосса и прибыли для контроля рисков.
Риски можно снизить путем надлежащего продления интервала торговли.
Включайте более сложные факторы для генерации случайных сигналов.
Увеличьте торговые сорта, чтобы расширить сферу испытаний.
Оптимизировать взаимодействие пользовательского интерфейса и увеличить возможности управления стратегией.
Предоставление дополнительных инструментов и показателей для оптимизации параметров.
Может использоваться в качестве торгового сигнала или компонента стоп-лосса, добавленного к другим стратегиям.
Общая структура этой стратегии полная, генерируя торговые сигналы на основе случайных событий с высокой надежностью. В то же время она обеспечивает возможности корректировки параметров, обратного тестирования и диаграмм. Она может использоваться для тестирования разработки стратегии новичков, а также в качестве базового модуля для других стратегий.
/*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 )