[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 622

 
Rossi:

Gibt es eine Möglichkeit, die Instrumente in den Registerkarten am unteren Rand des Bildschirms zu sortieren? denn 8 Instrumente in 4 Zeitrahmen sind in einem Durcheinander verstreut....

keine
 
DDFedor:

Nehmen Sie die Registerkarte mit dem Namen des Diagramms und ziehen Sie sie an die richtige Stelle.

AAAAAAAAAAAAAAAAAAAAAAAAAA tolle Antwort, danke...
 
artmedia70:
:) Jetzt ist der Fehler 130 aufgetreten. Das Verwirrendste ist, dass bei falschen Stopps (130) immer noch korrekte Starts gesetzt werden (berechnet von ATR), aber meine Stopps waren nicht von Anfang an gesetzt...
Gibt es eine Möglichkeit, dies zu verstehen?
Ein Fehler von 130 könnte entweder ein falscher Stoploss oder ein falscher Takeprofit sein.
 
ToLik_SRGV:


Ich fügte Limit-Aufträge (ich vergaß über sie in früheren Code :)) + Fehler # 1 Verarbeitung (vor der Änderung neuen Preis mit aktuellen verglichen wird, wenn sie die gleichen sind, dann nichts passiert):

Es scheint, dass modifizierte Aufträge, die durch das Schleppnetz näher an den Markt bewegt werden, ihre TakeProfit-Vererbung verlieren... Sobald sie ausgelöst werden, bleiben sie auf der Karte in Positionen hängen und verbrauchen dummerweise Marge. Sie schließen nicht mit Gewinn oder Verlust ab, und es gibt keine TakeProfit-Linie... Allerdings habe ich den tp-Wert, der mit ATR berechnet wird, absichtlich in den Code eingefügt, um ihn zu überprüfen:

void trailingOrder(int magic, int trailing){
   int index = 0, tp=TakeProfitATR (5);
   while(trailing > 0 && OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){
      if(OrderMagicNumber() == magic){
         if(OrderType() == OP_BUYSTOP){
            if(OrderOpenPrice() - Ask > Point*trailing){
               if((Ask+Point*trailing) - Ask >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 (Ask+Point*trailing) - Ask > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Ask+Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Ask+Point*trailing,OrderStopLoss(),
                  /*OrderTakeProfit()*/tp, 0, MediumSpringGreen))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
// ..... Далее по тексту функции также добавлены изменения...

Sowohl vor als auch nach meinen Änderungen hatte der geänderte Auftrag weder vor noch nach seiner Umwandlung in eine Position eine Take Line...

Was kann der Grund dafür sein?

 
artmedia70:

Es scheint, dass modifizierte Aufträge, die durch das Schleppnetz näher an den Markt bewegt werden, ihre TakeProfit-Vererbung verlieren... Sobald sie ausgelöst werden, bleiben sie auf der Karte in Positionen hängen und verbrauchen dummerweise Marge. Sie schließen nicht mit Gewinn oder Verlust ab, und es gibt keine TakeProfit-Linie... Allerdings habe ich den tp-Wert, der mit ATR berechnet wird, absichtlich in den Code eingefügt, um ihn zu überprüfen:

Sowohl vor als auch nach den Änderungen hatte der geänderte Auftrag weder vor noch nach seiner Umwandlung in eine Position eine Take Line...

Was könnte der Grund dafür sein?

Wenn Sie den Preis eines schwebenden Auftrags ändern, sollten Sie auch den Stoploss und den Takeprofit ändern.
 
khorosh:
Fehler 130 kann entweder der falsche Stoploss oder der falsche Takeprofit sein.
Ich danke Ihnen. Das wusste ich bereits... Das war nicht der Punkt. Es war das Schleppnetz, das mir die Fehlermeldung gab - ich habe es deaktiviert und alles ist in Ordnung. Ich habe noch keine Zeit, mich damit zu befassen.
 
khorosh:
Wenn Sie den Preis einer schwebenden Order ändern, sollten Sie auch StopLoss und TakeProfit ändern.

Tut das nicht auch die ATR Take Profit Funktion? Ich rufe es auf, bevor ich eine Order ändere, hole mir den aktuellen Take-Wert, der von TakeProfitATR() berechnet wurde und füge ihn in die Orderänderung ein... Dies ist in meinem obigen Beispiel der Fall:

int index = 0, tp=TakeProfitATR (5); // Рассчёт нового тейка по значению ATR. Ф-ция возвращает размер тейка в пунктах

....

if(!OrderModify(OrderTicket(),Ask+Point*trailing,OrderStopLoss(),
   /*OrderTakeProfit()*/tp, 0, MediumSpringGreen))Print(">>> ERROR ", GetLastError()); // здесь вместо OrderTakeProfit() подставляю tp
Sieht aus, als hätte ich beim Schreiben einen Fehler gefunden... Die TakeProfit-Funktion von ATR liefert den TakeProfit-Wert in Pips, während der Preis verwendet werden sollte.
Aber dann verstehe ich nicht, warum der geänderte Auftrag seinen Takepoint-Wert verlor, bevor diese Änderungen vorgenommen wurden... Obwohl OrderTakeProfit() den Wert seines Take-Points in die zu ändernde Order schreiben sollte...
Und dann stellt sich die Frage, warum ich sie jedes Mal ändern sollte, wenn ich z. B. nur einen schwebenden Auftrag näher an den Markt heranbringen möchte, ohne ihn zu ändern, wenn der Markt sich von ihm entfernt hat und bereit für eine Umkehr oder Korrektur ist... ???
 
artmedia70:

Tut das nicht auch die ATR Take Profit Funktion? Ich rufe es auf, bevor ich eine Order ändere, hole mir den aktuellen Take-Wert, der von TakeProfitATR() berechnet wurde und füge ihn in die Orderänderung ein... Dies ist in meinem obigen Beispiel der Fall:

....

Es sieht so aus, als hätte ich meinen Fehler gefunden, als ich dies schrieb... Die TakeProfit-Funktion von ATR liefert den TakeProfit-Wert in Pips, während der Preis verwendet werden sollte.
Aber dann verstehe ich nicht, warum ein modifizierter Auftrag vor diesen Änderungen immer noch seinen Takepoint-Wert verloren hat... Obwohl OrderTakeProfit() den Wert seines Take-Points in die zu ändernde Order schreiben sollte...
Und dann stellt sich die Frage, warum ich sie jedes Mal ändern sollte, wenn ich z. B. nur eine schwebende Order näher an den Markt heranbringen möchte, ohne sie zu ändern, wenn der Markt sich von ihr entfernt hat und bereit für eine Umkehr oder Korrektur ist... ???




Ich habe meiner Methode automatische Stopps und Übernahmen hinzugefügt. Wenn Sie eine Pending Order aufgeben, müssen Sie nur noch Limiter setzen und die Methode zieht alles an die richtige Stelle :))

//+------------------------------------------------------------------+
void trailingOrder(int magic, int trailing){
   int index = 0;
   double takeprofit, stoploss;
   while(trailing > 0 && OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){
      if(OrderMagicNumber() == magic){
         if(OrderType() == OP_BUYSTOP){
            if(OrderOpenPrice() - Ask > Point*trailing){
               if((Ask+Point*trailing) - Ask >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 (Ask+Point*trailing) - Ask > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Ask+Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Ask+Point*trailing, Ask+Point*trailing-(OrderOpenPrice()-OrderStopLoss()), Ask+Point*trailing+(OrderTakeProfit()-OrderOpenPrice()), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
         if(OrderType() == OP_SELLSTOP){
            if(Bid - OrderOpenPrice() > Point*trailing){
               if(Bid - (Bid-Point*trailing) >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 Bid - (Bid-Point*trailing) > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Bid-Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Bid-Point*trailing,Bid-Point*trailing+(OrderStopLoss()-OrderOpenPrice()),Bid-Point*trailing-(OrderOpenPrice()-OrderTakeProfit()), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
         if(OrderType() == OP_SELLLIMIT){
            if(OrderOpenPrice() - Bid > Point*trailing){
               if((Bid+Point*trailing) - Bid >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 (Bid+Point*trailing) - Bid > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Bid+Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Bid+Point*trailing,Bid+Point*trailing+(OrderStopLoss()-OrderOpenPrice()),Bid+Point*trailing-(OrderOpenPrice()-OrderTakeProfit()), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
         if(OrderType() == OP_BUYLIMIT){
            if(Ask - OrderOpenPrice() > Point*trailing){
               if(Ask - (Ask-Point*trailing) >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 Ask - (Ask-Point*trailing) > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Ask-Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Ask-Point*trailing,Ask-Point*trailing-(OrderOpenPrice()-OrderStopLoss()),Ask-Point*trailing+(OrderTakeProfit()-OrderOpenPrice()), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
      }
      index++;
   }
}
//+------------------------------------------------------------------+
 
ToLik_SRGV:


Ich habe der Methode automatische Stopps und Übernahmen hinzugefügt. Beim Einstellen von Pending Orders setze ich einmal Limiter und dann zieht die Methode selbst alles an die richtige Stelle :))

Sehr, sehr nützlich! Aber nicht optimal. Wir sollten die Aufnahme dynamisch ändern. Warum müssen wir dem Markt folgen? Wenn wir einen schwebenden Auftrag erteilen und der Kurs sich wegbewegt hat - zum Beispiel bei einer Korrektur... Was sollen wir tun? Sollen wir warten, bis der Preis wieder steigt? Oder den Auftrag löschen? Wäre es nicht besser, dies zu tun...

Stellen wir uns eine Situation vor, in der der Markt eine geringe Volatilität, aber einen stetigen Aufwärtstrend aufweist. Der Kurs hat sich langsam von der ausstehenden SELLSTOP-Order nach oben entfernt. Eine offene BUY-Position wurde bereits ausgearbeitet und mit Gewinn geschlossen. Wir warten, bis die Marktvolatilität zunimmt, und sobald sie einen bestimmten Schwellenwert überschreitet, platzieren wir eine Limit-Order auf den Preis. So fangen wir die begonnene Korrektur ab, und der Limiter funktioniert nicht als Sperrposition, sondern als zusätzliche Einnahmequelle. Hätten wir ihn nicht bewegt, hätte die Korrektur ihn vielleicht erreicht, berührt und beendet. In diesem Fall würden wir in einem Aufwärtstrend eine Lota-Sell-Position einnehmen.

Ein solcher Ausflug in eine Trendsafari...

Wenn wir dynamische TPs haben, dann ist es wahrscheinlicher, dass wir durch das Verschieben einer schwebenden Order in den Markt und unter Berücksichtigung einer starken Volatilität (hier wird sie größer sein als bei schwacher Volatilität) einen größeren Gewinn aus einer Korrektur ziehen als im Falle statischer TPs. Wie auch immer, wenn wir beim Take nicht geschlossen haben, wird das Schleppnetz seine Arbeit tun und wir werden nur den entgangenen Gewinn verlieren...

Igitt... Es ist schon lange her, dass ich so viel auf der Tastatur geklickt habe...

Daraus ergibt sich die Anregung von selbst. Bei der Übergabe der Parameter der Funktion auch TimeFrame. Und berechnen Sie auf dieser Grundlage den Take aus den ATR-Werten.

Ich habe einige Zeit experimentiert und meine Untersuchungen für M5 TF führten zu der Schlussfolgerung, dass der optimale Take Profit nach ATR mit ATR*45000 berechnet wird, und ich habe es für meine Berechnungen getan. Bei diesen Werten "fängt" der Markt die Einnahmen fast immer rechtzeitig ein:

//+------------------------------------------------------------------+
//|                  Take from ATR                                   |
//+------------------------------------------------------------------+
double TakeProfitATR (int tf)
  {
   double   atr   =iATR(NULL,tf,14,0);
   double   mltp  =15000;
   if (tf==1) mltp=15000;
   if (tf==5) mltp=45000;
   double   tp    =MathRound(atr*mltp);
   return  (tp);
  }

Natürlich ist die Funktion noch nicht fertig, aber für mich reicht es zum Testen (ich teste gerade M5)... Übrigens, mit dem Eingabewert = 1 ergibt sich ein recht guter Abstand für die Einstellung von Pending Orders.

Es wäre schön, es in Ihrer Funktion zu sehen... :)

Trotzdem vielen Dank - es ist ziemlich befriedigend, wenn man bedenkt, welche Änderungen ich vorgenommen habe, nur um das oben genannte zu erreichen...
ZS... Es wäre schön, wenn man Farben für die Änderungssymbole hinzufügen könnte... (eigentlich habe ich sie schon hinzugefügt)...

 

Hier eine Frage: Wie geht BC mit einer großen Anzahl von Geschäften um? Mein Expert Advisor eröffnet alle 29 Minuten Positionen (nur eine von fünf Strategien). Wenn dann das Eigenkapital um fünf Prozent steigt, werden sie alle zusammen geschlossen. Die Hauptsache ist, dass sich das Guthaben alle drei bis fünf Tage um fünf Prozent erhöht.

Ich frage mich, ob BC irgendwelche Ansprüche auf diese Art von Handel hat.

Grund der Beschwerde: