So genau habe ich jetzt deinen Code nicht analysiert. Aber du solltest dir mal überlegen, wann genau dein Programm was machen muss. Deine Funktion für Lotserhöhung kann so, wie du das programmiert hast, mehrmals für die gleiche Order aufgerufen werden. Mach mal Prints in dein Programm und guck dir das an.
Mach das doch genau nur dann, wenn du feststellst, dass deine Buy oder Sell-Order in TP oder SL gelaufen ist.
Jetzt kann bei bei jedem Tick Lotserhöhung aufgerufen werden, wenn Orderopen nicht ausgeführt wurde, aus welchem Grund auch immer.
Meine Programme
prüfen bei jedem OrderSend, ob alles richtig abgelaufen ist und wiederholen dann den Befehl, wenn nötig. Und das bis zu einer einzustellenden Anzahl Wiederholungen. Und wenns nicht geht, dann schau ich dafür, dass nicht bei jedem Tick etwas gemacht wird, das ich nicht will.
Ich habe z.B. auch sowas drin vor der OrdeEröffnung
while(IsTradeContextBusy())
Sleep(10);
Du machst auch bei jedem Tick Dinge, die unnötig sind, z.B. Min Lotsize, TP und SL einstellen