Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 191

 
yan720:

Ich danke Ihnen für Ihre Antwort. Ich war selbst überrascht, dass eine solche Frage überhaupt aufkam. Aber vielleicht habe ich das, was ich gesehen habe und was die Frage ausgelöst hat, falsch verstanden.

Ich schaue mir jetzt den Code anderer Leute an, um zu sehen, welche Methoden (die sich von meinen unterscheiden und vielleicht effizienter sind) zur Implementierung bestimmter Algorithmen verwendet werden. Im Moment schaue ich mir den berüchtigten Ilan 1.6 Expert Advisor (im Anhang) an. Ich kann sehen, dass es aus verschiedenen Teilen zusammengesetzt und dann wieder aufgebaut wurde. Die Zeile 337 enthält jedoch eine benutzerdefinierte Nachlaufstoppfunktion (obwohl das Kennzeichen für ihre Verwendung zu Beginn zwangsweise gelöscht wird). Diese Funktion wird in Zeile 52 aufgerufen.

Meine Frage ergibt sich daraus, dass der oben erwähnte Trailing-Stop offene Aufträge (von denen es mehrere geben kann) durch einen Stop-Loss modifiziert, wobei der ursprüngliche TakeProfit beibehalten wird, aber derselbe Wert (AveragePrice, der in den Zeilen 173 und 178 berechnet wird) für diese Aufträge als offener Preis festgelegt wird (zweiter Parameter der Funktion OrderModify).

Oder wird dieser Parameter (offener Preis) vom Server einfach ignoriert, wenn ein offener Auftrag geändert wird, und der Server kann einen beliebigen Preis festlegen?

Beim Ändern einer Marktposition sollte der Preis gesetzt werden und dem Eröffnungskurs entsprechen : OrderOpenPrise()

PS Wenn ich Sie wäre, würde ich nicht nach "effizienten Algorithmen" in diesem Code suchen - es sieht so aus, als hätte die Person den Code geschrieben, ohne wirklich zu wissen, was sie da tut...

 
Gehe zu
 Alert("Исполнение программы");
    double p[100];
    int i =0;
    int n = OrdersTotal ();
    int t =0;
    
    for (i=0; i<=n+1; i++)
    {
    
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
    if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
     {
     
      p[i+1] = OrderProfit();      // р - це прибуток ордера
     
     } 
    }
    for (i=0; i<=n+1; i++)
    {
    if (p[i+1]>0)                  // якщо ордер прибутковий, то його 
    {
      Alert("Є прибуток ордер ",i+1);
      OrderSelect(i+1,SELECT_BY_POS,MODE_TRADES); 
      Alert("Маємо помилку ",GetLastError());
      Alert("Вибрали ордер ",i+1);
      double ld_Price;
      if (OrderType() == 0) ld_Price = NormalizeDouble (Bid, Digits);
      else ld_Price = NormalizeDouble (Ask, Digits);
      OrderClose (OrderTicket(), OrderLots(), ld_Price, 2);  // треба зачинити 
      Alert("Маємо помилку ",GetLastError());
      Alert("Закрили ордер ",i+1); 
       if ( OrderType()==OP_BUY)                              //  в залежності від того, якого типу ордер ми зачинили
       { 
        Alert("Ордер типу бай");
        OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid-25*Point,Ask+25*Point);   // змінюється порядок відкривання наступних ордерів
        Alert("Відкрили ордер типу селл");
        Sleep(10000);
        OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-25*Point,Ask+25*Point);
        Alert("Відкрили ордер типу бай");
        }else
      {
        OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-25*Point,Ask+25*Point);
        Alert("Відкрили ордер типу бай");
        Sleep(10000);
        OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid-25*Point,Ask+25*Point);    
        Alert("Відкрили ордер типу селл");
      }
    } 
   } 
    Alert("Последняя ошыбка ",GetLastError()); 
//----
   return(0);
  }

Finde, dass "Dummheit" gut ist, habe Erbarmen mit einem Mann, der von Pascal gequält wird.

 
artmedia70:
Wenn eine Marktposition geändert wird, muss der Preis festgelegt werden und dem Eröffnungskurs der Position entsprechen: OrderOpenPrise()

Dann wird diese Funktion Ihrer Meinung nach nicht funktionieren? Ich habe es nicht getestet, aber es scheint mir ein Teil eines funktionierenden Codes zu sein (dieser Ilan wurde offensichtlich aus einem bestenfalls fehlerhaften Code neu erstellt). Oder ist es immer noch ein schäbiger Code?

void TrailingAlls(int pType, int stop, double AvgPrice) {
   int profit;
   double stoptrade;
   double stopcal;
   if (stop != 0) {
      for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {
         if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) {
            if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
            if (OrderSymbol() == Symbol() || OrderMagicNumber() == MagicNumber) {
               if (OrderType() == OP_BUY) {
                  profit = NormalizeDouble((Bid - AvgPrice) / Point, 0);
                  if (profit < pType) continue;
                  stoptrade = OrderStopLoss();
                  stopcal = Bid - stop * Point;
                  if (stoptrade == 0.0 || (stoptrade != 0.0 && stopcal > stoptrade)) OrderModify(OrderTicket(), AvgPrice, stopcal, OrderTakeProfit(), 0, Aqua);
               }
               if (OrderType() == OP_SELL) {
                  profit = NormalizeDouble((AvgPrice - Ask) / Point, 0);
                  if (profit < pType) continue;
                  stoptrade = OrderStopLoss();
                  stopcal = Ask + stop * Point;
                  if (stoptrade == 0.0 || (stoptrade != 0.0 && stopcal < stoptrade)) OrderModify(OrderTicket(), AvgPrice, stopcal, OrderTakeProfit(), 0, Red);
               }
            }
            Sleep(1000);
         }
      }
   }
}
 
Hallo, müssen Sie einen Expert Advisor auf die Strategie 3 candles.trade auf dem Renko-Charts, die von Markt noise.When drei aufeinanderfolgende Bars in die gleiche Richtung, um einen Auftrag zu kaufen oder zu verkaufen, Stop-Loss auf der Oberseite des vorangegangenen bar,nach dem Schließen der Kerze nimmt einen Stop-Loss auf prevedshego bar durchgeführt
 
artmedia70:

PS Wenn ich Sie wäre, würde ich nicht nach "effizienten Algorithmen" in diesem Code suchen - es sieht so aus, als hätte der Typ den Code geschrieben, ohne wirklich zu wissen, was er da tut...

Ja, der Code ist sehr spezifisch und enthält eine Menge Redundanzen, und nicht nur das. Aber ich interessiere mich nicht so sehr für Algorithmen als solche, sondern für die Art und Weise, wie die Idee dahinter umgesetzt wird. Ich schaue mir das Gesamtbild an, oder so ähnlich. Was wird in die einzelnen Funktionen hineingesteckt, wie wird ein und derselbe Längslenker im Gegensatz zu meinem eigenen implementiert, usw. Ich bin Autodidakt und es ist einfach nützlich für mich :)
 
artmedia70:
Am richtigen Ort - welcher Ort ist das?


Zum Beispiel ist ein Auftrag schon bei 1200 Punkten... und der Preis z.B. ist gesunken und die Sterne haben sich aufgereiht, so dass an dieser Stelle ein Auftrag platziert werden muss... und der Auftrag ist schon da und nicht, um den Saldo unter den erforderlichen zu senken, nicht, um 2 Aufträge von je 1 zum Beispiel zu setzen
 
yan720:

Glauben Sie dann, dass diese Funktion nicht funktioniert? Ich habe es nicht getestet, aber es scheint mir Teil eines funktionierenden Codes zu sein (dieser Ilan wurde offensichtlich aus einem bestenfalls fehlerhaften Code neu erstellt). Oder ist es immer noch ein schäbiger Code?

Nun... der Code ist nicht echt. Zumindest das.

 
Der Kern der Frage ist der folgende. Ich möchte die Standard-MACD einfache Expert Advisor zu ändern, aber ich bin eine totale Null in der Programmierung.
Ich möchte den EA so ändern, dass er nicht mit einem Auftrag, sondern mit einem Raster, einem Stopp und einer Magie arbeitet.
Hier sind die Variablen, die ich hinzufügen wollte:
Stoploss = wird auf dem gleichen Niveau für das gesamte Raster platziert, zum Beispiel ist gleich EUR/USD = 200pp und wird auf dem Niveau von 1,3450 für alle Aufträge im Raster platziert
MaxOnDer = Maximale Anzahl von Aufträgen im Raster, z.B. wenn=3, dann werden maximal 3 Aufträge im Raster sein
Dist = Abstand zwischen zwei schwebenden Aufträgen

Lommultiplikator = Das Verhältnis der Losgröße des nächsten Auftrags im Raster.

Magie= magische Zahl

Wir beenden den Handel wie im ursprünglichen Code, d.h. alle Aufträge im Raster werden geschlossen, wenn der erste Auftrag geschlossen wird.

Das ist alles
Wenn jemand otvezvayut würde sehr dankbar sein!
Ich wäre sehr dankbar! Vielleicht hat jemand einen fertigen Expert Advisor, der bereits im Leben implementiert ist, auch tun wird.
 
sannin:

Es gibt zum Beispiel schon eine Order bei 1200 Punkten... und der Preis ist zum Beispiel gesunken, und die Sterne sind so angeordnet, dass an dieser Stelle die Order platziert werden muss... und die Order ist schon da und der Saldo darf nicht unter den erforderlichen Saldo sinken, damit nicht 2 Orders von einem platziert werden, sagen wir

Es geht ungefähr so:

//+----------------------------------------------------------------------------+
bool ExistOrdersByPrice(string sy, int op, int mn, double pp) {
   int i, k=OrdersTotal()-1;
   for (i=k; i>=0; i--) {
      if (OrderSelect(i,SELECT_BY_POS)) {
         if (OrderMagicNumber()!=mn)   continue;
         if (OrderSymbol()!=sy)        continue;
         if (OrderType()!=op)          continue;
         if (MathAbs(OrderOpenPrice()-pp)<0.5*Point) return(true);
         }
      else Print("FUNC ExistOrdersByPrice() : ошибка выбора ордера "+GetLastError());
      }
   return(false);
}
//+----------------------------------------------------------------------------+

Um zu prüfen, ob es eine BuyStop-Order auf das aktuelle Symbol zum Preis von 1,35000 mit Magic gibt, rufen wir die Funktion auf:

//+----------------------------------------------------------------------------+
   if (!ExistOrdersByPrice(Symbol(), OP_BUYSTOP, Magic, 1.35000)) {
      // тут код, если нет такого ордера
      }
   else {
      // тут код, если есть такой ордер
      }
//+----------------------------------------------------------------------------+
 
atztek:

Wenn es um Dokumentation geht, markieren Sie das Wort im MetEditor und drücken Sie F1. Oder gehen Sie zum Beispiel online:
https://docs.mql4.com/ru/customind/SetLevelStyle

Natürlich danke, aber wenn Sie zu faul sind, die Frage zu lesen, was nützt es dann, zu antworten? Ich kann den Wert, die Dicke, die Farbe und den Stil der Ebenen im Indikator in den beiden Funktionen ändern, die ich habe. Ich habe keinen Zugang zu der Beschreibung. Ich frage noch einmal: Kennt jemand die Antwort? Ich weiß nicht, ob ich es schon einmal gesehen habe.

Ich habe ein Bild beigefügt, um zu zeigen, was ich brauche.