[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 125

 
hoz:



Ich habe also einen Scheck für diesen Fall:

Wenn Anschlag - neuer Anschlag (in B.U.) ungleich Null ist... dann ändern wir... Wenn nicht, ändern wir nichts. Deshalb ist mir auch nicht klar, wie das passiert. Immerhin verstehe ich, dass ich die Gleichstellung von früherer und neuer Haltestelle überprüfen muss, und ich habe es getan.

Hier ist ein Blick darauf, wie ich von oben und unten prüfe, wenn ich ohne Fehler nach einer Bai fahnde:

          if(OrderStopLoss() > OrderOpenPrice())
          {
            if(NormalizeDouble(Bid-OrderStopLoss()-plus*tral,Digits) > prev)
            if(Bid > NormalizeDouble(OrderStopLoss()+plus*tral+prev,Digits))
            {
              SL = NormalizeDouble(OrderStopLoss()+plus*part*tral,Digits);
              ModifyOrder(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,Blue);return(0);
          } }

Ich kann die Funktion ModifyOrder() angeben, die für alle Änderungen der Reihenfolge und der Position geeignet ist.

 
Vinin:

Bearbeiten Sie diesen Code so, dass er nicht aussieht, als sei er gehackt worden.
Das verstehe ich nicht.
Wie bearbeiten Sie es? Was meinen Sie?
 
borilunad:
Ich würde empfehlen, sie nicht nach Balken, sondern nach so vielen Pips zu ändern. Wenn nötig, sind die Ressourcen dafür da. Und der Fehler "kein Fehler" tritt auf, wenn der Preis für eine bereits vorhandene Änderung wiederholt wird. Sie müssen also Schritt für Schritt vorgehen, wie ich es Ihnen zu Beginn geraten habe.


Die B.U. wird natürlich in Pips gezeichnet. Ich wollte die B.U.-Funktion z.B. bei jedem Tick oder beim Öffnen des Balkens aufrufen... Aber das wäre dumm. Der Preis kann pro Barren stark ansteigen. Der Aufruf wird also ähnlich sein wie der von tickwise, richtig? Ich dachte nur, vielleicht sollte eine Bedingung hinzugefügt werden, damit sie nicht bei jedem Tick aufgerufen wird. Ich denke, wir sollten den aktuellen STOP und den, der festgelegt werden soll, miteinander vergleichen...

Generell. Das ist schon seltsam.

Ich habe eine Bedingung für den Start hinzugefügt, und so hat es funktioniert:

if (priceBU != OrderStopLoss())
   {
       MovingStopLossToBU();
   }

Jetzt gibt es keine Fehler mehr.

Was ich nicht verstehe, ist, dass sich die Funktion MovingStopLossToBU() selbst nur dann ändert, wenn der Stop nicht gleich dem Stop Loss ist:

if (ND(OrderStopLoss() - priceBU * pt) != 0.0)
    if (!OrderModify(OrderTicket(), OrderOpenPrice(), priceBU, OrderTakeProfit(), 0, CLR_NONE ))
    {
       Print ("Ошибка модификации ордера ", OrderType(), " - ", GetLastError());
    }
Wie verstehen Sie ihn dann?
 
Guten Abend, könnten Sie mir bitte sagen, wie man die Kerzen oberhalb des durchschnittlichen MA(10) grün und unterhalb rot färbt?
 
hoz:


Die B.U. wird natürlich in Pips gezeichnet. Ich wollte die B.U.-Funktion z.B. bei jedem Tick oder beim Öffnen des Balkens aufrufen... Aber das wäre dumm. Der Preis kann pro Barren stark ansteigen. Der Aufruf wird also ähnlich sein wie der von tickwise, richtig? Ich dachte nur, vielleicht sollte eine Bedingung hinzugefügt werden, damit sie nicht bei jedem Tick aufgerufen wird. Ich denke, wir sollten den aktuellen STOP und den, der festgelegt werden soll, miteinander vergleichen...

Generell. Das ist schon seltsam.

Ich habe eine Bedingung für den Start hinzugefügt, und so hat es funktioniert:

Jetzt gibt es keine Fehler mehr.

Was ich nicht verstehe, ist, dass sich die FunktionMovingStopLossToBU() selbst nur dann ändert, wenn der Stop nicht gleich dem Stop Loss ist:

Wie verstehen Sie ihn dann?

Wenn in Ihrem Beispiel der Stopp bei Null liegt, bedeutet das, dass Sie gerade eine Position ohne Stopp eröffnet haben, und ich habe Ihnen den Fall genannt, dass Sie bereits den Break-even erreicht haben.

Aber siehe oben, ich habe Ihnen mein Schleppnetz ohne Break-even angegeben! Und ich kann Ihnen die Funktion geben.

 
agat8430:
Das verstehe ich nicht.
Wie kann man sie bearbeiten? Wie kann man sie verstehen?
Wenn Sie das nicht verstehen, dann sind Sie hier falsch. Studiere, was du nicht verstehst, und du wirst fragen. Und wenn Sie etwas nicht verstehen, brauchen Sie es auch nicht.
 
borilunad:
Siehe oben, ich habe Ihnen mein fehlerfreies Schleppnetz zur Verfügung gestellt! Und ich kann Ihnen die Funktion geben.


Ich habe Ihre Antwort nicht gesehen, als ich schrieb. Ich werde jetzt einen Blick darauf werfen.

Aber im Allgemeinen würde ich mich freuen, Ihre Änderungsfunktion zu sehen, vielleicht lerne ich ja etwas Neues für mich.

 
borilunad:

Wenn der Stopp in Ihrem Beispiel Null ist, bedeutet dies, dass Sie gerade eine Position ohne Stopp eröffnet haben. Und ich habe Ihnen den Fall geschildert, in dem die Gewinnschwelle bereits erreicht ist.

Siehe oben, ich habe Ihnen mein Schleppnetz ohne Gewinnspanne angegeben! Und ich kann Ihnen die Funktion geben.


Nein, nicht ohne Zwischenstopp. Ich habe nur einen Teil davon veröffentlicht. Hier ist meine Break-even-Funktion:

//+-------------------------------------------------------------------------------------+
//| Перевод в б.у. рыночных ордеров                                                     |
//+-------------------------------------------------------------------------------------+
void MovingStopLossToBU()
{
    double priceBU;
    int type = OrderType();
    for (int i=OrdersTotal() - 1; i>=0; i--)
    {
        if (!OrderSelect(i,SELECT_BY_POS)) continue;
        if (i_magic != -1) if (OrderMagicNumber() != i_magic) continue;
        if (OrderSymbol() != Symbol()) continue;
        if (OrderType() > 1) continue;
        
        RefreshRates();
        
        if (type == 0)
        {
           double price = Ask;
           int li_cmd = 1;
        }
        else
        {
           price = Bid;
           li_cmd = -1;
        }

           if (li_cmd * (price - OrderOpenPrice()) >= i_triggerForBU * pt)
           {
             priceBU = ND(OrderOpenPrice() + li_cmd * (i_preservedProfit * pt));
             if (ND(OrderStopLoss() - priceBU * pt) != 0.0)
             {

                 if (!OrderModify(OrderTicket(), OrderOpenPrice(), priceBU, OrderTakeProfit(), 0, CLR_NONE ))
                 {
                     Print ("Ошибка модификации ордера ", OrderType(), " - ", GetLastError());
                 }
               
                     Comment ("Ордер успешно переведён в безубыток");
                     Print ("Ордер успешно переведён в безубыток");
             }
           }
    }
}

In der Zeile ist deutlich zu sehen, dass, wenn die berechnete Haltestelle mit der bereits vorhandenen übereinstimmt, keine Änderung vorgenommen wird! Oder? Der Scheck lautete also ursprünglich? Aber der Fehler 1 tauchte immer wieder auf, bis ich vor der Änderungsfunktion eine andere Bedingung in den Start eingegeben hatte:

if (priceBU != OrderStopLoss())
   {
       MovingStopLossToBU();
   }
Das ist der Grund.... Das ist es, was ich herauszufinden versuche. Ich denke, ich habe alles gründlich beschrieben.
 
hoz:
Wenn Sie das nicht verstehen, dann sind Sie hier falsch. Studiere, was du nicht verstehst, und du wirst fragen. Und wenn Sie etwas nicht verstehen, brauchen Sie es auch nicht.


Wenn du nichts verstehst, brauchst du es auch nicht. Sag mir, wie ich den Code bearbeiten kann, damit er nicht gehackt aussieht, wenn du alles verstehst. Ich bin zum ersten Mal in diesem Forum und habe eine so nette Antwort bekommen.

"Geniale Menschen haben eine geniale Antwort."

 
agat8430:


Nun, dann sagen Sie mir, wie man den Code zu bearbeiten, die nicht ähneln würde ein Hack, wenn Sie alle verstehen. Ich kam zu dem Zweig für Anfänger. Ich bin zum ersten Mal ins Forum gekommen und habe eine nette Antwort bekommen.

"Geniale Menschen haben eine geniale Antwort".

Zunächst für Neueinsteiger:

Ein Forum-Navigator und Antworten auf häufig gestellte Fragen. Eine sehr empfehlenswerte Lektüre!( 1 2 3 4 5 6 ) 51 18.02.2011 FAQ

Grund der Beschwerde: