Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 85

 

Un paio di altre domande sono venute fuori lungo la strada:

1. c'è una stringa:

datetime ProvTimeX1=ObjectGetInteger(0, "Y="+IntegerToString(y,0,''),OBJPROP_TIME);

Il compilatore lo disapprova, scrivendo"possibile perdita di dati a causa della conversione dei tipi". Cosa c'è di sbagliato qui?

2. Come fa mql5 a mettere i dati negli array e a distribuirli, in quale direzione?

 
WindSW:

Un paio di altre domande sono venute fuori lungo la strada:

1. c'è una stringa:

datetime ProvTimeX1=ObjectGetInteger(0, "Y="+IntegerToString(y,0,''),OBJPROP_TIME);

Il compilatore lo disapprova, scrivendo"possibile perdita di dati a causa della conversione dei tipi". Cosa c'è di sbagliato qui?

Bene, è giusto, state cercando di scrivere nella variabile datetime un valore lungo restituito da ObjectGetInteger. Fare la conversione del tipo.

datetime ProvTimeX1=(datetime)ObjectGetInteger(0,"Y="+IntegerToString(y,0,' '),OBJPROP_TIME);
2. Come vengono messi i dati in mql5 negli array e allocati, in quale direzione?

La direzione è sempre la stessa - dall'inizio (l'indice è zero) alla fine, ma se non viene specificata l'indicizzazione con la funzione ArraySetAsSeries. Se la domanda riguarda l'indicizzazione.

 

Buon pomeriggio, non riesco a dividere i numeri, il risultato è 0,0

Perché?

   double res =  8000/16000 * 100;
   Print(res);
 
ryzhak.vladimir:

Buon pomeriggio, non riesco a dividere i numeri, il risultato è 0,0

Perché?



   double res=((double)8000/16000)*100;
   Print(res);
Documentazione >>> Conversione dei tipi
 

È stupido, naturalmente, che si debba aggiungere qualcosa per cambiare qualcosa, una calcolatrice senza punti va bene e non ha bisogno di specificare che tipo di dati, ma va bene, il secondo modo è aggiungere ".0" alla fine dell'intero

quindi l'espressione corretta sarebbe come questa.

double res =8000.0/16000.0*100;
Print(res);
A proposito, in qualche linguaggio di programmazione ha visto una variabile in modo che il terminale seleziona il suo tipo, forse era solo per i dati numerici, ma ancora comodo, non è implementato qui, ho cercato di trovarlo nella documentazione - non poteva trovare?
 
Grazie a tutti)
 

Nella versione 4: datetime TimeX2=Time[0]+18000; - ha aumentato il valore del tempo di 5 candele in avanti

Ora in 5 quando si scrive:

datetime Topen[];
ArraySetAsSeries(Topen,true);
CopyTime(_Symbol,_Period,0,3,Topen);
datetime TimeX2=Topen[0]+18000;

Quando si esegue il debug dà errore di overflow dell'array e punta alla lineadatetime TimeX2=Topen[0]+18000;

Per favore, consigliate come ottenere lo stesso risultato nel 5 come nel 4?

Addendum: è scritto correttamente, ho solo fatto un errore - in OnInit l'array era vuoto.

 
WindSW:

Nella versione 4: datetime TimeX2=Time[0]+18000; - ha aumentato il valore del tempo di 5 candele in avanti

Ora in 5 quando si scrive:

Quando si esegue il debug dà errore di overflow dell'array e punta alla lineadatetime TimeX2=Topen[0]+18000;

Per favore, consigliate come ottenere lo stesso risultato nel 5 come nel 4?

datetime b=TimeTradeServer()+60*min; //min - кол-во минут от текущего времени
 

Ho riscontrato un problema con il disegno dei livelli.

void OnInit()
  {
   ObjectCreate(0,oPP,OBJ_TREND,0,0,0,0,0);
   ObjectSetInteger(0,oPP,OBJPROP_COLOR,clrDeepSkyBlue);
   ObjectSetInteger(0,oPP,OBJPROP_STYLE,STYLE_SOLID);
   ObjectSetInteger(0,oPP,OBJPROP_WIDTH,2);
   ObjectSetInteger(0,oPP,OBJPROP_RAY,false);
   ObjectCreate(0,oRes1,OBJ_TREND,0,0,0,0,0);
   ObjectSetInteger(0,oRes1,OBJPROP_COLOR,clrDeepSkyBlue);
   ObjectSetInteger(0,oRes1,OBJPROP_STYLE,STYLE_DASH);
   ObjectSetInteger(0,oRes1,OBJPROP_WIDTH,1);
   ObjectSetInteger(0,oRes1,OBJPROP_RAY,false);
   ObjectCreate(0,oSup1,OBJ_TREND,0,0,0,0,0);
   ObjectSetInteger(0,oSup1,OBJPROP_COLOR,clrDeepSkyBlue);
   ObjectSetInteger(0,oSup1,OBJPROP_STYLE,STYLE_DASH);
   ObjectSetInteger(0,oSup1,OBJPROP_WIDTH,1);
   ObjectSetInteger(0,oSup1,OBJPROP_RAY,false);
   PPlevel();
  }
//+------------------------------------------------+
//| Пивот поинт                                    |
//+------------------------------------------------+
void PPlevel()
   {
    double iH=iHigh(Symbol(),PERIOD_D1,1);
    double iL=iLow(Symbol(),PERIOD_D1,1);
    double iC=iClose(Symbol(),PERIOD_D1,1);
    double iO=iOpen(Symbol(),PERIOD_D1,1);
    int New_candle=0;
    New_candle=NBar(); // функция появления новой свечи
    if(New_candle==1)
      {
       double range=NormalizeDouble(iH-iL,_Digits);
       double PP=NormalizeDouble((iH+iL+iC)/3,_Digits);
       double R1=NormalizeDouble((2*PP)-iL,_Digits);
       double S1=NormalizeDouble((2*PP)-iH,_Digits);
       TimeStart=iTime(Symbol(),PERIOD_D1,0)-7200;
       TimeFinish=Topen[0]+64000;
       ObjectSetInteger(0,oPP,OBJPROP_TIME,TimeStart);                 // отрисовка PP
       ObjectSetDouble(0,oPP,OBJPROP_PRICE,PP);
       ObjectSetInteger(0,oPP,OBJPROP_TIME,1,TimeFinish);
       ObjectSetDouble(0,oPP,OBJPROP_PRICE,1,PP);
       ObjectSetInteger(0,oRes1,OBJPROP_TIME,TimeStart);               // отрисовка сопротивления
       ObjectSetDouble(0,oRes1,OBJPROP_PRICE,R1);
       ObjectSetInteger(0,oRes1,OBJPROP_TIME,1,TimeFinish);
       ObjectSetDouble(0,oRes1,OBJPROP_PRICE,1,R1);
       ObjectSetInteger(0,oSup1,OBJPROP_TIME,TimeStart);               // отрисовка поддержки
       ObjectSetDouble(0,oSup1,OBJPROP_PRICE,S1);
       ObjectSetInteger(0,oSup1,OBJPROP_TIME,1,TimeFinish);
       ObjectSetDouble(0,oSup1,OBJPROP_PRICE,1,S1);
      }
   }
Ho controllato con Print() e ho ottenuto i risultati del calcolo normale "Esempio: (GBPUSD,H1) 0.0152 i 1.5911 i 1.59682 i 2013.01.20 22:00:00 i 2013.01.22 09:46:40" ma non traccia questi livelli. Controllando nel terminale tramite"Object List", non ci sono. Si prega di consigliare qual è il problema? Dove mi sbaglio?
 
WindSW:

Ho problemi a disegnare i livelli.

Ho controllato con Print() e ho ottenuto i risultati del calcolo normale "Esempio: (GBPUSD,H1) 0.0152 i 1.5911 i 1.59682 i 2013.01.20 22:00:00 i 2013.01.22 09:46:40" ma non traccia questi livelli. Controllando nel terminale tramite"Object List", non ci sono. Si prega di consigliare qual è il problema? Dove mi sbaglio?
Stampa i risultati di ObjectCreate, forse c'è un errore.
Motivazione: