[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 607

 
rustein:
Sì, capisco, grazie.

Mettiamola così, non conosco altro modo.......)

E così...

double BullSumm()
{
  double MySummBull=0;
  for(int Cnt=0;Cnt<OrdersTotal();Cnt++)
  { 
    if(!OrderSelect(Cnt,SELECT_BY_POS,MODE_TRADES))continue; // если нет продолжим цикл
    if(OrderType()==OP_BUY)
    {
      MySummBull+=OrderOpenPrice()*OrderLots();
    }
  }
  if(MySummBull==0)return(380/*v*/);
  return(MySummBull);
}
 
griha:
vuole registrare le azioni EA in un file
Ho preso un esempio dal manuale dell'editor MQL, leggermente rifatto per le mie esigenze


Il risultato è che il file OrdersReport.csv è vuoto, anche se gli ordini sono aperti.


Mi sono imbattuto nello stesso problema, quando si apre un file per la lettura e si cerca di scriverci dentro, il file non viene creato, o non vi si scrive nulla.

Applicazione del servicedeck :

Quando si cerca di aggiungere a un file di testo deregistrato con la chiave FILE_READ|FILE_WRITE, senza prima impostare esplicitamente il puntatore al file con FileSeek(), la scrittura non avviene affatto.

Nelle versioni precedenti del terminale, quando si pre-legge un file di testo utilizzando la funzione FileReadString(), il puntatore del file viene impostato automaticamente.

Ecco la risposta degli sviluppatori:

L'ultimo cambiamento della funzionalità dei file risale alla metà del 2008.

Mai prima d'ora è stato possibile aggiungere un file senza prima impostare un puntatore di file alla fine.

Di nuovo una domanda sulle informazioni extra. Ha qualcosa a che fare con l'aggiunta alla fine di un file?

Qualsiasi operazione di lettura-scrittura di file sposta automaticamente il puntatore del file. Questo è sempre stato il caso e non è cambiato. Tuttavia, se il file è aperto come csv, il buffering dei dati intermedi è possibile. Allora il puntatore del file potrebbe non essere dove vi aspettate che sia. Di nuovo, questo è sempre stato il caso, sia nella versione precedente che nella pre-release, dall'inizio del rilascio ufficiale.

Abbiamo ribadito molte volte che il principio di default è estremamente dannoso. Incluso per i puntatori ai file. Gestite il puntatore al file in modo esplicito, a meno che non usiate la lettura o la scrittura continua (specialmente nei casi esotici di lettura-scrittura mista).

Conclusione: usare FileSeek

 
khorosh:
Controllare.
Grazie.
 
Roll:

Il tuo Expert Advisor fa trading sui segnali ADX a 30 minuti. Se il tuo Expert Advisor fa trading su segnali ADX 1min, tali segnali saranno più frequenti che nella prima variante. Lo screenshot nella tua variante è preso solo all'apertura della posizione BUY.
Ti interessa l'assenza di indicatori dal grafico nello screenshot (in modalità test). Ti è stato chiesto di verificare la presenza di indicatori nella schermata in modalità demo. È stato aggiunto lo script con la funzione corrispondente, in modo da poter controllare e capire la tua domanda rapidamente, invece di aspettare per ore. È passato più di un giorno. Voglio sapere: quali sono i vostri risultati?

Vi terrò informati, sono occupato ma cercherò di controllare domani.
 

Puoi dirmi qual è la differenza tra definire un nome in una funzione o assegnare il nome di una variabile e poi passare la variabile a una funzione?

//-------------- первый вариант (рабочий)

string up_line = "upline_", down_line = "downline_";
 
     flatlineup(up_line+TimeToStr(Time[i]), y2,x2,y22,x2,Red,1);     Имя присваиваю в теле функции
     flatlinedown(down_line+TimeToStr(Time[i]), y1,x1,y11,x1,Blue,1);
     dellline(up_line, down_line);

TimeToStr(Time[i]) указывал в имени тренд лайн в теле функции
//--------------- второй вариант (нерабочий)

string up_line = "upline_"+TimeToStr(Time[i]); //--или пробовал StringConcatenate()        ИМЯ ПРИСВАИВАЮ В ПЕРЕМЕННОЙ
string down_line = "downline_"+TimeToStr(Time[i]); //--или пробовал StringConcatenate()
 
     flatlineup(up_line, y2,x2,y22,x2,Red,1);                 ПЕРЕДАЮ ПЕРЕМЕННУЮ В ФУНКЦИЮ
     flatlinedown(down_line, y1,x1,y11,x1,Blue,1);
     dellline(up_line, down_line);
 
rustein:
Aiutami a sbarazzarmi dell'errore di divisione dello zero nell'EA.

Grazie in anticipo.

Puoi farlo in questo modo, per me funziona

doppio BullPrice()

{

doppio BullAveragePrice=0;

doubleSummBullLots=0;

per (int i = OrdiniTotali() - 1; i >= 0; i--)

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

se (OrderSymbol() != Symbol()) continua;

if (OrderSymbol() == Symbol() && OrderType() == OP_BUY)

{

BullAveragePrice+=OrderOpenPrice()*OrderLots();

MySummBullLots+=OrderLots();

}

}

se (MySummBullLots>0) BullAveragePrice = NormalizeDouble(BullAveragePrice / MySummBullLots, Digits);

return(BullAveragePrice);

}

 
Zhunko:

Nella cartella MT4 c'è un codice C++ di esempio per tutti i casi in MQL4. Compilate quel codice e incollateci il vostro codice. Troverete immediatamente la differenza tra il vostro e l'esempio.

Il mio MT non ne ha uno. C'è solo 1 libreria scritta in MQL (stdlib.mq4). Puoi fare un esempio qui?
 
Fox_RM:

Puoi dirmi qual è la differenza tra definire un nome in una funzione o assegnare il nome di una variabile e poi passare la variabile a una funzione?

Nel tuo esempio, l'unica differenza è nel passare i parametri alla funzione
dellline(...)
 
costy_:

Altrimenti...

Grazie!
 

Per favore consigliatemi la situazione è questa, leggo un file csv come questo

void ReadDate(){
   while(!IsStopped()){
      string dTime = FileReadString(ExtCsvHandle); // читаем строчку 1
      string sValue = FileReadString(ExtCsvHandle); // читаем строчку 2
      Print("Date=",StrToTime(dTime), "Value=",sValue);   
      
   }
}

ma il file csv ha un'intestazione, la prima linea extra

Time,Value
15.02.2012 00:00:00;Значение1
15.02.2012 00:01:07;Значение2
15.02.2012 00:02:26;Значение3
15.02.2012 00:00:00;Значение1
15.02.2012 00:01:07;Значение2
15.02.2012 00:02:26;Значение3

Come saltare programmaticamente la prima linea, o cancellarla programmaticamente in generale quando si salva il valore si rovina tutto.

Grazie in anticipo.