Monatliche Rendite-Performance-Strategie


Erstellungsdatum: 2024-01-08 16:16:58 zuletzt geändert: 2024-01-08 16:16:58
Kopie: 2 Klicks: 388
1
konzentrieren Sie sich auf
1141
Anhänger

Monatliche Rendite-Performance-Strategie

Überblick

Die wichtigste Funktion dieser Strategie ist die Echtzeit-Verfolgung und Darstellung der monatlichen Ertrags- und Verlustentwicklung. Sie aktualisiert die konkreten Monats- und Verlustentwicklungen in einer Tabelle.

Grundsätze

Die Strategie ermöglicht es, die monatliche Ertragsentwicklung in folgenden Schritten zu verfolgen:

  1. Definition der Variablen, die den Ausfall von Geschäften in diesem Monat erfassen.
  2. Definieren Sie die Variablen, die den konkreten Gewinn- und Verlustwert für jeden Monat erfassen.
  3. Definieren Sie den Monat, in dem die Variablen aufgezeichnet werden.
  4. Wenn die Position in diesem Monat platziert ist, werden die Gewinne und Verluste für diesen Monat und den Monat in die entsprechende Array aufgenommen.
  5. An der angegebenen Stelle der Tabelle wird der Titel des Monats angezeigt.
  6. Die Gewinn-und-Verlust-Array wird über die Monate hinweg angezeigt, wobei die Gewinn-und-Verlust-Reihe für die entsprechenden Monate der Tabelle angezeigt wird.
  7. Die entsprechenden Jahre werden angezeigt.
  8. Die Summe der jährlichen Gewinne und Verluste.
  9. Positiv-Negativ der Gewinn- und Verlustrechnung in Farbe.

Das sind die grundlegenden Schritte und Funktionsprinzipien der Strategie.

Analyse der Stärken

Diese Strategie zur Verfolgung der monatlichen Ertrags- und Verlustentwicklung hat folgende Vorteile:

  1. Echtzeit-Updates, so dass Sie jederzeit die neuesten Monats- und Gewinn- und Verlustrechnungen sehen können.
  2. Auf der ersten Blick kann man die Tabelle verwenden, um einen visuellen Überblick über die monatlichen Einnahmen und Verluste zu erhalten.
  3. Die Daten sind sehr detailliert, so dass man jeden Monat genau sehen kann.
  4. Intuitiv zu vergleichen: Die Verwendung von Farben ermöglicht einen intuitiveren Vergleich der Einnahmen und Verluste pro Monat.
  5. Der Präsident des Landes gibt die Gesamtsumme der Gewinne und Verluste für jedes Jahr.
  6. Die Anzeige kann individuell angepasst werden, z. B. durch Anpassung der Position und Größe der Tabellen.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Die Berechnungslogik ist komplizierter, Fehler können die Daten unzutreffend machen.
  2. Die Darstellung der Tabelle wird zu häufig aktualisiert, was die Leistung beeinträchtigen kann.
  3. Die Speicherung von Array-Daten ist weniger effizient.
  4. Die Zeit und der Monat können falsch berechnet werden.

Das Risiko kann durch folgende Maßnahmen verringert werden:

  1. Strenge Code-Prüfung, um sicherzustellen, dass die Berechnungslogik korrekt ist.
  2. Optimieren Sie die Frequenz der Erneuerung von Formularen und vermeiden Sie eine übermäßige Erneuerung
  3. Die Datenspeicherung wird in eine effizientere Datenstruktur umgewandelt.
  4. Die Abweichungen bei der Zeit- und Monatsumwandlung werden behandelt.

Strategieoptimierung

Diese Strategie kann in folgenden Bereichen optimiert werden:

  1. Eine effizientere Datenstruktur wie ein Wörterbuch, das monatliche Daten speichert.
  2. Berechnung der Zunahme der jährlichen Rendite.
  3. Erhöhung der Zinssätze und anderer Kennzahlen.
  4. Die Entwicklung der Gewinnkurve wird visuell dargestellt.
  5. Unterstützung für die Anpassung des Anfangs und des Endes der statistischen Zeiträume.
  6. Unterstützt den Export von Daten in CSV-Dateien.

Diese Optimierungen können die Funktionalität der Strategien verbessern und verbessern und die Benutzererfahrung verbessern.

Zusammenfassen

Die Strategie nutzt Arrays und Tabellen, um die Kernfunktionen des Echtzeit-Trackens und der Präsentation der monatlichen Erträge zu realisieren. Sie ist einfach, effizient und benutzerfreundlich. Sie bietet einige Vorteile, aber auch einige Risiken, die zu vermeiden sind. Durch einige Optimierungen der Rechenlogik und der Leistung kann die Strategie noch perfekter und leistungsfähiger gemacht werden.

Strategiequellcode
/*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)

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