[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 365

 
sibemol >> :

Grazie per la risposta, lo proverò e vi farò sapere i risultati.

Ho solo aggiunto alcune cose come idea.


//+------------------------------------------------------------------+
//| CopyBars.mq4 |
//| Copyright © 2009, Sorento |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Sibemol & Sorento" // :)
#property link "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 White
//---- input parameters
extern int Max_Length=9;
double v1[];int pos, hFile;datetime CurentT;
string O="CB", strng, F=";", Filler="0000000000000000";
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
string Name_File;
Name_File=StringConcatenate(O,Symbol(),TimeYear(Time[0]),"_",TimeMonth(
Time[0]),"_",TimeDay(Time[0]),"x",TimeHour(iTime(NULL,1,0)),"_",
TimeMinute(iTime(NULL,1,0)),".CSV");
Print ("Bars in ",Name_File," start!");
hFile=FileOpen(Name_File,FILE_CSV |FILE_WRITE,F);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,v1);
strng=StringConcatenate("<ticker>",F,"<per>",F,"<date>",F,"<time>",F,"<open>",F,"<high>");
strng=StringConcatenate(strng,F,"<low>",F,"<close>",F,"<volume>",F,"<oi>",F);
pos=pos+StringLen(strng);
FileWrite(hFile,strng);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
FileClose(hFile);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted(), limit;
//----- первый вызов
if (counted_bars==0)
{CurentT=Time[0];// при записи может закрыться текущий бар и появится новый
limit=Bars-1;
CurentT =FilesWR(limit,1);
//----
return(0);
}
//---- последующие
if (counted_bars>0)
if (CurentT<Time[0])
{// мог быть обрыв связи - нужно найти последний и может еще не обновлённый бар
limit=iBarShift(NULL,Period(),CurentT,false);
CurentT=Time[0];// при записи может закрыться текущий бар и появится новый
FilesWR(limit+1,0);
}
else FilesWR(1,0); //бар еще текущий
//-----
return(0);
}
//+------------------------------------------------------------------+
datetime FilesWR(int startBar,int code){

int codec=code;

for(int i=startBar; i>=0; i--)
{
v1[i]=Close[i];
int _Year=TimeYear(Time[i]),
_Month=TimeMonth(Time[i]),
_Day=TimeDay(Time[i]),
_Hour=TimeHour(Time[i]),
_Minute=TimeMinute(Time[i]);

string Y, M, D, H, Mi, Date, _Time;

if(_Month<10) M="0"+DoubleToStr(_Month, 0); else M=DoubleToStr(_Month, 0);
if(_Day<10) D="0"+DoubleToStr(_Day, 0); else D=DoubleToStr(_Day, 0);
if(_Hour<1) H="00";
else if(_Hour<10 ) H="0"+DoubleToStr(_Hour, 0);
else H=DoubleToStr(_Hour, 0);
if(_Minute<1)Mi="00";
else if(_Minute<10) Mi="0"+DoubleToStr(_Minute, 0);
else Mi=DoubleToStr(_Minute, 0);
Date=DoubleToStr(_Year, 0)+M+D;
_Time=H+Mi;

strng=StringConcatenate(Symbol(),F, Period(),F, Date,F, _Time,F,
DS(Open[i]),F,DS(High[i]),F, DS(Low[i]),F,DS( Close[i]),F,IS( Volume[i],10),F);
pos=+StringLen(strng);// можно заранее просчитать длину и использовать предопределённую константу
if (codec==0)
{//обновим предпоследний бар тоже
FileSeek(hFile,pos-StringLen(strng),SEEK_SET);
codec=+1;
}

FileWrite(hFile,strng);// при записи может закрыться текущий бар и появится новый
if ( CurentT<Time[0]) i=+1;// сместим индексы

}
CurentT=Time[0];
FileFlush(hFile);
return ;
}
//----------Быстрая коричневая сука----------
//----------12345678901234567890----------!!!
string DS(double value)
{
string strng=DoubleToStr(value,Digits);
int k=StringLen(strng);
int l=StringFind(strng,".")+Digits+1;
if (l<k)
{ strng=StringConcatenate(strng,StringSubstr(Filler,0,k-l));k=2*k-l;}
int i=Max_Length-k;// add char
return (StringConcatenate(StringSubstr(Filler,0,i+1),strng));
}
string IS(int iValue, int Max_Length)
{
string strng=DoubleToStr(iValue,0);
int k=StringLen(strng);
int i=Max_Length-k;// add 0
return (StringConcatenate(StringSubstr(Filler,0,i+1),strng));
}
 

L'ottimizzazione è terminata con il seguente messaggio:

There were 60 passes done during optimization
optimization stopped, 140 cache records were used, 140 cache records rejected

In questo caso, nella finestra delle impostazioni era:

200 / 1 280 (200)


1. Qualcuno può spiegare cosa significano questi numeri e come possono essere stati ottenuti? (60, 140, 200, 1280)

2. Se, diciamo, due parametri fossero ottimizzati e il numero di combinazioni possibili fosse 15 e 20 rispettivamente - dove sarebbero visibili (tra questi numeri)?

3. C'è qualche limite al numero di cicli di ottimizzazione? (tutte le combinazioni sarebbero garantite per essere considerate?).

Grazie!

 

Come posso rendere disponibile una descrizione dei livelli dell 'oggetto Fibo dalle proprietà? Come impostare i loro valori nel codice è chiaro:

      ObjectSet("fibo", OBJPROP_FIBOLEVELS,8);
      ObjectSet("fibo", OBJPROP_FIRSTLEVEL+0,0.0);
      ObjectSet("fibo", OBJPROP_FIRSTLEVEL+1,0.382);
      ObjectSet("fibo", OBJPROP_FIRSTLEVEL+2,0.618);
      ObjectSet("fibo", OBJPROP_FIRSTLEVEL+3,1.0);
      ObjectSet("fibo", OBJPROP_FIRSTLEVEL+4,1.382);
      ObjectSet("fibo", OBJPROP_FIRSTLEVEL+5,1.618);
      ObjectSet("fibo", OBJPROP_FIRSTLEVEL+6,2.0);
      ObjectSet("fibo", OBJPROP_FIRSTLEVEL+7,2.618);

Ma la descrizione? O non è disponibile dal codice?

 

Sorento, grazie mille! Non appena il fine settimana sarà finito, mi assicurerò di controllare la tua versione e alsu.

2alsu: mi sono confuso con i campi, contandoli come stringhe )).

 
sibemol >> :
Sorento, grazie mille! Non appena il fine settimana sarà finito, controllerò sicuramente la tua variante e alsu.

senza controllo dei movimenti di mercato ora. Questo vi permetterà di concentrarvi sul debugging di due sole situazioni.

il bar è ancora vecchio

e ce n'è uno nuovo.

Se c'è una nuova barra, è necessario aggiornare quella già formata.

c'è qualcosa da ottimizzare.

E controlla l'algoritmo per saltare un link e perdere artificialmente un frammento di storia.


Buona fortuna per la tua strada.


PS. Credo però di dover arretrare di due lunghezze. Pensateci.

 
Sorento, controllato il codice senza cambiare nulla sul mercato in piedi. Le linee sono così: EURUSD;15;20091224;1830;0001.43580;0001.43625;0001.43566;0001.43611;00000000163; EURUSD;15;20091224;1845;0001.43612;0001.43612;0001.43536;0001.43538;00000000180; e le due ultime barre sono scritte (duplicate) all'inizio del file. Dovrò spostarlo. Studierò il vostro codice. Grazie.
 

Gli zeri iniziali e di riempimento dopo DoubleToStr(value,Digits) sono necessari per la costanza della lunghezza - questo era il problema.

Puoi cercare la posizione dalla fine. ;)

Buona fortuna nella vostra ricerca.

 

2Sorento:

Nel tuo codice.

int start()
{
int counted_bars=IndicatorCounted(), limit;
//----- первый вызов
if ( counted_bars==0)
{ CurentT=Time[0];// при записи может закрыться текущий бар и появится новый
limit=Bars-1;
CurentT = FilesWR( limit,1);
//----
//return(0);

Ho rimosso return(0), poi il file è stato scritto come dovrebbe essere, solo che non ci sono valori dell'ultimo campo <oi>, che contiene 0 in tutti i record, ma non è niente, lo sistemerò. Ora dobbiamo controllare il movimento. Grazie ancora.

Non c'è modo di rimuovere gli zeri di piombo nei campi dei prezzi? Sembra che la lunghezza non influisca.

 
Svinozavr >> :

Come posso rendere disponibile una descrizione dei livelli dell'oggetto Fibo dalle proprietà? Come impostare i loro valori nel codice è chiaro:

E la descrizione? O non è accessibile dal codice?


Grazie a Sorento - ha suggerito ObjectSetFiboDescription.

Domanda rimossa.

 
sibemol >> :

2Sorento:

Nel tuo codice.

Rimosso return(0), poi il file viene scritto come dovrebbe, solo che non ci sono valori dell'ultimo campo <oi>, che contiene 0 in tutti i record, ma sono inezie, lo scoprirò. Ora dobbiamo controllare il movimento. Grazie ancora.

Non c'è modo di rimuovere gli zeri di piombo nei campi dei prezzi? Non sembra influenzare la lunghezza.

corsa all'oro. 1140 и 980

cambia la lunghezza del disco.

e <oi> l'ho rimosso per mancanza d'uso ;)