Strategi Prestasi Pulangan Bulanan


Tarikh penciptaan: 2024-01-08 16:16:58 Akhirnya diubah suai: 2024-01-08 16:16:58
Salin: 2 Bilangan klik: 388
1
fokus pada
1141
Pengikut

Strategi Prestasi Pulangan Bulanan

Gambaran keseluruhan

Fungsi utama strategi ini adalah untuk menjejaki dan memaparkan prestasi pendapatan dan kerugian setiap bulan dalam masa nyata.

Prinsip

Strategi ini menjejaki prestasi pendapatan bulanan melalui langkah-langkah berikut:

  1. Tentukan pembolehubah untuk mencatat sama ada ada atau tidak ada perdagangan yang terpadam pada bulan ini.
  2. Tentukan nilai pendapatan dan kerugian yang direkodkan setiap bulan.
  3. Tentukan bulan di mana pemboleh ubah dirakamkan.
  4. Apabila terdapat kedudukan kosong pada bulan ini, catat keuntungan dan kerugian pada bulan ini dan bulan ke dalam susunan yang sesuai.
  5. Tunjukkan tajuk bulan di tempat yang ditetapkan dalam jadual.
  6. Array keuntungan dan kerugian sepanjang bulan, yang menunjukkan nilai keuntungan dan kerugian dalam bulan yang sesuai dengan jadual.
  7. Ia juga menunjukkan tahun yang berkaitan.
  8. Untuk meringkaskan keuntungan dan kerugian setiap tahun.
  9. Menggunakan warna untuk membezakan keuntungan dan kerugian.

Ini adalah langkah-langkah asas dan cara kerja strategi ini.

Analisis kelebihan

Strategi untuk menjejaki prestasi pendapatan dan kerugian bulanan mempunyai beberapa kelebihan:

  1. Anda boleh mendapatkan maklumat terkini mengenai keuntungan dan kerugian bulanan anda bila-bila masa.
  2. Pada mulanya, tab ini digunakan untuk menunjukkan keuntungan dan kerugian secara langsung.
  3. Ia juga boleh dilihat dengan jelas dan terperinci setiap bulan.
  4. Sebagai perbandingan intuitif, warna boleh digunakan untuk membandingkan keuntungan dan kerugian setiap bulan dengan lebih mudah.
  5. Mengambil kiraan presiden, dan memberi kiraan keuntungan dan kerugian setiap tahun.
  6. Anda boleh menyesuaikan kedudukan, saiz, dan lain-lain.

Analisis risiko

Strategi ini mempunyai beberapa risiko:

  1. Logik pengiraan lebih rumit dan mudah untuk membuat kesilapan yang menyebabkan data tidak tepat.
  2. Tabel yang dipaparkan terlalu kerap diperbaharui, mungkin menjejaskan prestasi.
  3. Data kumpulan kurang cekap disimpan.
  4. Pengubahsuaian masa dan bulan mungkin salah.

Anda boleh mengurangkan risiko dengan:

  1. Pengkajian kod yang ketat untuk memastikan logik pengiraan adalah betul.
  2. Mengoptimumkan frekuensi penyegaran borang untuk mengelakkan penyegaran berlebihan.
  3. Menukar kepada struktur data yang lebih cekap.
  4. Penambahan masa dan pemindahan bulan.

Pengoptimuman Strategi

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Menggunakan struktur data yang lebih cekap, seperti kamus untuk menyimpan data bulanan.
  2. Pengiraan peningkatan kadar pulangan tahunan.
  3. Meningkatkan kadar kenaikan harga dan lain-lain.
  4. Menunjukkan pergerakan kurva pendapatan secara visual.
  5. Menyokong penyesuaian permulaan dan akhir tempoh statistik.
  6. Sokongan untuk mengeksport data ke fail CSV.

Pengoptimuman ini boleh menjadikan strategi lebih baik dan lebih kuat, serta pengalaman pengguna yang lebih baik.

ringkaskan

Strategi ini menggunakan cara array dan jadual, mewujudkan fungsi utama untuk mengesan dan memaparkan prestasi pendapatan bulanan dalam masa nyata. Sederhana, efisien, dan mudah digunakan. Ia mempunyai kelebihan tertentu, tetapi terdapat juga beberapa risiko yang perlu dielakkan. Dengan beberapa pengoptimuman logik dan prestasi pengiraan, strategi ini dapat menjadi lebih sempurna dan kuat.

Kod sumber strategi
/*backtest
start: 2023-01-01 00:00:00
end: 2024-01-07 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/
// © MAURYA_ALGO_TRADER

//@version=5
strategy("Monthly Performance", overlay=true)

period = input(20, "Length")

longCondition =   close > high[20]  //ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = close < low[20]  //ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)



// Copy below code to end of the desired strategy script
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                 monthly pnl performance  by Dr. Maurya @MAURYA_ALGO_TRADER                        //
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
show_performance = input.bool(true, 'Show Monthly Monthly Performance ?', group='Monthly Performance')

dash_loc_mp = input("Bottom Right","Location"  ,options=["Top Right","Bottom Right","Top Left","Bottom Left", "Middle Right","Bottom Center"]  ,group='Monthly Performance', inline = "performance")

text_size_mp = input('Small',"Size"  ,options=["Tiny","Small","Normal","Large"]  ,group='Monthly Performance', inline = "performance")

var table_position_mp = dash_loc_mp == 'Top Left' ? position.top_left :
  dash_loc_mp == 'Bottom Left' ? position.bottom_left :
  dash_loc_mp == 'Middle Right' ? position.middle_right :
  dash_loc_mp == 'Bottom Center' ? position.bottom_center :
  dash_loc_mp == 'Top Right' ? position.top_right : position.bottom_right
  
var table_text_size_mp = text_size_mp == 'Tiny' ? size.tiny :
  text_size_mp == 'Small' ? size.small :
  text_size_mp == 'Normal' ? size.normal : size.large

/////////////////
text_c = color.white

/////////////////////////////////////////////

// var bool new_month = na
new_month = ta.change(month) //> 0 ? true : false
newest_month = new_month and strategy.closedtrades >= 1
strategy.initial_capital = 50000
// profit
only_profit = strategy.netprofit
initial_balance = strategy.initial_capital

// month number
var int month_number = na
month_number := (ta.valuewhen(newest_month, month(time), 0)) //and month(time) > 1 ? (ta.valuewhen(newest_month, month(time), 0) - 1) :  12 //1 to 12

//month_year
var int month_time = na
month_time := ta.valuewhen(newest_month, time, 0) - 2419200000 


var int m_counter = 0
if newest_month
    m_counter += 1



// current month values
var bool new_year = na
new_year := ta.change(year)
curr_m_pnl = only_profit - nz(ta.valuewhen(newest_month, only_profit, 0), 0)
curr_m_number = newest_month ? ta.valuewhen(newest_month, month(time), 0) : month(time)
curr_y_pnl = (only_profit - nz(ta.valuewhen(new_year, only_profit, 0),0)) 



var float [] net_profit_array = array.new_float()
var int [] month_array = array.new_int()
var int [] month_time_array = array.new_int()


if newest_month
    array.push(net_profit_array, only_profit)
    array.push(month_array, month_number)
    array.push(month_time_array, month_time)



var float [] y_pnl_array = array.new_float()
var int [] y_number_array = array.new_int()
var int [] y_time_array = array.new_int()

newest_year = ta.change(year) and strategy.closedtrades >= 1
get_yearly_pnl = nz(ta.valuewhen(newest_year, strategy.netprofit, 0) - nz(ta.valuewhen(newest_year, strategy.netprofit, 1), 0), 0)
get_m_year = ta.valuewhen(newest_year, year(time), 1)
get_y_time = ta.valuewhen(newest_year, time, 0)

if newest_year
    array.push(y_pnl_array, get_yearly_pnl)
    array.push(y_number_array, get_m_year)
    array.push(y_time_array, get_y_time)
var float monthly_profit = na
var int column_month_number = na
var int row_month_time = na

 


var testTable = table.new(position = table_position_mp, columns = 14, rows = 40, bgcolor = color.rgb(7, 226, 242, 38), border_color = color.white, border_width = 1)
if barstate.islastconfirmedhistory and show_performance
    table.cell(table_id = testTable, column = 0, row = 0, text = "YEAR", text_color = text_c, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 1, row = 0, text = "JAN", text_color = text_c, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 2, row = 0, text = "FEB", text_color = text_c, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 3, row = 0, text = "MAR", text_color = text_c, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 4, row = 0, text = "APR", text_color = text_c, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 5, row = 0, text = "MAY", text_color = text_c, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 6, row = 0, text = "JUN", text_color = text_c, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 7, row = 0, text = "JUL", text_color = text_c, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 8, row = 0, text = "AUG", text_color = text_c, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 9, row = 0, text = "SEP", text_color = text_c, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 10, row = 0, text = "OCT", text_color = text_c, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 11, row = 0, text = "NOV", text_color = text_c, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 12, row = 0, text = "DEC", text_color = text_c, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 13, row = 0, text = "YEAR P/L", text_color = text_c, text_size=table_text_size_mp)

    for i = 0 to (array.size(y_number_array) == 0 ? na : array.size(y_number_array) - 1)
        row_y = year(array.get(y_time_array, i)) - year(array.get(y_time_array, 0)) + 1
        table.cell(table_id = testTable, column = 13, row = row_y, text = str.tostring(array.get(y_pnl_array , i), "##.##") + '\n' + '(' + str.tostring(array.get(y_pnl_array , i)*100/initial_balance, "##.##") + ' %)', bgcolor = array.get(y_pnl_array , i) > 0 ? color.green : array.get(y_pnl_array , i) < 0 ? color.red : color.gray, text_color = color.rgb(0, 0, 0), text_size=table_text_size_mp)
    curr_row_y = array.size(month_time_array) == 0 ? 1 : (year(array.get(month_time_array, array.size(month_time_array) - 1))) - (year(array.get(month_time_array, 0))) + 1
    table.cell(table_id = testTable, column = 13, row = curr_row_y, text = str.tostring(curr_y_pnl, "##.##") + '\n' + '(' + str.tostring(curr_y_pnl*100/initial_balance, "##.##") + ' %)', bgcolor = curr_y_pnl > 0 ? color.green : curr_y_pnl < 0 ? color.red : color.gray, text_color = color.rgb(0, 0, 0), text_size=table_text_size_mp)
    

    for i = 0 to (array.size(net_profit_array) == 0 ? na : array.size(net_profit_array) - 1)
        monthly_profit := i > 0 ? ( array.get(net_profit_array, i) - array.get(net_profit_array, i - 1) ) : array.get(net_profit_array, i) 
        column_month_number := month(array.get(month_time_array, i)) 
        row_month_time :=((year(array.get(month_time_array, i))) - year(array.get(month_time_array, 0)) ) + 1 
        table.cell(table_id = testTable, column = column_month_number, row = row_month_time, text = str.tostring(monthly_profit, "##.##") + '\n' + '(' + str.tostring(monthly_profit*100/initial_balance, "##.##") + ' %)', bgcolor = monthly_profit > 0 ? color.green : monthly_profit < 0 ? color.red : color.gray, text_color = text_c, text_size=table_text_size_mp)
        table.cell(table_id = testTable, column = 0, row =row_month_time, text = str.tostring(year(array.get(month_time_array, i)), "##.##"), text_color = text_c, text_size=table_text_size_mp)
       
    curr_row_m = array.size(month_time_array) == 0 ? 1 : (year(array.get(month_time_array, array.size(month_time_array) - 1))) - (year(array.get(month_time_array, 0))) + 1
    table.cell(table_id = testTable, column = curr_m_number, row = curr_row_m, text = str.tostring(curr_m_pnl, "##.##") + '\n' + '(' + str.tostring(curr_m_pnl*100/initial_balance, "##.##") + ' %)', bgcolor = curr_m_pnl > 0 ? color.green : curr_m_pnl < 0 ? color.red : color.gray, text_color = text_c, text_size=table_text_size_mp)
    table.cell(table_id = testTable, column = 0, row =curr_row_m, text = str.tostring(year(time), "##.##"), text_color = text_c, text_size=table_text_size_mp)

//============================================================================================================================================================================