[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 365

 
sibemol >> :

Obrigado pela resposta, vou tentar e lhe comunicarei os resultados.

Acabei de acrescentar algumas coisas como uma idéia.


//+------------------------------------------------------------------+
//| 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));
}
 

A otimização terminou com a seguinte mensagem:

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

Neste caso, na janela de ajustes foi:

200 / 1 280 (200)


1. Alguém pode explicar o que significam esses números e como eles poderiam ter sido obtidos? (60, 140, 200, 1280)

2. Se, digamos, dois parâmetros fossem otimizados e o número de combinações possíveis fosse 15 e 20 respectivamente - onde seriam visíveis (entre esses números)?

3) Há alguma limitação no número de ciclos de otimização? (todas as combinações seriam garantidamente consideradas?).

Obrigado!

 

Como faço para disponibilizar uma descrição dos níveis dos objetos Fibo a partir das propriedades? A forma de definir seus valores no código é clara:

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

Mas a descrição? Ou ele não está disponível a partir do código?

 

Sorento, muito obrigado! Assim que o fim de semana terminar, eu terei certeza de verificar sua versão e alsu.

2alsu: confundi-me com os campos, contando-os como cordas ))).

 
sibemol >> :
Sorento, muito obrigado! Assim que o fim de semana terminar, vou definitivamente verificar sua variante e alsu.

sem verificação de movimento de mercado agora. isto permitirá que você se concentre na depuração de apenas duas situações.

o bar ainda é antigo

e há um novo.

Se houver uma nova barra, será necessário atualizar a barra totalmente formada.

há algo a ser otimizado.

E verifique o algoritmo para pular um link e perder artificialmente um fragmento de história.


Boa sorte no seu caminho.


PS. Mas acho que preciso recuar dois comprimentos. Pense sobre isso.

 
Sorento, conferiu o código sem alterar nada no mercado permanente. As linhas são assim: EURUSD;15;20091224;1830;0001.43580;0001.43625;0001.43566;0001.43611;00000000163; EURUSD;15;20091224;1845;0001.43612;0001.43612;0001.4353636;0001.43538;00000000180; e as duas últimas barras são escritas (duplicadas) no início do arquivo. Terei que deslocá-la. Vou estudar seu código. Obrigado.
 

zeros de chumbo e enchimento após o DoubleToStr(valor,dígitos) são necessários para a constância do comprimento - esse era o problema.

Você pode pesquisar a posição desde o final. ;)

Boa sorte em sua busca.

 

2Sorento:

Em seu código.

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

Eu removi return(0), então o arquivo foi escrito como deveria ser, só que não há valores do último campo <oi>, que contém 0 em todos os registros, mas é uma coisa menor, eu vou descobrir. Agora temos de verificar em movimento. Mais uma vez, obrigado.

Não há maneira de remover os zeros de chumbo nos campos de preços? Parece que o comprimento não afeta.

 
Svinozavr >> :

Como faço para disponibilizar uma descrição dos níveis dos objetos Fibo a partir das propriedades? A forma de definir seus valores no código é clara:

E descrição? Ou não é acessível a partir do código?


Graças à Sorento - ObjetoSetFiboDescrição sugerido.

Pergunta eliminada.

 
sibemol >> :

2Sorento:

Em seu código.

Removido retorno(0), então o arquivo é escrito como deveria, apenas não há valores do último <oi> campo, contendo 0 em todos os registros, mas são bagatelas, eu vou descobrir. Agora temos de verificar em movimento. Mais uma vez, obrigado.

Não há maneira de remover os zeros de chumbo nos campos de preços? Não parece afetar o comprimento.

corrida ao ouro. 1140 и 980

o comprimento dos registros muda.

e <oi> Eu o removi porque não é necessário ;)