Discussione sull’articolo "Limitazioni e Verifiche sugli Expert Advisors" - pagina 2

 

Grazie.

 
double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT);

'SYMBOL_VOLUME_LIMIT' - identificatore non dichiarato.............

'SymbolInfoDouble' - nessuno dei sovraccarichi può essere applicato alla chiamata di funzione.............

Sono solo io?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
gumgum:

'SYMBOL_VOLUME_LIMIT' - identificatore non dichiarato.............

'SymbolInfoDouble' - nessuno dei sovraccarichi può essere applicato alla chiamata di funzione.............

Sono solo io?

Non appena verrà rilasciata una nuova versione, tutto diventerà normale. Stiamo aspettando la build.
 
Rosh:

Puoi farlo?

lot_max=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
 

Ancora una domanda sulla funzione SeriesInfoInteger().

Quando ho creato l'argomento"AccountInfo... Informazioni", ho appreso che ci sono funzioni che utilizzano i dati "memorizzati nella cache del software" e funzioni che hanno sempre "accesso diretto ai dati reali".

A quale categoria di funzioni appartiene la funzione SeriesInfoInteger()?

 

Il codice seguente viene utilizzato nella funzione CheckVolumeValue :

int ratio=(int)MathRound(volume/volume_step);

if(MathAbs(ratio*volume_step-volume)>0.0000001)

{

description=StringFormat("Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f",

volume_step,ratio*volume_step);

return(false);

}

Ma è più corretto:

int ratio = (int)MathRound((volume-min_volume)/volume_step);

if (MathAbs(ratio*volume_step+min_volume-volume)>0.0000001)

{

description=StringFormat("Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f",

  volume_step,ratio*volume_step+min_volume);

return(false);

}

Perché il passo minimo di variazione del volume deve essere contato dal valore minimo.

 

E forse il frammento di codice

//--- вычислим значение маржи

bool check=OrderCalcMargin(type,Symbol(),lots,last_tick.ask,margin);

dovrebbe essere sostituito con:

//--- вычислим значение маржи

double price = (type == ORDER_TYPE_BUY || type == ORDER_TYPE_BUY_LIMIT || type == ORDER_TYPE_BUY_STOP || type == ORDER_TYPE_BUY_STOP_LIMIT) ? last_tick.ask : last_tick.bid;

bool check=OrderCalcMargin(type,Symbol(),lots,price,margin);

[Eliminato]  
I file di codice sorgente allegati e gli inserti di codice sorgente nel codice HTML sono ora completamente tradotti in portoghese per comodità.
MQL5.community - User Memo
MQL5.community - User Memo
  • 2010.02.25
  • MetaQuotes Software Corp.
  • www.mql5.com
You have just registered and most likely you have questions such as, "How do I insert a picture to my a message?" "How do I format my MQL5 source code?" "Where are my personal messages kept?" You may have many other questions. In this article, we have prepared some hands-on tips that will help you get accustomed in MQL5.community and take full advantage of its available features.
 
Rashid Umarov:

A causa delle modifiche apportate in MQL5, ora il volume complessivo massimo consentito per un simbolo può essere ottenuto come segue:

Non utilizzate la vecchia variante! Era così:

L'articolo è stato corretto e il nuovo codice dell'esperto Check_Order_And_Volume_Limits.mq5 è stato allegato.

Caro Admin

Ho provato a utilizzare questa funzione ma restituisce 0 in tutti i casi.

La mia build MT5 è 2280

 
double orders_volume_on_symbol=PendingsVolume(symbol);


dà errore, nessuna funzione di questo tipo

E dopo aver modificato la funzione per non includere gli ordini pendenti, dà 0


double NewOrderAllowedVolume(string symbol)
  {
   double allowed_volume=0;
//--- ottenere la limitazione del volume massimo di un ordine
   double symbol_max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
//--- ottenere la limitazione del volume da un simbolo
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT);

//--- ottenere il volume della posizione aperta di un simbolo
   double opened_volume=PositionVolume(symbol);
   if(opened_volume>=0)
     {
      //--- se abbiamo già utilizzato il volume disponibile
      if(max_volume-opened_volume<=0)
         return(0);

      //--- il volume della posizione aperta non supera max_volume
      //doppio orders_volume_on_symbol=PendingsVolume(simbolo);
      //volume_ammesso=volume_massimo-aperto-volume_ordini_su_simbolo;
      allowed_volume=max_volume-opened_volume;
      if(allowed_volume>symbol_max_volume) allowed_volume=symbol_max_volume;
     }
   return(allowed_volume);
  }

Il motivo è che max_volume è 0 e open_volume è 0;

Perché il volume massimo è 0 se non ci sono posizioni aperte?

Versione 2715

Documentation on MQL5: Constants, Enumerations and Structures / Named Constants / Predefined Macro Substitutions
Documentation on MQL5: Constants, Enumerations and Structures / Named Constants / Predefined Macro Substitutions
  • www.mql5.com
Predefined Macro Substitutions - Named Constants - Constants, Enumerations and Structures - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5