Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1625

 
Valeriy Yastremskiy #:
Erstens beträgt die Differenz 1000 vor dem Zyklus. Wenn in der Schleife der Eröffnungskurs abzüglich des aktuellen Kurses modulo kleiner ist als die Differenz, dann ist die Differenz gleich dem erhaltenen Wert und das Ticket wird in einer Variablen gespeichert.

Das habe ich auch gedacht. Aber irgendetwas ist schief gelaufen. Können Sie mir ein Beispiel dafür geben, wie ich den Eröffnungskurs des nächsten Auftrags zum aktuellen Kurs online verfolgen kann? Oder vergleichen Sie sie einfach und suchen Sie nach dem niedrigsten Preis)

double FindSellOpen() 

{
   int oldticket;
   double oldopenprice=0;
   ticket=0;
   double Dist=1000000.0;
   
   for(int i=1; i<=OrdersTotal(); i++) 
   {
      if (OrderSelect(i-1,SELECT_BY_POS)==true)
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
         {
            oldticket = OrderTicket();
            if (NormalizeDouble(MathAbs(oldticket),Digits) < NormalizeDouble(Dist,Digits)) 
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return(oldopenprice);
}
 
makssub #:

Das habe ich auch gedacht. Aber irgendetwas ist schief gelaufen. Können Sie mir ein Beispiel dafür geben, wie ich den Eröffnungskurs des nächsten Auftrags zum aktuellen Kurs online verfolgen kann? Oder vergleichen Sie sie einfach und suchen Sie nach dem niedrigsten Preis)

Schauen Sie sich das an:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 05.06.2008                                                     |
//|  Описание : Возвращает тикет ближайшей к рынку позиции по цене открытия.   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int TicketNearPos(string sy="", int op=-1, int mn=-1) {
  double mi, p;
  int    i, k=OrdersTotal(), pp=0, ti=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (OrderType()==OP_BUY)  mi=MarketInfo(OrderSymbol(), MODE_ASK);
            if (OrderType()==OP_SELL) mi=MarketInfo(OrderSymbol(), MODE_BID);
            p=MarketInfo(OrderSymbol(), MODE_POINT);
            if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
            if (pp==0 || pp>MathAbs(OrderOpenPrice()-mi)/p) {
              pp=MathAbs(OrderOpenPrice()-mi)/p;
              ti=OrderTicket();
            }
          }
        }
      }
    }
  }
  return(ti);
}
 
MakarFX #:

auch dies korrigieren.

MakarFX #:

Keine Multiplikation notwendig MODE_SPREAD - Spread in Pips

können Sie es überprüfen.

und machen es so

Guten Tag Makar!

Wenn Sie die Logik der Schließung von Min- und Max-Aufträgen verstehen wollen, haben Sie zwei Teile des Codes. In Worten klingt das so: "Wenn der Drawdown eines Rasters von Aufträgen ein bestimmtes Niveau überschreitet, schließen wir die Min- und Max-Aufträge im Raster mit einem Gewinn, der nicht unter dem angegebenen Niveau liegt".

Dann "Wenn der Drawdown unter das festgelegte Niveau gefallen ist, kehren wir zum Prinzip der Mittelwertbildung der Aufträge zurück, alle Aufträge mit Gewinn durch alle Aufträge mit Verlust".

Dann "Wenn der Drawdown nicht unter das festgelegte Niveau gesunken ist , schließen wir die nächsten Min- und Max-Orders wieder, wenn der Gewinn erreicht ist".

Jetzt versteht der Expert Advisor, dass bei Überschreiten des Drawdowns die Min- und Max-Orders genommen werden - der EA schließt das erste Paar, wie er sollte, aber er schließt alle anderen Paare zum gleichen Preis, ohne auf die Gewinnberechnung zu achten.

Soweit ich das verstehe, sollte ich die Funktion OrderClose()durchsehen, um sie rechtzeitig zu stoppen. Vielen Dank im Voraus für die Hilfe!!!!

if (CountTrade() < MaxOrders)                                                           
       {
           int order_type = FindLastOrderType();
           if (order_type == OP_BUY)
           { 
              price = FindLastOrderPrice(OP_BUY);  
              if(Ask<= price - Step()*Point)
              {
                  lastlot = NormalizeDouble(GetMinLotOrder()*MathPow( MultiplierParameter, OrdersTotal()), 2);
                  ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, slip, 0, 0, "Групповой ордер", Magic, 0, Blue);
                  if (ticket < 1)
                      Print ("Ошибка ордера на покупку");
                  ModifyOrders(OP_BUY);
              }
           }
             if (order_type == OP_SELL)
           { 
              price = FindLastOrderPrice(OP_SELL);  
              if(Bid>= price + Step()*Point)
              {
                  lastlot = NormalizeDouble(GetMinLotOrder()*MathPow( MultiplierParameter, OrdersTotal()), 2);
                  ticket = OrderSend(Symbol(), OP_SELL, lastlot, Bid, slip, 0, 0, "Групповой ордер", Magic, 0, Red);
                  if (ticket < 1)
                      Print ("Ошибка ордера на продажу!");
                  ModifyOrders(OP_SELL);
              }
           }
         } 
         double op = CalculiteProfit(); 
         if (op > ProfitMinMaxOrders && Drawdown > DrawdownClosingMinMaxOrders)
           {
           ClosseMinMaxOrders();
           } 

//+----------------------------------------------------------------------------+
//| Калькуляция профита максимального и минимального ордера в сетке            |
//+----------------------------------------------------------------------------+
double CalculiteProfit()
{
    double AmountMinMaxProfit = 0;
    for(int i = OrdersTotal()-1; i>=0; i--)
    {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
        if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
        {
          if (OrderType() == OP_BUY || OrderType() == OP_SELL)
          {
            AmountMinMaxProfit = GetProfitMinOrder() + GetProfitMaxOrder();
          }
        }
      }
    }
    return(AmountMinMaxProfit);
}
//+----------------------------------------------------------------------------+
//| Закрытие минимального и максимального ордеров                              |
//+----------------------------------------------------------------------------+
void  ClosseMinMaxOrders()
{
  int slipp = (int) MarketInfo(_Symbol,MODE_SPREAD)*2;
  for(int i = OrdersTotal()-1; i>=0; i--)
  {
     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
     {
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
        {
         if (OrderType() == OP_BUY)
          {
         if (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp))
            Print("Максимальный и минимальный ордера на покупку успешно закрыты!");
         else
              Print("Не удалось закрыть максимальный и минимальный ордера на покупку!",GetLastError());
          }   
   
        if (OrderType() == OP_SELL)
         {
        if (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Ask, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Ask, slipp))
            Print("Максимальный и минимальный ордера на продажу успешно закрыты!");
         else
              Print("Не удалось закрыть максимальный и минимальный ордера на продажу!",GetLastError());
         }
       } 
     }
  }
}


 
Guten Tag, entschuldigen Sie die primitive Frage, aber wo kann ich die Kontaktdaten des Mieters der EA finden? Oder wie kann ich die Person kontaktieren, die den EA gekauft/gemietet hat?
 
Oleksandr Nozemtsev #:
Hallo, entschuldigen Sie die primitive Frage, aber wo kann ich die Kontaktdaten des Mieters der EA finden? Oder wie kontaktiere ich die Person, die einen EA gekauft/gemietet hat?

Das können Sie nicht. Auf der Registerkarte Produktdiskussion können Sie einen Dialog führen. Sie können Nachrichten auf der entsprechenden Registerkarte veröffentlichen.

 
Vladimir Karputov #:

Das können Sie nicht. Auf der Registerkarte Produktdiskussion können Sie einen Dialog führen. Sie können Nachrichten auf der entsprechenden Registerkarte posten.

Ich danke Ihnen!

 
Guten Tag.
Können Sie mir sagen, wo ich die Zitate in mt 5 bereinigen kann?
Und ist es möglich, nicht alle zu löschen, sondern nur die alten?
 
Roman Kutemov #:
Guten Tag.
Können Sie mir sagen, wo ich die Zitate in mt 5 bereinigen kann?
Und ist es möglich, nicht alle zu löschen, sondern nur die alten?
C:\MetaTrader5\bases\MetaQuotes-Server\history
 
EVGENII SHELIPOV #:

Guten Tag Makar!!!

Ich habe Ihnen eine weitere Funktion gegeben... Sie brauchen nichts hinzuzufügen.

//+----------------------------------------------------------------------------+
//| Закрытие минимального и максимального ордеров                              |
//+----------------------------------------------------------------------------+
void  ClosseMinMaxOrders()
{
  int slipp = (int) MarketInfo(_Symbol,MODE_SPREAD)*2;
  for(int i = OrdersTotal()-1; i>=0; i--)
  {
     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
     {
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
        {
         if (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp))
            Print("Максимальный и минимальный ордера на покупку успешно закрыты!");
         else
            Print("Не удалось закрыть максимальный и минимальный ордера на покупку!",GetLastError());
       } 
     }
  }
}

Oder Sie können es verschieben...

//+----------------------------------------------------------------------------+
//| Закрытие минимального и максимального ордеров                              |
//+----------------------------------------------------------------------------+
void  ClosseMinMaxOrders()
{
  int slipp = (int) MarketInfo(_Symbol,MODE_SPREAD)*2;
  if (CalculiteProfit() > ProfitMinMaxOrders && Drawdown > DrawdownClosingMinMaxOrders)
  {   
     for(int i = OrdersTotal()-1; i>=0; i--)
     {
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
          if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
           {
            if (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp))
               Print("Максимальный и минимальный ордера на покупку успешно закрыты!");
            else
               Print("Не удалось закрыть максимальный и минимальный ордера на покупку!",GetLastError());
          } 
        }
     }
  }   
}
 
MakarFX #:

Ich habe Ihnen eine andere Funktion gegeben... Sie brauchen nichts hinzuzufügen.

oder Sie können es verschieben...

Nichts hat sich geändert

Grund der Beschwerde: