Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 133

 
Aliaksandr Kryvanos:

Ciao!

Qualcuno può suggerire un analogo della sostituzione di MaxLotCheck() da MT5 per MT4, grazie

Non c'è una funzione in sé. Devi scrivere il tuo. Con tutti i controlli dovrebbe stare in 10-20 righe.

 
Ihor Herasko:

Non c'è una funzione in sé. Devi scrivere il tuo. Con tutti i controlli, dovrebbe stare in 10-20 righe.

Ok, ma la formula stessa?

 
Aliaksandr Kryvanos:

Ok, ma questa è la formula stessa?

Guardiamo la fonte:

//+------------------------------------------------------------------+
//| Access functions OrderCalcMargin(...).                           |
//| INPUT:  name            - symbol name,                           |
//|         trade_operation - trade operation,                       |
//|         price           - price of the opening position,         |
//|         percent         - percent of available margin [1-100%].   |
//+------------------------------------------------------------------+
double CAccountInfo::MaxLotCheck(const string symbol,const ENUM_ORDER_TYPE trade_operation,
                                 const double price,const double percent) const
  {
   double margin=0.0;
//--- checks
   if(symbol=="" || price<=0.0 || percent<1 || percent>100)
     {
      Print("CAccountInfo::MaxLotCheck invalid parameters");
      return(0.0);
     }
//--- calculate margin requirements for 1 lot
   if(!OrderCalcMargin(trade_operation,symbol,1.0,price,margin) || margin<0.0)
     {
      Print("CAccountInfo::MaxLotCheck margin calculation failed");
      return(0.0);
     }
//---
   if(margin==0.0) // for pending orders
      return(SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX));
//--- calculate maximum volume
   double volume=NormalizeDouble(FreeMargin()*percent/100.0/margin,2);
//--- normalize and check limits
   double stepvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP);
   if(stepvol>0.0)
      volume=stepvol*MathFloor(volume/stepvol);
//---
   double minvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
   if(volume<minvol)
      volume=0.0;
//---
   double maxvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX);
   if(volume>maxvol)
      volume=maxvol;
//--- return volume
   return(volume);
  }
ENUM_ORDER_TYPE e OrderCalcMargin devono essere sostituiti qui.
 
Yum) la fonte... grazie
 

Ancora non è chiaro....

margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED)

и

double margin;

OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),margin);


restituire diversi numeri di margine per aprire 1 lotto

 
Aliaksandr Kryvanos:

Ancora non è chiaro....

margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED)

и

double margin;

OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),margin);


restituire diversi numeri di margine per l'apertura di 1 lotto

È ovvio che state confrontando su terminali diversi )) Sopra è MT4, sotto è MT5. Quindi i server sono diversi, le condizioni di trading sono diverse. La cosa più semplice è una leva diversa.

Che cosa avete effettivamente ottenuto, quali sono stati i valori?

 

Sì, è vero, la leva è diversa, su uno 1/300, sull'altro 1/2000

grazie

 

Ciao a tutti!

Il mio EA usa una ricerca multi-step per un punto di entrata, per questo prima controlla la storia per i segnali dall'inizio, poi lavora in tempo reale. Così nel tester delle strategie, tutto funziona bene con la cronologia, ma quando lo eseguo in tempo reale, non scansiona correttamente la cronologia e perde i segnali, quale potrebbe essere il problema?

Forse c'è una risposta ovvia, perché il frammento di codice è piuttosto grande da postare qui, quindi non sto ancora dando il codice.

 
ArturR:

Ciao a tutti!

Il mio EA usa una ricerca multi-step per un punto di entrata, per questo prima controlla la storia per i segnali dall'inizio, poi lavora in tempo reale. Così nel tester di strategia, tutto funziona bene con la cronologia, ma quando lo eseguo in tempo reale, non scansiona correttamente la cronologia e perde i segnali, quale potrebbe essere il problema?

Forse c'è una risposta ovvia, perché il frammento di codice è piuttosto grande da postare qui, quindi non sto ancora dando il codice.

Fate il debugging pezzo per pezzo. Separare la scansione della storia nello script. Emettere informazioni dettagliate con Alert(): prima il numero di barre nella storia, la data di inizio e di fine, ... e poi il processo di scansione. Potrebbe essere più conveniente scrivere tutto in un file
 
STARIJ:
Fate il debugging passo dopo passo. Separare la scansione della storia in uno script. Emettere con Alert() le informazioni dettagliate: prima di tutto, il numero di barre nella storia, la data di inizio e di fine, ... e poi il processo di scansione. Può essere più conveniente scrivere tutto in un file

Grazie per il suggerimento, leggerò come farlo.

Ho un'altra domanda, quando eseguo il debug in tempo reale, Metatrader4 lo esegue sempre su CHF, qualcuno sa cosa regolare per farlo funzionare sulla coppia di cui ho bisogno?

Erano i valori dell'indicatore per altri timeframes che apparentemente non sono considerati nel tester. Ho anche trovato il modo di fare la coppia giusta. Grazie per la tua partecipazione )
Motivazione: