この戦略の主なアイデアは,コインフリップやダースロールなどの確率イベントをランダム数を使用して,ロングまたはショートポジションを決定し,ランダムな取引を実装することです.この種の取引戦略は,シミュレーションテストに使用され,より複雑な戦略開発のための基本的な枠組みとしても使用できます.
試しにflip
ランダムなイベントをシミュレートし,coinLabel
ランダムな数のサイズです
使用risk
そしてratio
ストップ・ロスを設定し 利益ラインを設定します
設定された最大サイクルの数に従って次の取引信号をランダムに起動します.
クローズ位置ボックスを表示するかどうかを制御します.plotBox
variable.
stoppedOut
そしてtakeProfit
ストップ・ロスの検出や 利益の取得に変数を使用します.
戦略のパフォーマンスをテストするためのバックテスト能力を提供する.
コード構造は明確で分かりやすく 開発が次要です
UIのインタラクションはフレンドリーで,様々なパラメータはグラフィカルインターフェースで調整できます.
ランダム性が高く,市場の変動の影響を受けず,信頼性が高い.
パラメータの最適化によって投資の収益性が向上します
他の戦略の実証やテストとして使用できます
ランダムな取引は 市場を判断できず 利益リスクもあります
最適なパラメータ組み合わせを決定できないため,再試験が必要です.
過剰に密度の高いランダム信号によって 超相関の危険性があります
リスクをコントロールするためにストップ・ロスのメカニズムと利益のメカニズムを使用することが推奨されます.
取引間隔を適切に延長することで リスクを軽減できます
ランダムな信号を生成するために より複雑な要素を組み込む
試験範囲を拡大するために 取引品種を増やします
ユーザーインタラクションを最適化し 戦略制御能力を高めます
パラメータ最適化のためのより多くのテストツールと指標を提供すること.
他の戦略に追加されたストップ・ロスト・テイク・プロフィート・コンポーネントとして使用できます.
この戦略の全体的なフレームワークは完全であり,ランダムなイベントに基づいて高い信頼性で取引信号を生成する.同時に,パラメータ調整,バックテスト,チャート機能を提供します. 初期戦略開発をテストするために使用され,他の戦略のための基本的なモジュールとしても使用できます.適切な最適化によって,戦略パフォーマンスはさらに改善できます.
/*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 )