[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 242

 
MaxZ:

Salve.

Domanda: OrderSend() può restituire un valore di "0", o meno di "-1" dopo l'esecuzione? Qualcuno ha incontrato qualcosa di simile? O le informazioni fornite nella "documentazione" sono corrette:

P.S.: lavorando come un telepate, cercando un errore nel codice di qualcun altro...

Hai!

Perché no? Se un ordine non viene aperto a causa di un requote, per esempio.

Per questo c'è un ciclo per l'apertura reale degli ordini, per esempio, come questo - il numero di tentativi di apertura con gestione degli errori:

int NumberOfTry = 25;
//+------------------------------------------------------------------+
//| Установка ордера                                                 |
//+------------------------------------------------------------------+

void WmOrderSend(string symbol, int cmd, double volume, double price, double stoploss, double takeprofit, string comment, int magic, datetime expiration = 0)
{
   color clr;
   datetime opentime;
   int ticket;
   int error;
  
   comment = WindowExpertName() + " " + GetNameTF(Period()) + " " + comment;
   int msl = MarketInfo(symbol, MODE_STOPLEVEL);
   clr = CLR_NONE;
   if (cmd == OP_BUY)  clr = ColorBuy;
   else if (cmd == OP_SELL)  clr = ColorSell;   
   if ((expiration > 0) && (expiration < TimeCurrent()))   expiration = 0;
  
   for (int try = 1; try <= NumberOfTry; try++)
   {
      if (!IsTesting() && (!IsExpertEnabled() || IsStopped()))      break;   
      while (!IsTradeAllowed())      Sleep(5000);
    
      RefreshRates();
      opentime = TimeCurrent();
      ticket = OrderSend(symbol, cmd, volume, price, SlipPips, stoploss, takeprofit, comment, magic, expiration, clr);
      if (ticket > 0)
         if (UseSound)      {PlaySound("ok.wav"); break;}      
      else
      {
         error = GetLastError();
         if (error == ERR_TRADE_TIMEOUT)
         {
            Sleep(1000*66);
            if (ExistOrders(symbol, cmd, magic, opentime))
            {
               if (UseSound) {PlaySound("ok.wav"); break;}
            }
         }
        
         Print("Error(", error, ") set order: ", ErrorDescription(error), ", try ", try);
         continue;
      }
      
      Print("Error(", error, ") set order: ", ErrorDescription(error), ", try ", try);
      Print("Ask=", Ask, "  Bid=", Bid, "  symbol=", symbol, "  volume=", volume, "  cmd=", GetNameOP(cmd), "  price=", price, "  stoploss=", stoploss, "  takeprofit=", stoploss, "  magic=", magic);
      if ((error == ERR_COMMON_ERROR) || (error == ERR_ACCOUNT_DISABLED) || (error == ERR_INVALID_ACCOUNT) || (error == ERR_TRADE_DISABLED))
        {
         IsExpertFailed = true;
         break;
        }      
      if ((error == ERR_SERVER_BUSY) || (ERR_INVALID_TRADE_VOLUME) || (error == ERR_MARKET_CLOSED))
        {
         Sleep(1000*300); 
         break;
        }      
      if ((error == ERR_TOO_FREQUENT_REQUESTS) || (error == ERR_TOO_MANY_REQUESTS))    Sleep(1000*100);      
      if ((error == ERR_ORDER_LOCKED) || (error == ERR_LONG_POSITIONS_ONLY_ALLOWED) || (error == ERR_TRADE_TOO_MANY_ORDERS))      break;      
      if (error == ERR_TRADE_CONTEXT_BUSY) while (IsTradeContextBusy()) Sleep(1000*11);
      
      if (error == ERR_TRADE_EXPIRATION_DENIED )  {expiration = 0; continue;}      
      if ((error != ERR_PRICE_CHANGED) && (error != ERR_REQUOTE))  Sleep(1000*7.7);
   }      
}
 
Roman.:

Hai!

Beh, perché no? Se, per esempio, un ordine non è aperto su un requote...

Ciao Roman.

Perché di solito la funzione OrderSend() restituisce "-1" in caso di errore... Non "0" e certamente non meno di "-1". Ma comunque, forse qualcuno aveva dei precedenti?

 
MaxZ:

Ciao Roman.

Perché di solito OrderSend() restituisce "-1" in caso di errore... Non "0" e certamente non meno di "-1". Ma comunque, forse qualcuno aveva dei precedenti?

A proposito, è un argomento interessante quello degli errori. Ho imparato che se viene restituito 0 (zero), non c'è errore e l'ordine viene accettato dal broker. Se non viene accettato, allora viene restituito un errore, ma che è maggiore di zero. Nella descrizione dell'operatore OrderSend() c'è un record "...o -1 in caso di fallimento". Ma che tipo di errore dovrebbe esserci perché il broker restituisca -1? Qualcuno lo sa?
 
MaxZ:

Ciao Roman.

Perché di solito OrderSend() restituisce "-1" in caso di errore... Non "0" e certamente non meno di "-1". Ma comunque, forse qualcuno aveva dei precedenti?


Si dovrebbe commerciare in una cucina CONCRETA se la Ordersend() restituisce "0", tanto meno < -1. :-)
 
paladin80:
A proposito, argomento interessante sugli errori. Ho imparato che se viene restituito 0 (zero), non c'è errore e l'ordine viene accettato dal broker. Se non viene accettato, allora viene restituito un errore, ma che è maggiore di zero.
La funzione GetLastError() restituisce 0? O stai scrivendo sulla funzione OrderSend()?


paladino80:
Nella descrizione dell'operatore OrderSend() c'è una nota "...o -1 in caso di fallimento". Ma che tipo di errore dovrebbe esserci perché il broker restituisca -1? Qualcuno lo sa?

OrderSend() restituisce "-1". E il tipo di errore dovrebbe essere controllato con la funzione GetLastError()! Non confondere le due cose... C'è un codice di errore "1" che significa "Nessun errore, ma risultato sconosciuto"... Non ho incontrato un errore con il codice "-1" e non credo che ce ne sia uno! :D

 
MaxZ:
La funzione GetLastError() restituisce 0? O stai scrivendo sulla funzione OrderSend()?


OrderSend() restituisce "-1". E il tipo di errore dovrebbe essere controllato con GetLastError()!!! Non confondere le due cose... C'è un codice di errore "1", che significa "Nessun errore, ma risultato sconosciuto"... Non ho incontrato un errore con il codice "-1" e non credo che ce ne sia uno! :D


Forse potrei davvero essermi sbagliato. Ancora una volta ho letto attentamente di OrderSend e degli errori. Probabilmente, il punto è che se il broker ha accettato l'ordine, restituisce il numero del biglietto e GetLastError di questa operazione mostrerà 0. Se non l'ha fatto, mostrerà -1 e GetLasError mostrerà il numero di errore maggiore di zero.
 

Buon pomeriggio. Potete per favore dirmi dove posso ottenere period_converter con una funzione che mi permetta di impostare il punto di riferimento. Per esempio, ho bisogno di fare un grafico D2 di D1, quando inizio YYY.MMM.DDD HH.MM e da questa data inizia a convertire le candele.

Ho trovato qualcosa di simile (anche su questo forum), ma per qualche motivo non vuole iniziare a convertire da numeri pari (inizia con dispari e tutti) può dirmi cosa cambiare nel codice o cambiarlo da soli. Te ne sarei molto grato. Ecco cosa ho trovato.

File:
 
Buongiorno, posso cambiare il timeframe dell'indicatore? Si può cambiare l'orizzonte temporale sulla piattaforma nella finestra?
 

Cari tutti

Sono nuovo del forex e sono nuovo del forex, vorrei chiedere qualche consiglio ai guru locali.

Sto lavorando con il terminale MT4.

Quando si lavora con un grafico per una coppia di valute è conveniente cambiare la scala: "М1", "М5", .....

Così, su M1 mostra la storia delle ultime 38 ore come circa 2000 candele, mentre su M5 è 270 ore ma anche circa 2000 candele.

Nel primo caso il timeframe per una candela sarà di 60s, e nel secondo caso sarà di 470s. Possiamo tirare la storia per 270 ore (o più) con candele da 60 secondi?

Grazie in anticipo

 
paladin80:
Forse devo essermi sbagliato. Ancora una volta ho letto attentamente di OrderSend e degli errori. Forse, il fatto è che se il broker ha accettato l'ordine, restituisce il numero del biglietto e GetLastError di questa operazione mostrerà 0. Se non ha accettato, mostrerà -1 e GetLasError mostrerà il numero di errore maggiore di zero.

Ora hai capito bene... Perché sono un po' confuso dalla tua risposta! :)))


Ma la mia domanda è ancora valida. OrderSend() può restituire "0" o un valore inferiore a "-1"?


Ho chiesto di inviare un file di log... Ma non me lo mandano. Avrei capito quale fosse il problema molto tempo fa. Nel frattempo ho continuato a telepatizzare! ;))) Ma cosa succede se la funzione OrderSend() è strana? :DD