Einzelnen Beitrag anzeigen
  #2 (permalink)  
Alt 27.07.17
next user next user ist offline
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von icepick1661 Beitrag anzeigen
Der Code diesmal als Datei, hier auch nochmal eingefügt (Traderdoc, das mit dem "# drücken verstehe ich nicht...):
Drücke beim nächsten mal folgendes

und füge deinen Code zwischen den beiden Tags ein.

Zitat:
Zitat von icepick1661 Beitrag anzeigen
1. Die erste bzw. letztgekaufte (die mit dem kleinsten "OrderPrice") :

Sie soll(-en)
a) nicht bearbeitet werden (hat schon den passenden SL), solange der Kurs über dem "OrderPrice" notiert,
b) den Stopp auf "OpenPrice" gesetzt bekommen, wenn der Kurs den "OpenPrice" - Testspanne unterschreitet (also <OrderStopLossII),
c) den Stopp auf OrderStopLossII (...ist "OpenPrice" - Testspanne) gesetzt bekommen, wenn der Kurs "OpenPrice" - 2*Testspanne unterschreitet.

2. Für alle weiteren (oder wenn eine (die erste?) Position allein in diese Situation kommt: Fällt der Kurs danach weitere 10 Punkte, soll der SL um die Hälfte, also 5 Punkte nachgezogen werden - allerdings niemals wieder erhöht werden.
1. Der kleinste "OrderPrice", also Order mit kleinstem Abstand zum Kurs (Short)?
  • a) Solange nicht im Plus-Bereich, tue nichts.
  • b) Wenn Kurs unter Testspanne, dann BreakEven.
  • c) Wenn Kurs unter 2*Testspanne, dann OrderStopLossII.
Ist so bischen besser formuliert.

2. "Für alle weiteren", die obigen Punkte gelten also nur für die eine Order?
"Fällt der Kurs danach weitere 10 Punkte", die anderen Orders sollen also erst verarbeitet werden, wenn die eine Order die obigen Punkte erreicht hat?

Sorry, ich sollte so langsam schlafen gehen...

Code:
int ArSSize=ArraySize(ArShortOrderOpenPrices);

for (int iArrS=0; iArrS<=ArLSize; iArrS++)
In der Schleife müsste es doch "ArSSize" sein.

Bist du ausschließlich im DAX? Wenn nicht, so würde ich mir diese Zeilen nochmal überlegen:
Code:
SStoppSpanne = OrderOpenPrice() + SBoughtPerc2;
SStopLossII = OrderOpenPrice() - SBoughtPerc2;

...

OrderOpenPrice() +10
OrderOpenPrice() -10
Bei der zweiten speicherst du übrigens "OrderOpenPrice() - SBoughtPerc2 (10)" in eine Int-Variable, ist sicherlich nicht so gewollt.
Zitat:
Zitat von icepick1661 Beitrag anzeigen
//---"+ 10" und "- 10" fangen Rundungsfehler ab
Hmmm, echt?

Code:
for (int iArrS=0; iArrS<=ArLSize; iArrS++)
...
if (iArrS <= 1)
{
   if (OrderStopLoss() > OrderOpenPrice() && Ask > SStopLossII)
   {
      Print("Position ist die Letztgekaufte (Short); aufsteigend: SL II: ", SStopLossII, ", OpenPrice: ", OrderOpenPrice(), ", Kurs: ", Ask, ", akt. SL: ", OrderStopLoss(), ", Done (0?): ", LotsShortDone);
   }
Wie kann es die letztgekaufte Position sein, wenn du hier wegen "iArrS <= 1" immer die erste und zweite nimmst?
Das wäre doch nur der Fall, wenn du auch nur 2 Positionen hast.
Außerdem wirst du, wie schon erwähnt Probleme mit "SStopLossII" haben, da diese Variable eine Ganzzahl ist.

Zitat:
Zitat von icepick1661 Beitrag anzeigen
STrailBaseValue = OrderStopLoss() - Ask;
STrailAdjValue = STrailBaseValue * 0.5;
STrailValue = SStopLossII - STrailAdjValue;
Die ersten beiden sollen also die 50% darstellen. Das würde ich allerdings erst machen, wenn der Kurs NICHT im Negativen (Minus-Bereich der Order) ist.

Außerdem wirst du Probleme mit diesen drei Zeilen haben, da sowohl alle drei Variablen hier, als auch "SStopLossII" vom
Typ INT sind, und somit nacher alle nur einen ganzzahligen Wert beinhalten werden, der aufgrund der Berechnungen nichtmal richtig sein wird.
Dadurch werden auch deine späteren Bedingungen und Berechnungen fehlerhaft sein.

Zitat:
Zitat von icepick1661 Beitrag anzeigen
Code:
if (iArrS > 1)

if (Ask < OrderStopLoss() && OrderStopLoss() < SStopLossII && OrderType() == OP_SELL && OrderMagicNumber() == MagicNumberShort)
{
   ShortSLAdj = STrailValue;
   
   SShortAdjResult=false;
   SShortAdjResult = OrderModify(TicketShort_No,0,ShortSLAdj,0,0,Red);
   Print("Position angepasst (ab Pos. 3): SL = Trail-SL 50%; Trail-SL = ", ShortSLAdj, "; Ticket: ", TicketShort_No, ", Index: ", iArrS);
}

CountShortCustomized++;
Hier würde ich dir raten, den ersten If-Block mit geschweiften Klammern zu versehen, oder wenigstens einzurücken und die leere Zeile dazwischen zu löschen.
Außerdem wird "CountShortCustomized++" unabhängig vom If verarbeitet, hoffe das ist so gewollt (nicht, das es noch zum ersten If gehören sollte).

Zitat:
Zitat von icepick1661 Beitrag anzeigen
Das Problem: ich setze die Bedingungen "if (iArrS <=1)" bzw. dito >1 und diese Bedingungen funktionieren scheinbar nicht, selbst wenn ich nur (abstrakt ausgedrückt) "Print irgendwas" anweise.
Mögliche Ursachen
  • Code:
    int ArSSize=ArraySize(ArShortOrderOpenPrices);
    
    for (int iArrS=0; iArrS<=ArLSize; iArrS++)
    Wenn "ArLSize" nicht definiert, oder kleiner als 0 ist, wird die Schleife nicht ausgeführt. Hier muss doch "ArSSize" anstatt "ArLSize" hin.
    --------------------------------------------------------------------
  • Code:
    if (OrderSelect(iArrS, SELECT_BY_POS, MODE_TRADES) == true)
    {
       if (OrderMagicNumber() == MagicNumberShort && OrderType() == OP_SELL)
       {
    Wenn eine der Bedingungen falsch ist, so kommst du erst garnicht rein, um etwas auszugeben.
    --------------------------------------------------------------------
  • Ansonsten versuch mal direkt nach
    Code:
    if (iArrS <= 1)
    
    oder
    
    if (iArrS > 1)
    etwas auszugeben. Überprüf aber erst mal alles vorherige, ob du überhaupt zu den If's kommst.