Ter o preço aberto da vela a uma hora específica. - página 3

 

Ok, ok, eu lhe dou isso:

#define HR0900 14400  //All times were changed for the test to see which is the Reference.
#define HR1500 10800
#define HR1900 7200
#define HR2300 3600

extern string     Heures="11:41;11:42;12:00;11:42;"; // Times for my test today...
string            HeureSH[];

datetime TC = TimeCurrent();

int times[]={HR1500, HR2300, HR0900, HR1900};
                
    for(int k=0; k<ArraySize(HeureSH); k++)
    {
      datetime    want= TC - times[k];
    }

int iBar= iBarShift(Symbol(), PERIOD_H1, want);
double OpenPrice= iOpen(Symbol(), PERIOD_H1, iBar);
Apenas um de #define é considerado. O Array HeureSH[] é executado corretamente e, se o tempo de chegada chegar, é verdade, é correto, isto é apenas vezes[k] não considere todos os quatro #define.
 
Kane59:

Ok, ok, eu lhe dou isso:

Somente um de #define é considerado. O Array HeureSH[] é executado corretamente e, se o tempo de chegada chegar, é verdade, é correto, isto é apenas vezes[k] não considerar todos os quatro #define.

O problema é bastante óbvio . . .

string            HeureSH[];

então esta matriz tem um tamanho 0 como você declarou dessa forma . . . então esta malha . . .

for(int k=0; k < ArraySize(HeureSH); k++)

começa em 0 e termina quando k >= 0 ( sendo 0 o tamanho da matriz )

 

Certo, eu agitei porque eu pensei:

extern string     Heures="11:41;11:42;12:00;11:42;"; // Times for my test today...
      
                            0     1     2     3

int times[]={HR1500, HR2300, HR0900, HR1900};

               0        1       2       3
 
Kane59:

Certo, eu agitei porque eu pensei:

Eu acho que você precisa fazer alguma manipulação de cordas, você precisa quebrar suas cordas em horários individuais, converter cada uma delas em uma data e armazená-las em seu HeureSH[] array . . trabalhar com cordas desta forma pode ser um pouco complicado, não é difícil comprar fácil de estragar. Então seu código pode começar a fazer um pouco de sentido . .


A propósito, estas são as funções das cordas com as quais você tem que trabalhar, estudá-las cuidadosamente, aproveitá-las.
 

Hi

Eu trabalho sobre isso, mas não entendo isso:

RaptorUK:

O problema é bastante óbvio . . .

então esta matriz tem um tamanho de 0 como você declarou dessa forma . . . então este loop . .

começa em 0 e termina quando k >= 0 ( sendo 0 o tamanho da matriz )

Você pode tentar me dizer com mais detalhes?


Para a HeureSH[] eu usei linhas para cortar isto em 4 cordas para ter 4 horas diferentes.

Edite novamente:

Apontei o ArraySize(HeureSH) em uma função de impressão e ele me deu: 4

Print("Open:", DoubleToStr(OpenPrice, digits), /*" Time:", TimeToStr(Time[iBar], */" ArraySise=", ArraySize(HeureSH));

2013.01.19 13:57:21 2012.11.19 19:00 Tester EURUSD,H1: Aberto:1.27701 ArraySise=4

testei novamente e selecionei apenas o último destes:

int times[]={36000,21600,14400,14400};

Portanto, o último "14400". Por que ele não seleciona outros na mesma ordem do Array "HeureSH[]" ?


Há algum problema com o ciclo "Para"?
 
Kane59:

Hi

Eu trabalho sobre isso, mas não entendo isso:

Você pode tentar me dizer com mais detalhes?


Para a HeureSH[] eu usei linhas para cortar isto em 4 cordas para ter 4 horas diferentes.

Edite novamente:

Eu escrevi ArraySize(HeureSH) em uma função de impressão e ele me deu: 4

2013.01.19 13:57:21 2012.11.19 19:00 Tester EURUSD,H1: Aberto:1.27701 ArraySise=4

O código que você mostrou resultará no que eu descrevi, se você tiver mais código que tenha um impacto na pergunta que você está fazendo, então você precisa mostrá-lo . . . . ou não mostrá-lo se você não precisar mais de ajuda.
 

Ok ok, desculpe.

extern string     Heures="09:00;15:00;19:00;23:00;";
string            HeureSH[];

int start()
  {
//---- 
int times[]= {36000,21600,14400,14400};

   for(int i=0; i<ArraySize(Heures); i++)
   {
      datetime    want = TC - times[i];
   }

   int iBar= iBarShift(Symbol(), PERIOD_H1, want);
   double OpenPrice= iOpen(Symbol(), PERIOD_H1, iBar);

   if (HeureSH(TimeToStr(iTime(Symbol(),PERIOD_H1,0),TIME_MINUTES)))
   {
      if(iOpen(Symbol(), PERIOD_H1, 0) < OpenPrice)
      {
         OrderSend( OP_SELL, .......);
      }
      if(iOpen(Symbol(), PERIOD_H1, 0) > OpenPrice)
      {
         OrderSend( OP_BUY, .......);
      }
   }

//----
   return(0);
  }

//+------------------------------------------------------------------+
void UpdateHSeSpeciales()
   {
      string hour1 = "";
      int count1 = 0;
      for(int k=0; k<StringLen(Heures); k++)
      {
         if(StringSubstr(Heures, k, 1) != ";")
         {
            hour1= hour1+ StringSubstr(Heures, k, 1);
         }
         else
         {
            ArrayResize(HeureSH, ArraySize(HeureSH)+1);
            HeureSH[count1] = hour1;
            hour1 ="";
            count1 +=1;
         }   
      }
   }
   bool HeureSH(string now1)
   {
      for(int k=0; k<ArraySize(HeureSH); k++)
      {
         if(now1 == HeureSH[k])
         {
            return(true);
         }
      }
   
      return(false);
   }

Então, por exemplo, quando são 09:00, o iBar é o bar de ontem 23:00, 10 horas a menos que o TimeCurrent. Quando são 15:00, o iBar é o bar de hoje 09:00, ....... O que eu quero: Se chegar a hora selecionada, ter uma barra de referência que seja antes de Agora (TimeCurrent). Meu problema é que o programa só leva o último item de "tempos[]" nenhum outro. Eu quero se HeureSH[0], usar times[0] e continuar. O que eu posso fazer?


PS: é tudo o que tenho e preciso.

 

Hi,

oh, alguém pode me ajudar?

 
Kane59:

Hi,

oh, alguém pode me ajudar?

Você não facilita a ajuda de ninguém, você afixa pedaços de seu código aqui e ali . . estou tentando entender seu código, não posso executá-lo para ver o que ele faz, pois não tenho o código completo, você tem uma função com o mesmo nome de sua matriz, tudo bem, mas isso não ajuda na legibilidade.

Quando o UpdateHSeSpeciales() é chamado de ?

 

Desculpe, realmente,

Eu só tenho isso, mas é verdade, esqueci "UpdateHSeSpeciales".


É chamado de "init" quando o programa começa.