ich habe bisher meine datascience features mit lambda und map() erstellen können.
Nun benötige ich jedoch eine komplexere Target-label -Spalte in meinem Neuronalen Netz...
Ich habe den Code soweit es ging aus meinem C++ beispiel in Python übernommen, und ich hoffe es ist einigermaßen verständlich was ich suche:
nämlich eine schnellere Umsetzung des ganzen ohne derartige for loops, denn bei 126.614 Zeilen an Börsenkurs-Schlusspreise ("Close") und Höchst und Tiefkursen ("High","Low")
dauert das ganze ziemlich lange... gibt es da vielleicht eine schnellere Lösung?
Hier der Code wie ich in aus C++ zu Python übernahm:
Code: Alles auswählen
import pandas as pd
Target_tp_Long = 0.0400
Target_sl_Long = 0.0200
Target_tp_Short = 0.0400
Target_sl_Short = 0.0200
FUTURE_PERIOD_PREDICT=12
df = pd.read_csv("Training Data/EURUSD1999-2019.csv",delimiter= ",")
# wir brauchen nur folgende 3 Spalten aus dem CSV
#df["Close"]
#df["Low"]
#df["High"]
Y = pd.DataFrame()
Y["target"] = df["Close"]
print(Y["target"])
for i in range(len(df)-FUTURE_PERIOD_PREDICT):
#print(i)
Long_sl=False
Short_sl =False
for j in range(1,FUTURE_PERIOD_PREDICT):
#print(j)
if Long_sl ==True:
print("Long_sl",Long_sl, " j = ",j-i)
if Short_sl ==True:
print("Short_sl",Short_sl, " j = ",j-i)
# gewünschter Stoploss long: wenn wert diesen wert unterschreitet, kann man die Kauf-position vergessen
if ((df["Close"].iloc[i] - df["Low"].iloc[i+j]) > Target_sl_Long):
Long_sl = True
print("Long_sl",Long_sl, " j = ",j)
# gewünschter Stoploss Short: wenn wert diesen wert unterschreitet, kann man die Leerverkauf-position vergessen
if (( df["High"].iloc[i+j] - df["Close"].iloc[i]) > Target_sl_Short):
Short_sl = True
print("Short_sl",Long_sl, " j = ",j)
# wenn wert innerhalb der nächsten FUTURE_PERIOD_PREDICT den gewünschten Long TakeProfit übersteigt ist es einen Kauf wert :)
if( ( df["High"].iloc[i+j] - df["Close"].iloc[i]) >Target_tp_Long and Long_sl ==False ):
Y["target"].iloc[i]=1
print("Target = 1, i=",i)
print( (df["High"].iloc[i+j] - df["Close"].iloc[i])," > ",Target_tp_Long ,"and Long_sl == ",Long_sl)
break
# wenn wert innerhalb der nächsten FUTURE_PERIOD_PREDICT den gewünschten Short TakeProfit durchfällt ist es einen LeerVerkauf wert :)
elif ( (df["Close"].iloc[i] - df["Low"].iloc[i+j] ) > Target_tp_Short and Short_sl==False):
Y["target"].iloc[i]=-1
print("Target = -1, i=",i)
print( (df["Close"].iloc[i] - df["Low"].iloc[i+j] )," > ",Target_tp_Short, "and Short_sl == ",Short_sl)
break
# Weder Kauf- noch Verkaufsposition lohnen sich, wir tun also nichts -> 0
elif (j == FUTURE_PERIOD_PREDICT -1):
Y["target"].iloc[i]=0
if Y["target"].iloc[i] != (0 or 1 or -1):
print("fehler im algorythmus")
Code: Alles auswählen
for(int i = bars- LatestBarBack -1 ; i> LatestBarForward ;i--) //LatestBarForward - DeadlineBars weil wir diesmal um {DeadlineBars} Bars in die zukunft gehen
{
static bool Long_sl,Short_sl =false;
for(int j=DeadlineBars; j>0;j--)
{
ResetLastError(); int error = 0;
if((Y_Close[i] - Y_Lows[i-j]) > Target_sl_Long*_Point)
{Long_sl = true;}
if(( Y_Highs[i-j] - Y_Close[i]) > Target_sl_Short*_Point)
{Short_sl = true;}
if( ( Y_Highs[i-j] - Y_Close[i]) >Target_tp_Long*_Point && !Long_sl )
{Y[i]=1;
else if ( (Y_Close[i] - Y_Lows[i-j] ) >Target_tp_Short*_Point && !Short_sl)
{Y[i]=0;
else if (j == DeadlineBars -1)
{Y[i]=0; // bei letztem J wird Y = 0 wenn kein target
}
}