Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1625

 
Valeriy Yastremskiy #:
In primo luogo, la differenza è di 1000 prima del ciclo. Nel ciclo, se il prezzo di apertura meno il prezzo corrente è modulo inferiore alla differenza, allora la differenza è uguale al valore ottenuto e il biglietto viene memorizzato in una variabile.

Stavo pensando la stessa cosa) Ma qualcosa è andato storto. Potete darmi un esempio di come tracciare il prezzo di apertura dell'ordine più vicino al prezzo corrente online. O forse solo confrontarli, e cercare il prezzo più basso)

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 #:

Stavo pensando la stessa cosa) Ma qualcosa è andato storto. Potete darmi un esempio di come tracciare il prezzo di apertura dell'ordine più vicino al prezzo corrente online. O forse semplicemente confrontarli e cercare il prezzo più basso)

Date un'occhiata a questo:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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 #:

correggere anche questo.

MakarFX #:

Non c'è bisogno di moltiplicare MODE_SPREAD - Spread in pip

potete controllare.

e fare in modo che

Buon giorno Makar!

Se vuoi capire la logica di chiusura degli ordini min e max, hai due parti di codice. In parole, suona così: "Se il drawdown di una griglia di ordini supera un certo livello, chiudiamo gli ordini min e max nella griglia, con un profitto non inferiore al livello specificato" .

Poi "Se il drawdown è sceso sotto il livello stabilito, si ritorna al principio della media degli ordini, tutti gli ordini con un profitto per tutti gli ordini con una perdita".

Poi "Se il drawdown non è sceso sotto il livello impostato, chiudiamo di nuovo i prossimi ordini min e max quando il profitto è raggiunto".

Ora l'Expert Advisor capisce che se il drawdown viene superato, gli ordini min e max vengono presi - l'EA chiude la prima coppia come dovrebbe, ma chiude tutte le altre coppie allo stesso prezzo senza prestare attenzione al calcolo del profitto.

Per quanto hocapito, dovrei guardare attraverso la funzione OrderClose() per fermarla in tempo. Grazie in anticipo per l'aiuto!!!!

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


 
Buon pomeriggio, scusate la domanda primitiva, ma dove posso trovare i dati di contatto dell'inquilino dell'EA? O come posso contattare la persona che ha comprato/affittato l'EA?
 
Oleksandr Nozemtsev #:
Salve, scusate la domanda primitiva, ma dove posso trovare i dati di contatto dell'inquilino dell'EA? O come posso contattare la persona che ha comprato/noleggiato un EA?

Non si può. Si può avere un dialogo nella scheda Discussione del prodotto. Puoi postare notizie nella scheda corrispondente.

 
Vladimir Karputov #:

Non si può. Si può avere un dialogo nella scheda Discussione del prodotto. Puoi postare notizie nella scheda appropriata.

Grazie!

 
Buon pomeriggio.
Puoi dirmi dove pulire le citazioni in mt 5?
Ed è possibile non cancellarli tutti, ma solo quelli antichi?
 
Roman Kutemov #:
Buon pomeriggio.
Puoi dirmi dove pulire le citazioni in mt 5?
Ed è possibile non cancellarli tutti, ma solo quelli antichi?
C:\MetaTrader5\bases\MetaQuotes-Server\history
 
EVGENII SHELIPOV #:

Buon giorno Makar!!!

Ti ho dato un'altra funzione... non c'è bisogno di aggiungere nulla

//+----------------------------------------------------------------------------+
//| Закрытие минимального и максимального ордеров                              |
//+----------------------------------------------------------------------------+
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());
       } 
     }
  }
}

O puoi spostarlo...

//+----------------------------------------------------------------------------+
//| Закрытие минимального и максимального ордеров                              |
//+----------------------------------------------------------------------------+
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 #:

Ti ho dato un'altra funzione... non c'è bisogno di aggiungere nulla

o si può spostare...

Nulla è cambiato

Motivazione: