Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 432

 
WinProject:

Grazie!) , la variabile Cena=FileReadString(handle); inserisco nella funzione Separator=StringReplace(Sepa,",","."); scrive errore "conversione implicita da numero a stringa" -

non vuole leggere il valore con il separatore "," (1,22426) come una stringa, e StringReplace non funziona. O sto sbagliando?


oplek la parte di codice che avete, dall'inizio della lettura del file, specificando il tipo di variabile CENA

 
Vladislav Andruschenko:

Copiate la parte di codice che avete, dall'inizio della lettura del file, specificando il tipo di variabile CENA


void MyFunc()

{

handle=FileOpen('Data.csv',FILE_CSV|FILE_READ,';');

while(FileIsEnding(handle)!=true)

{ stringa cena=FileReadString(handle);

stringa Separ=StringReplace(cena,",".");

if(FileIsEnding(handle)==true)

pausa;

}

FileClose(handle);

}

 
WinProject:

void MyFunc()

{

handle=FileOpen('Data.csv',FILE_CSV|FILE_READ,';');

while(FileIsEnding(handle)!=true)

{ stringa cena=FileReadString(handle);

stringa Separ=StringReplace(cena,",".");

if(FileIsEnding(handle)==true)

pausa;

}

FileClose(handle);

}

Si prega di leggere cosa restituisce questa funzione. State cercando di mettere in fila il risultato. Ma questa funzione sostituisce semplicemente un carattere con una stringa. Puoi continuare a usare cena con delle modifiche
 
Vladislav Andruschenko:
Si prega di leggere cosa restituisce questa funzione. State cercando di mettere in fila il risultato. Ma questa funzione sostituisce semplicemente un carattere con un carattere. Si può continuare a usare cena già con le modifiche
Ho capito il mio errore, (stringa Separ=è ridondante qui) e ha funzionato.

Grazie, grazie!)

 

Aiuto, ho bisogno di disegnare un rettangolo dal massimo della candela precedente a un punto 200p sopra di esso e cronometrare una barra in avanti.

Ho scritto il codice, ma non capisco perché il punto sinistro del rettangolo non si muove? E la destra scivola dietro l'hai.

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   //ObjectDelete(0,"Name");
   ArraySetAsSeries(high,true);
   ObjectCreate(0,"Name",OBJ_RECTANGLE,0,TimeCurrent(),high[0],TimeCurrent()+PeriodSeconds(PERIOD_CURRENT)*2,high[0]+200*_Point);
   ObjectSetInteger(0,"Name",OBJPROP_FILL,true);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Roman Sharanov:

Aiuto, ho bisogno di disegnare un rettangolo dal massimo della candela precedente a un punto 200p sopra di esso e cronometrare una barra in avanti.

Ho scritto il codice, ma non capisco perché il punto sinistro del rettangolo non si muove? E la destra scivola dietro l'hai.


Forse state cercando di creare un oggetto che è già presente nel grafico?


E la barra precedente è 1, non 0.

high[0] - это ХАЙ текущего бара
 
Vladislav Andruschenko:

Forse stai cercando di creare un oggetto che è già presente nel grafico? Sarebbe meglio controllare se ci sono già oggetti nel grafico.


Sì e la barra precedente è 1 non 0.


Esatto, ho già sistemato gli indici.

Cambiato il nome, guardato la lista, niente è cambiato, ancora lo stesso, un punto si blocca in un posto, l'altro segue l'hai

 
Roman Sharanov Esatto, ho già sistemato gli indici.

Cambiato il nome, guardato la lista, niente è cambiato, è ancora lo stesso, un punto è appeso in un posto, l'altro segue l'hai

   ObjectDelete(0,"Name");
   ObjectCreate(0,"Name",OBJ_RECTANGLE,0,
                TimeCurrent()-_Period*60,high[1],
                TimeCurrent()+PeriodSeconds(PERIOD_CURRENT)*2,high[0]+200*_Point);
   ObjectSetInteger(0,"Name",OBJPROP_FILL,true);
   return(rates_total);

Si sta muovendo.


 
STARIJ:
È molto semplice. È necessario impostare 7 parametri per il calcolo di iMA. Il primo parametro, il nome del simbolo, è ovvio. Come secondo parametro, timeframe, impostare M1. Il terzo parametro - il periodo - imposta quante volte hai bisogno, quanti giorni sono più di un minuto. Il quarto parametro - shift = 0. I prossimi due parametri - il metodo di mediazione e il tipo di prezzo - li conoscete. L'ultimo è il numero di barra. Per favore, calcola il numero di barra se conosci il tempo che ti serve. Questo è tutto! Ricontrolla facendo i calcoli per i tempi M5 e M15. Forse anche per M30.

STARIJ, Grazie per l'aiuto, controllato, purtroppo la corrispondenza con l'originale è scarsa, e come il TF aumenta (ad esempio da 30 min a settimanale) la corrispondenza diminuisce notevolmente. Questo metodo è meglio di niente, ma non c'è molta precisione in esso. Ci sono altre varianti?

 
Boss11:

STARIJ, Grazie per l'aiuto, controllato, purtroppo la corrispondenza con l'originale è scarsa, e come il TF aumenta (ad esempio da 30 min a settimanale) la corrispondenza diminuisce notevolmente. Questo metodo è meglio di niente, ma non c'è molta precisione in esso. Ci sono altre varianti?

Sì. Dovremmo usare M1, e M5, ... - per controllare. Forse dovremmo usare l'interpolazione? MT5 ha una cronologia dei tick. Se mi fai sapere dov'è il profitto, darò un'altra occhiata.
Motivazione: