Strategi perdagangan kuantitatif berdasarkan angka acak


Tanggal Pembuatan: 2023-12-07 17:14:20 Akhirnya memodifikasi: 2023-12-07 17:14:20
menyalin: 0 Jumlah klik: 826
1
fokus pada
1621
Pengikut

Strategi perdagangan kuantitatif berdasarkan angka acak

Ringkasan

Gagasan inti dari strategi ini adalah untuk menggunakan angka acak untuk mensimulasikan peristiwa probabilitas seperti koin orange, dan memutuskan untuk melakukan multipel atau kosong berdasarkan hasil peristiwa, sehingga memungkinkan perdagangan acak. Strategi perdagangan ini dapat digunakan untuk pengujian simulasi, atau dapat digunakan sebagai kerangka dasar untuk pengembangan strategi yang lebih kompleks.

Prinsip Strategi

  1. lulusflipVariabel simulasi peristiwa acak, berdasarkancoinLabelUkuran acak menentukan lebih banyak atau lebih sedikit.

  2. PenggunaanriskDanratioTetapkan Stop Loss Stop Line.

  3. Trigger sinyal perdagangan berikutnya secara acak sesuai dengan periode maksimum yang ditetapkan.

  4. lulusplotBoxKontrol variabel untuk menampilkan kotak kosong.

  5. stoppedOutDantakeProfitVariabel digunakan untuk mendeteksi kerusakan atau penghentian.

  6. Memberikan umpan balik tentang kinerja strategi pengujian fungsi.

Analisis Keunggulan

  1. Struktur kodenya jelas, mudah dipahami dan dikembangkan kembali.

  2. UI yang interaktif, berbagai parameter dapat disesuaikan melalui GUI.

  3. Bersifat acak, tidak terpengaruh oleh pergerakan pasar, dan dapat diandalkan.

  4. Optimalisasi parameter dapat menghasilkan tingkat pengembalian pendapatan yang lebih baik.

  5. Dapat digunakan sebagai demonstrasi atau pengujian strategi lainnya.

Analisis risiko

  1. Perdagangan acak tidak dapat menilai pasar, ada risiko tertentu untuk mendapatkan keuntungan.

  2. Tidak dapat menentukan kombinasi parameter yang optimal, perlu dilakukan pengujian berulang.

  3. Ada risiko superrelasi yang mungkin disebabkan oleh sinyal acak yang terlalu padat.

  4. Disarankan untuk menggabungkan mekanisme stop loss untuk mengendalikan risiko.

  5. Risiko dapat dikurangi dengan memperpanjang interval transaksi secara tepat.

Arah optimasi

  1. Kombinasi faktor yang lebih kompleks menghasilkan sinyal acak.

  2. Menambahkan varietas perdagangan dan memperluas ruang lingkup pengujian.

  3. Optimalkan interaksi UI, tambahkan kontrol kebijakan.

  4. Ini akan memberikan lebih banyak alat tes dan indikator untuk optimasi parameter.

  5. Dapat digunakan sebagai sinyal perdagangan atau komponen stop loss untuk strategi lainnya.

Meringkaskan

Strategi ini memiliki kerangka kerja yang utuh, menghasilkan sinyal perdagangan berdasarkan peristiwa acak, dan memiliki keandalan yang tinggi. Selain itu, ia juga menyediakan fungsi penyesuaian parameter, pengukuran ulang, dan penggambaran.

Kode Sumber Strategi
/*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 )