Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 964

 
vladzeit:

Grazie per l'esempio.

Potresti per favore chiarire... se ho capito bene.

Con questo=(datetime)OrderGetInteger. stiamo dicendo a OrderGetInteger di prendere il tipodatetimeesplicito.?

Questa regola si applica a tutte le funzioni che non hanno un tipo esplicito o non corrispondono al tipo della variabile assegnata? O è solo un caso speciale?

Voglio capire se questa è una regola o solo bisogno di essere ricordato come un caso speciale.

Non è un caso speciale. Se scrivete un valore di un tipo diverso in una variabile di un tipo, il compilatore vi avvertirà di questo. E sta a voi decidere da quale variabile prendere i dati.

Nel vostro caso - quando si restituisce un valore di data-tempo esplicito da una funzione con il tipo long, naturalmente, è sicuro e si dovrebbe specificare esplicitamente il tipo di valore che si ottiene dalla funzione.

Ma se prendete un valore doppio in int-variabile, allora sta a voi capire se i dati non saranno persi da tale assegnazione. Se sapete per certo che il valore di ritorno entrerà in int, allora specificate int esplicitamente, se non lo sapete, allora prendetelo come una variabile doppia.

 
Artyom Trishkin:

Questo non è un caso speciale. Se scrivete un valore di un altro tipo in una variabile di un tipo, il compilatore vi avvertirà di questo. E sta a voi decidere da quale variabile prendere i dati.

Nel vostro caso - quando si restituisce un valore di data-tempo esplicito da una funzione con il tipo long, naturalmente è sicuro e si dovrebbe specificare esplicitamente il tipo del valore che si ottiene dalla funzione.

Ma se prendete un valore doppio in int-variabile, allora dovete capire che nessun dato sarà perso durante tale assegnazione. Se sapete per certo che il valore restituito entrerà in int, specificate int esplicitamente, se non lo sapete, prendetelo in una variabile doppia.

Grazie per la risposta dettagliata. Capito.

 

(Buon pomeriggio a tutti voi))


Ho padroneggiato MT4, ma MT5 .... non lo capisco(((( Non ci sono molti esempi, e quelli che ci sono non spiegano ciò di cui ho bisogno.

Per favore consigliatemi come usare MT5 con alcuni esempi di codice MT4 o datemi qualche link agli indicatori con casi simili.


1.

if(Period()<=PERIOD_H4 && TimeHour(Time[h])==0 && TimeMinute(Time[h])==0)


2.

while(A<1)
  {
   ObjectDelete("MB");
   OP=iOpen(NULL,Timeframe,br);
   CL=iClose(NULL,Timeframe,br);
 if(OP>CL)
   bear=(OP-CL)/_Point;
 if(SizeCandles*FactorCandleы <= bear)
   A=2;
 if(br>iBars(NULL,Timeframe))
  {
   Lab("MB", " No Bear candle", 4, 510, 1, clrWhite);
   break;
  }
   br++;
  }


3. Non capisco come fare il confronto degli elementi con la maniglia iMa... Conosco le strutture!!! Ho provato, ma MT5 non è così chiaro a differenza di MT4...

   
 for(int i=limit; i>0 && !IsStopped(); i--)
   {
   ma1=iMA(NULL,Period(),Ma1,0,MAMethod1,MAPrice1,i);
   ma2=iMA(NULL,Period(),Ma2,0,MAMethod2,MAPrice2,i);
   ma3=iMA(NULL,Period(),Ma3,0,MAMethod3,MAPrice3,i);
   ma4=iMA(NULL,Period(),Ma4,0,MAMethod4,MAPrice4,i);
   MA=iMA(NULL,Period(),MAPeriod,0,MAMethod,MAPrice,i);
//----
 if(filtercase==true && xPer==Period())
  {
//--- High signal
 if(Open[i]<Close[i] && MA>Open[i] && MA<Close[i] && ma1>ma2 && ma1<ma3 && MA<ma4)  
   ExtLineBuffer1[i]=High[i]+shiftmap*_Point;
 if(ShowPeriod==false && xPeriod==Period())
   ExtLineBuffer1[i]=0.0;
//--- Low signal
 if(Open[i]>Close[i] && MA<Open[i] && MA>Close[i] && ma1<ma2 && ma1>ma3 && MA>ma4)  
   ExtLineBuffer2[i]=Low[i]-shiftmap*_Point;
 if(ShowPeriod==false && xPeriod==Period())
   ExtLineBuffer2[i]=0.0;
  } 
 

Le differenze generali della programmazione in MT5 sono già comprese! Ma non so ancora programmare (i dadi non si sommano)))))

È importante per me ASCOLTARE nella mia testa queste parti e moduli di MT5.... Capisco rapidamente la logica in MT4, ma MT5 solo "dadi"....

Grazie per i consigli)))

 
Per favore, cambiate il lotto fisso del mio robot in lotto %. Il codice è nel mio messaggio privato.
 
Sprut112:
Per favore, cambiate il lotto fisso del mio robot in lotto %. Codice in privato.

Freelance.

 
kopeyka2:

(Buon pomeriggio a tutti voi))


Ho padroneggiato MT4, ma MT5 .... non lo capisco(((( Non ci sono molti esempi, e quelli che ci sono non spiegano ciò di cui ho bisogno.

Per favore consigliatemi come usare MT5 con alcuni esempi di codice MT4 o datemi qualche link agli indicatori con casi simili.


1.


2.


3. Non capisco come fare il confronto degli elementi con la maniglia iMa... Conosco le strutture!!! Ho provato, ma MT5 non è così chiaro a differenza di MT4...

Le differenze generali della programmazione in MT5 sono già comprese! Ma non so ancora programmare (i dadi non si sommano)))))

È importante per me ASCOLTARE nella mia testa queste parti e moduli di MT5.... Capisco rapidamente la logica in MT4, ma MT5 solo "dadi"....

Grazie per i consigli)))

Per prima cosa, leggete attentamente la documentazione. La sezione"Accesso a serie temporali e indicatori".

Dovrebbe essere chiaro come ottenere l'ora, "metterla" nella struttura, e poi ottenere ora e minuti separatamente.

C'è anche CopyBuffer per ottenere i valori dell'indicatore tramite il suo handle.

Se avete ancora domande...


 
kopeyka2:

(Buon pomeriggio a tutti voi))


Ho padroneggiato MT4, ma MT5 .... non lo capisco(((( Non ci sono molti esempi, e quelli che ci sono non spiegano ciò di cui ho bisogno.

Per favore consigliatemi come usare MT5 con alcuni esempi di codice MT4 o datemi qualche link agli indicatori con casi simili.


1.


2.


3. Non capisco come fare il confronto degli elementi con la maniglia iMa... Conosco le strutture!!! Ho provato, ma MT5 non è così chiaro a differenza di MT4...

Le differenze generali della programmazione in MT5 sono già comprese! Ma non so ancora programmare (i dadi non si sommano)))))

È importante per me ASCOLTARE nella mia testa queste parti e moduli di MT5.... In MT4 capisco rapidamente la logica, ma MT5 solo "cubi" ....

Grazie per i consigli)))

Se hai bisogno di confrontare diverse serie temporali di un timeframe, lavora con un array comeMqlRates-> e usaCopyRates per riempire questo array.

È conveniente memorizzare il tempo in una strutturaMqlDateTime-> usaTimeToStruct per convertire il tempo dadatetime a strutturaMqlDateTime.

Ora il vostro esempio 1 sarà così:

//+------------------------------------------------------------------+
//|                                                      Test_en.mq5 |
//+------------------------------------------------------------------+
#property script_show_inputs
//--- input parameters
int InpBarTime=3; // Bar where we compare the time
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   MqlRates rates[];
   ArraySetAsSeries(rates,true);

   int start_pos  =0;                           // start position 
   int count=(InpBarTime<10)?10:InpBarTime+1;   // data count to copy 

   int result=CopyRates(Symbol(),Period(),start_pos,count,rates);
   if(result!=count)
     {
      Print("Ordered: ",IntegerToString(count),", received ",IntegerToString(result));
     }

//--- example 1
// if(Period()<=PERIOD_H4 && TimeHour(Time[h])==0 && TimeMinute(Time[h])==0)
   MqlDateTime SDateTime;
   TimeToStruct(rates[InpBarTime].time,SDateTime); // Converts a value of datetime type into a structure variable MqlDateTime
   if(Period()<=PERIOD_H4 && SDateTime.hour==0 && SDateTime.min==0)
     {

     }
  }
//+------------------------------------------------------------------+
File:
Test_en.mq5  3 kb
 
Per favore, ditemi se c'è una regola.
In mql5 uno stesso compito può essere risolto in molti modi.
Se mi riferisco a un'istanza di una classe in un codice, per esempio: CSymbolInfo. m_symbol.Ask()... e così via.
e nello stesso codice assegno un valore Ask senza riferimento alla classe.
double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);

Domanda: questo causa errori o è normale nei limiti di un codice o anche di una funzione?

 
kopeyka2:

(Buon pomeriggio a tutti voi))


Ho padroneggiato MT4, ma MT5 .... non lo capisco(((( Non ci sono molti esempi, e quelli che ci sono non spiegano ciò di cui ho bisogno.

Per favore consigliatemi come usare MT5 con alcuni esempi di codice MT4 o datemi qualche link agli indicatori con casi simili.


1.


2.


3. Non capisco come fare il confronto degli elementi con la maniglia iMa... Conosco le strutture!!! Ho provato, ma MT5 non è così chiaro a differenza di MT4...

Le differenze generali della programmazione in MT5 sono già comprese! Ma non so ancora programmare (i dadi non si sommano)))))

È importante per me ASCOLTARE nella mia testa queste parti e moduli di MT5.... In MT4 capisco rapidamente la logica, ma MT5 solo "cubi" ....

Grazie per i consigli)))

Lavorare con gli indicatori - usando il codiceMA Force come esempio

Passo 1: a livello di programma globale dichiarare la variabile handle_iMA, che memorizzerà l'indicatore handle

int    handle_iMA;                           // variable for storing the handle of the iMA indicator

Passo 2: creare un indicatore in OnInit() e restituire la variabilehandle_iMA

//--- create handle of the indicator iMA
   handle_iMA=iMA(m_symbol.Name(),Inp_MA_period,Inp_MA_ma_period,Inp_MA_ma_shift,
                  Inp_MA_ma_method,Inp_MA_applied_price);
//--- if the handle is not created 
   if(handle_iMA==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code 
      PrintFormat("Failed to create handle of the iMA indicator for the symbol %s/%s, error code %d",
                  m_symbol.Name(),
                  EnumToString(Inp_MA_period),
                  GetLastError());
      //--- the indicator is stopped early 
      return(INIT_FAILED);
     }

Passo 3: fare una richiesta in OnTick() - copiare una certa quantità di dati(conteggio) dall'indicatore nell'arrayma[]

   double ma[],force[];
   ArraySetAsSeries(ma,true);
   ArraySetAsSeries(force,true);
   int start_pos=0,count=InpTrendBars+3;
   if(!iGetArray(handle_iMA,0,start_pos,count,ma) || 
      !iGetArray(handle_iForce,0,start_pos,count,force))
     {
      PrevBars=0;
      return;
     }

Passo 4: lavorare con l'array di dati dell'indicatore e confrontare i suoi elementi:

   bool trend_up=(ma[1]>ma[2]);
   bool trend_down=(ma[1]<ma[2]);
 
vladzeit:
Per favore, ditemi se c'è una regola.
In mql5 uno stesso compito può essere risolto in molti modi.
Se mi riferisco a un'istanza di una classe in un codice, per esempio: CSymbolInfo. m_symbol.Ask()... e così via.
e nello stesso codice assegno un valore Ask senza riferimento alla classe.
double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);

Domanda: questo causa errori o è normale nei limiti di un codice o anche di una funzione?

È meglio non essere confusi e usare un solo approccio: o la classe commercialeCSymbolInfo o funzioni di sistema come SymbolInfoXXXX.