Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 27.07.17
icepick1661 icepick1661 ist offline
Neues Mitglied
 
Registriert seit: Jul 2017
Beiträge: 20
icepick1661 befindet sich auf einem aufstrebenden Ast
Standard Wert eines Arrays bearbeiten

Hallo,

ich habe eine weitere Frage:

Ich möchte die Stopps einzelner Positionen eines dynamischen Arrays bearbeiten. Im Beispiel Short-Orders soll das wie folgt geschehen:

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.

Vereinfacht:

Kauf zu 100, SL 110 (hier nicht das Problem, wird bei Kauf eingerichtet).
Kurs 90: SL auf 100 (= "OpenPrice")
Kurs 80: SL auf 90 (= OrderStopLossII)
Kurs 70: SL auf 85 (50% der Strecke, hier 10 Punkte als Basis).

Wie ich das schreibe, fällt mir auf, dass die "if"-Bedingungen für das OrderModifying evtl. nicht stimmen, das ist aber nicht mein Problem.

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.

Der Code diesmal als Datei, hier auch nochmal eingefügt (Traderdoc, das mit dem "# drücken verstehe ich nicht...):


int CountShortCustomized;
int LotsShortDone=0;
int ShortSLAdj=0;
int DivisorS=0;
int SStopLossII=0;
int SReduceValue=0;
int TestspannePkt=10;
double SBoughtPerc2;
double SStoppSpanne=0;

if (iPosS > 0) ArraySort (ArShortOrderOpenPrices, WHOLE_ARRAY, 0, MODE_ASCEND);

int ArSSize=ArraySize(ArShortOrderOpenPrices);

for (int iArrS=0; iArrS<=ArLSize; iArrS++)
{
if (OrderSelect(iArrS, SELECT_BY_POS, MODE_TRADES) == true)
{
if (OrderMagicNumber() == MagicNumberShort && OrderType() == OP_SELL)
{
//SBoughtPerc2 = NormalizeDouble(OrderOpenPrice() * NextBuyPercent / 100, Digits);
//Print("SBoughtPerc2 = OrderOp * NextBuyPrc / 100: ", SBoughtPerc2, "; ", OrderOpenPrice(), "; ", NextBuyPercent, " Margin: ", SYMBOL_MARGIN_INITIAL);
SBoughtPerc2 = TestSpannePkt;

SStoppSpanne = OrderOpenPrice() + SBoughtPerc2;
SStopLossII = OrderOpenPrice() - SBoughtPerc2;

//Zwischenberechnung Trail-SL
int STrailBaseValue;
int STrailAdjValue;
int STrailValue;

STrailBaseValue = OrderStopLoss() - Ask;
STrailAdjValue = STrailBaseValue * 0.5;
STrailValue = SStopLossII - STrailAdjValue;

int TicketShort_No = OrderTicket();

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);
}

if (OrderStopLoss() > OrderOpenPrice() && Ask < SStopLossII)
{
bool SShortAdjResult=false;
SShortAdjResult = OrderModify(TicketShort_No,0,OrderOpenPrice(),0,0, Red);
}

if (Ask < SStopLossII && OrderStopLoss() > OrderOpenPrice() +10 && OrderStopLoss() > OrderOpenPrice() -10)// && OrderType() == OP_SELL && OrderMagicNumber() == MagicNumberShort)
//---"+ 10" und "- 10" fangen Rundungsfehler ab
{
SShortAdjResult=false;
SShortAdjResult = OrderModify(TicketShort_No,0,SStopLossII,0,0,Red);
}

if (Ask < OrderStopLoss() && OrderStopLoss() <= SStopLossII && OrderType() == OP_SELL && OrderMagicNumber() == MagicNumberShort)
{
ShortSLAdj = STrailValue;

SShortAdjResult=false;
SShortAdjResult = OrderModify(TicketShort_No,0,ShortSLAdj,0,0,Red);
}
}

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++;
}
}
LotsShortDone = ArSSize - CountShortCustomized;
}
Angehängte Dateien
Dateityp: mq4 Find Highest Long-Order_Test.mq4 (58,7 KB, 2x aufgerufen)