
Ключевая идея этой стратегии заключается в том, чтобы использовать случайные числа для моделирования вероятностных событий, таких как монетный орешек, и, в зависимости от результатов события, принимать решение о многоголовном или пустом голове, чтобы реализовать случайную торговлю. Такая торговая стратегия может использоваться для моделирования тестирования, а также может служить базовой структурой для разработки более сложных стратегий.
проходитьflipПеременные, имитирующие случайные событияcoinLabelВыберите случайную величину, чтобы определить, будет ли это больше или меньше.
ИспользованиеriskиratioНастройка предохранительного провода.
Следующий торговый сигнал будет вызван в зависимости от максимального количества циклов, которые были установлены.
проходитьplotBoxКонтроль показывает ли ящик для сброса.
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 )