Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 1033

 
abeiks:

Olá.

O tempo não está sendo devolvido corretamente no momento. Por exemplo, se o tempo for 12,04, ele retorna 12,4. Você pode me dizer como tornar esta função correta?

Bem, Hora() e Minuto() retornam a hora atual e o minuto atual da última hora do servidor no momento do início do programa. E os valores retornados são do tipo int. E estes são apenas números inteiros. Portanto, você precisa formatá-los. Por exemplo, assim:

string label=IntegerToString(Hour(),2,'0')+":"+IntegerToString(Minute(),2,'0');
 
artmedia70:

Hora() e Minuto() retornam a hora atual e o minuto atual da última hora do servidor no início do programa. E os valores retornados são do tipo int. E estes são apenas números inteiros. Portanto, você ainda precisa formatá-los. Por exemplo, assim:


Obrigado!
 
abeiks:
Obrigado!

Seja bem-vindo. Se não é segredo, por que você precisa de uma etiqueta mostrando a hora da última execução de seu programa - o tempo nele não mudará.

Apenas curiosidade ociosa...

 

Boa tarde!

Favor aconselhar como implementar corretamente a função de limitar 1 negócio a 1 barra (isto é, se um negócio já foi aberto ou fechado em uma vela, um novo negócio não será aberto nessa vela)

Encontrei muitas variantes, mas não consigo descobrir como escrever corretamente o código de uma coruja (ou seja, que parte deve ser escrita em variáveis globais, e que parte deve ser escrita na condição de abertura do negócio)

Por exemplo, aqui está uma variante desse tipo:

int TekBar = -1; // Barra atual.

if (TekBar == Barras)return(0); // Apenas uma troca por barra.
TekBar = Barras; // Há apenas uma profissão em uma barra.

{...}

qual parte deste roteiro deve ser inserida em que área do código da coruja?

 
DuKle:

Boa tarde!

Favor aconselhar como implementar corretamente a função de limitar 1 negócio a 1 barra (isto é, se um negócio já foi aberto ou fechado em uma vela, um novo negócio não será aberto nessa vela)

Encontrei muitas variantes, mas não consigo descobrir como escrever corretamente o código de uma coruja (ou seja, que parte deve ser escrita em variáveis globais, e que parte deve ser escrita na condição de abertura do negócio)

Por exemplo, aqui está uma variante desse tipo:

int TekBar = -1; // Barra de corrente.

se (TekBar == Barras)retorno(0); // Apenas uma troca por barra.
TekBar = Barras; // Há apenas uma profissão em uma barra.

{...}

qual parte deste roteiro deve ser inserida em que área do código da coruja?

Você precisa descobrir se a última negociação no bar número 0 foi aberta ou fechada.

Para isso, você precisa encontrar o último comércio aberto e o último comércio fechado.

Veja a barra do último comércio aberto e a barra do último comércio fechado.

Se algum destes valores (barra da última negociação aberta ou barra da última negociação fechada) for zero, você não poderá abrir novas posições.

E, sim: não é um roteiro, é apenas um pedaço de código. E não é preciso inserir nada na coruja: a coruja é uma ave de rapina noturna, e deixar a ave viver.

 

Olá! Por favor, ajudem!

Eu tenho uma idéia, mas não sei como implementá-la. E o mais importante, não sei se este problema tem uma solução.

A sua essência é a seguinte: temos um indicador que desenha alguma linha no gráfico sobre um determinado número de barras.

É possível mudar o número de barras em que a linha é traçada arrastando a "ponta" esquerda da linha com o mouse? Depois de arrastar, o indicador deve lembrar o novo número de barras utilizadas para o cálculo. Aqui está um exemplo de um indicador que eu quero melhorar

//+------------------------------------------------------------------+
//|                                                      Canal__.mq4 |
//+------------------------------------------------------------------+
//----------------------------------
#property indicator_chart_window
//----------------------------------
extern int Hours=20;
extern color col=Red;
//------------------
double lr,lr0,lrp;
double sx,sy,sxy,sx2,aa,bb;
int p,fs;
ulong sName;
int f,f0,f1;
double dh,dl,dh_1,dl_1,dh_2,dl_2;
int ai_1,ai_2,bi_1,bi_2;
double hai,lai,dhi,dli,dhm,dlm,ha0,hap,la0,lap;
double price_p1,price_p0,price_p2,price_01,price_00,price_02;
int p1,p0,p2,fp;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   p=Hours*60/Period();
   if(fs==0)
     {
      sName=TimeCurrent(); 
      fs=1;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   ObjectDelete("1"+(string)sName);
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int i,n;
//----
   if(f==1)
     {
      p1=iBarShift(Symbol(),Period(),(datetime)ObjectGet("1"+(string)sName,OBJPROP_TIME1));
      if(fp==0 && p!=p1) {p=p1; fp=1;}
     }
//----
   sx=0; sy=0; sxy=0; sx2=0;
   for(n=0; n<=p; n++)
     {
      sx+=n; sy+=Close[n]; sxy+=n*Close[n]; sx2+=MathPow(n,2);
     }
   aa=(sx*sy-(p+1)*sxy)/(MathPow(sx,2)-(p+1)*sx2); bb=(sy-aa*sx)/(p+1);
//----
   for(i=0; i<=p; i++)
     {
      lr=bb+aa*i;
      dh=High[i]-lr; dl=Low[i]-lr;
      //----
      if(i<p/2)
        {
         if(i==0)
           {
            dh_1=0.0; dl_1=0.0; ai_1=i; bi_1=i;
           }
         if(dh>=dh_1) {dh_1=dh; ai_1=i;}
         if(dl<=dl_1) {dl_1=dl; bi_1=i;}
        }
      //----
      if(i>=p/2)
        {
         if(i==p/2)
           {
            dh_2=0.0; dl_2=0.0; ai_2=i; bi_2=i;
           }
         if(dh>=dh_2) {dh_2=dh; ai_2=i;}
         if(dl<=dl_2) {dl_2=dl; bi_2=i;}
        }
     }
   lr0=bb; lrp=bb+aa*(i+p);
//===================================================
   if(MathAbs(ai_1-ai_2)>MathAbs(bi_1-bi_2)) f=1;
   if(MathAbs(ai_1-ai_2)<MathAbs(bi_1-bi_2)) f=2;
   if(MathAbs(ai_1-ai_2)==MathAbs(bi_1-bi_2))
     {
      if(MathAbs(dh_1-dh_2)<MathAbs(dl_1-dl_2)) f=1; if(MathAbs(dh_1-dh_2)>=MathAbs(dl_1-dl_2)) f=2;
     }
//=================================================
   if(f==1)
     {
      for(n=0; n<=20; n++)
        {
         f1=0;
         for(i=0; i<=p; i++)
           {
            hai=High[ai_1]*(i-ai_2)/(ai_1-ai_2)+High[ai_2]*(i-ai_1)/(ai_2-ai_1);
            if(i==0 || i==p/2) dhm=0.0;
            if(High[i]-hai>dhm && i<p/2) {ai_1=i; f1=1;}
            if(High[i]-hai>dhm && i>=p/2) {ai_2=i; f1=1;}
           }
         if(f==0) break;
        }
      //----------------------------
      for(i=0; i<=p; i++)
        {
         hai=High[ai_1]*(i-ai_2)/(ai_1-ai_2)+High[ai_2]*(i-ai_1)/(ai_2-ai_1);
         dli=Low[i]-hai;
         if(i==0) dlm=0.0; if(dli<dlm) dlm=dli;
        }
      ha0=High[ai_1]*(0-ai_2)/(ai_1-ai_2)+High[ai_2]*(0-ai_1)/(ai_2-ai_1);
      hap=High[ai_1]*(p-ai_2)/(ai_1-ai_2)+High[ai_2]*(p-ai_1)/(ai_2-ai_1);
      //----------------------------
      price_p1=hap+dlm/2;
      price_01=ha0+dlm/2;
     }
//=================================================
   if(f==2)
     {
      for(n=0; n<=20; n++)
        {
         f1=0;
         for(i=0; i<=p; i++) 
           {
            lai=Low[bi_1]*(i-bi_2)/(bi_1-bi_2)+Low[bi_2]*(i-bi_1)/(bi_2-bi_1);
            if(i==0 || i==p/2) dlm=0.0;
            if(Low[i]-lai<dlm && i<p/2) {bi_1=i; f1=1;}
            if(Low[i]-lai<dlm && i>=p/2) {bi_2=i; f1=1;}
           }
         if(f==0) break;
        }
      //----------------------------
      for(i=0; i<=p; i++)
        {
         lai=Low[bi_1]*(i-bi_2)/(bi_1-bi_2)+Low[bi_2]*(i-bi_1)/(bi_2-bi_1);
         dhi=High[i]-lai;
         if(i==0) dhm=0.0; if(dhi>dhm) dhm=dhi;
        }
      la0=Low[bi_1]*(0-bi_2)/(bi_1-bi_2)+Low[bi_2]*(0-bi_1)/(bi_2-bi_1);
      lap=Low[bi_1]*(p-bi_2)/(bi_1-bi_2)+Low[bi_2]*(p-bi_1)/(bi_2-bi_1);
      //----------------------------------------------------------------
      price_p1=lap+dhm/2;
      price_01=la0+dhm/2;
     }
//=================================================================================== отрисовка линий
   ObjectCreate("1"+(string)sName,2,0,Time[p],price_p1,Time[0],price_01);
//-----------------------------------------------------------------
   ObjectSet("1"+(string)sName,OBJPROP_COLOR,col);
   ObjectSet("1"+(string)sName,OBJPROP_STYLE,STYLE_DASHDOT);
   ObjectSet("1"+(string)sName,OBJPROP_RAY,false);
//---------------------------------------------
   ObjectSet("1"+(string)sName,OBJPROP_TIME1,Time[p]);
   ObjectSet("1"+(string)sName,OBJPROP_PRICE1,price_p1);
   ObjectSet("1"+(string)sName,OBJPROP_TIME2,Time[0]);
   ObjectSet("1"+(string)sName,OBJPROP_PRICE2,price_01);
   f=1; p1=p; p0=p; p2=p; fp=0;
//===================================================================================
   return(0);
  }
//+------------------------------------------------------------------+
 
Night63:

Olá! Por favor, ajudem!

Eu tenho uma idéia, mas não sei como implementá-la. E o mais importante, não sei se este problema tem uma solução.

A sua essência é a seguinte: temos um indicador que desenha alguma linha no gráfico sobre um determinado número de barras.

É possível mudar o número de barras em que a linha é traçada arrastando a "ponta" esquerda da linha com o mouse? Depois de arrastar, o indicador deve lembrar o novo número de barras utilizadas para o cálculo. Aqui está um exemplo de um indicador que eu quero melhorar

Você precisa adicionar OnChartEvent() ao indicador e acompanhar o evento de mudança de tamanho de linha por seu nome: CHARTEVENT_OBJECT_CHANGE. Recalcular o novo comprimento de linha em barras e usar seu novo tamanho como parâmetro para o cálculo.
 
artmedia70:

Você precisa descobrir se a última negociação foi aberta ou fechada no bar número 0.

Para isso, você precisa encontrar o último comércio aberto e o último comércio fechado.

Veja a barra aberta do último comércio aberto e a barra fechada do último comércio fechado.

Se um destes valores (a barra da última negociação aberta ou a barra da última negociação fechada) for zero, não será possível abrir novas posições.

E, sim: você não tem um roteiro, é apenas uma parte do código do nepomyshchego. E não é preciso inserir nada na coruja: a coruja é uma ave de rapina noturna, e deixar a ave viver.

Eu entendo o princípio de detectar a presença de um acordo. Eu não sei como implementá-lo no código :-(
 
DuKle:
Entendo o princípio de determinar se uma transação existe, não sei como implementá-la em código :-(

Como tudo isso é triste...

Devo fazer isso por você?

Para começar, e para entender melhor, leia o tópico"Funções úteis do KimIV".

O código, é claro, é redundante, mas é justo para se começar e aprender.

 

Caros programadores mql4/5 !

Sou um iniciante que aprendeu o básico da linguagem de programação e desenvolveu um EA para o meu diploma!

Eu tenho um capítulo em meu diploma chamado "Economia".

Se eu tivesse que desenvolver um programa para uma empresa - tudo está claro com a parte econômica.

Mas como estar no meu caso? O que posso levar em conta e quais caminhos a seguir!

Muito obrigado!!!!

___________________________

A estrada é percorrida por aqueles que andam (c)