[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 365

 
sibemol >> :

Merci pour la réponse, je vais l'essayer et vous faire part des résultats.

J'ai juste ajouté quelques éléments à titre d'idée.


//+------------------------------------------------------------------+
//| 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'optimisation s'est terminée par le message suivant :

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

Dans ce cas, dans la fenêtre des paramètres, c'était :

200 / 1 280 (200)


1. Quelqu'un peut-il expliquer ce que signifient ces chiffres et comment ils ont pu être obtenus ? (60, 140, 200, 1280)

2. Si, par exemple, deux paramètres étaient optimisés et que le nombre de combinaisons possibles était respectivement de 15 et 20, où seraient-ils visibles (parmi ces nombres) ?

3. y a-t-il une limitation du nombre de cycles d'optimisation ? (toutes les combinaisons seraient-elles garanties d'être prises en compte ?).

Merci !

 

Comment faire pour qu'une description des niveaux de l'objet Fibo soit disponible à partir des propriétés ? La façon de définir leurs valeurs dans le code est claire :

      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);

Mais la description ? Ou n'est-il pas disponible dans le code ?

 

Sorento, merci beaucoup ! Dès que le week-end sera terminé, je vérifierai votre version et alsu.

2alsu : j'ai confondu avec les champs, en les comptant comme des chaînes de caractères ;)).

 
sibemol >> :
Sorento, merci beaucoup ! Dès que le week-end sera terminé, je vérifierai certainement votre variante et votre alsu.

sans contrôle du mouvement du marché maintenant. Cela vous permettra de vous concentrer sur le débogage de deux situations seulement.

le bar est toujours vieux

et il y en a un nouveau.

S'il y a une nouvelle barre, vous devez mettre à jour celle qui est entièrement formée.

il y a quelque chose à optimiser.

Et vérifiez que l'algorithme ne saute pas un lien et ne perd pas artificiellement un fragment d'histoire.


Bonne chance sur votre chemin.


PS. Je pense que je dois reculer de deux longueurs. Pensez-y.

 
Sorento, j'ai vérifié le code sans rien changer sur le marché permanent. Les lignes ressemblent à ceci : 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 ; et les deux dernières barres sont écrites (en double) au début du fichier. Je vais devoir le déplacer. Je vais étudier votre code. Merci.
 

Les zéros de tête et de remplissage après DoubleToStr(value,Digits) sont nécessaires pour la constance de la longueur - c'était le problème.

Vous pouvez rechercher une position à partir de la fin. ;)

Bonne chance dans votre recherche.

 

2Sorento :

Dans votre code.

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

J'ai supprimé return(0), puis le fichier a été écrit comme il devrait l'être, seulement il n'y a pas de valeurs du dernier champ <oi>, qui contient 0 dans tous les enregistrements, mais ce n'est rien, je vais le corriger. Maintenant, nous devons vérifier le mouvement. Merci encore.

N'y a-t-il pas moyen de supprimer les zéros de plomb dans les champs de prix ? Il semble que la longueur n'ait pas d'incidence.

 
Svinozavr >> :

Comment faire pour qu'une description des niveaux de l'objet Fibo soit disponible à partir des propriétés ? La façon de définir leurs valeurs dans le code est claire :

Et la description ? Ou bien il n'est pas accessible depuis le code ?


Merci à Sorento - qui a suggéré ObjectSetFiboDescription.

Question supprimée.

 
sibemol >> :

2Sorento :

Dans votre code.

Supprimé return(0), alors le fichier s'écrit comme il le devrait, seulement il n'y a pas de valeurs du dernier champ <oi>, contenant 0 dans tous les enregistrements, mais ce sont des broutilles, je vais trouver une solution. Maintenant, nous devons vérifier le mouvement. Merci encore.

N'y a-t-il pas moyen de supprimer les zéros de plomb dans les champs de prix ? Ça ne semble pas affecter la longueur.

la course à l'or. 1140 и 980

les changements de longueur des enregistrements.

et <oi>Je l'ai supprimé par manque d'utilité ;)