特定の時間帯のローソク足の始値を取得します。 - ページ 3

削除済み  

OK OK I give you that:

#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);
defineの1つだけが考慮されます。Array HeureSH[]は正しく実行され、書き込まれた時間が到着すれば、それは本当です、正しいです、これはtimes[k]だけです、4つの#defineをすべて考慮していません。
 
Kane59:

OK OK、それは認めるよ。

defineの1つだけが考慮されます。Array HeureSH[]は正しく実行され、書き込まれた時間が到着すれば、それは正しいです、これはtimes[k]だけです4つの#defineをすべて考慮していないです。

問題は非常に明白です.

string            HeureSH[];

この配列のサイズは0であり、そのように宣言されています ... このループは ...

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

0 で開始し、k >= 0 で終了します(0 は配列のサイズ)。

削除済み  

OK、そう思ったから書いたんだ。

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:

OK、そう思ったから書いたんだ。

文字列を操作する必要があると思います。文字列を個々の時間に分割し、それぞれをdatetimeに変換してHeureSH[]配列に格納します。 この方法で文字列を扱うのは少しトリッキーです。 難しいのではなく、失敗しやすい。 そうすればあなたのコードは少し意味を持ち始めるかもしれません ... ...


ところで、これらの 文字列関数は 、あなたが作業しなければならないものです。
削除済み  

こんにちは。

私はそれについて働くが、私はこれを理解していない。

RaptorUK:

問題は非常に明白です.

この配列のサイズは 0 で、そのように宣言されています。

は 0 で始まり、k >= 0 で終わります(0 は配列のサイズです)。

もう少し詳しく教えてください。


HeureSH[]については、4つの時間を持つために、4つの文字列部分に分割するために線を使用しました。

もう一度編集します。

ArraySize(HeureSH)をprint関数に 書き込んだら、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: Open:1.27701 ArraySise=4

もう一度テストしたら、この中の最後の1つだけが選択されました。

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

最後の "14400 "ですね。配列 "HeureSH[]"の同じ順番の他のものは選択されないのでしょうか?


Forのサイクルに問題があるのでしょうか?
 
Kane59:

こんにちは

私はそれについて動作しますが、私はこれを理解していない。

もっと詳しく教えていただけますか?


HeureSH[]については、4つの時間を作るために、4つの文字列に分割する線を使いました。

もう一度編集してください。

ArraySize(HeureSH)をprint関数に書き込んだら、4と出ました。

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

あなたが示したコードは、私が説明したものになります。あなたが質問していることに影響を与えるより多くのコードを持っている場合は、それを表示する必要があります... ...またはあなたがこれ以上の助けを必要としない場合は、それを表示しないでください。
削除済み  

Ok ok すみません。

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

例えば、9:00のとき、iBarは昨日の23:00のバーで、TimeCurrentより10時間短いです。15:00のとき、iBarは今日の09:00のバー、......。私が欲しいもの。選択された時間が来たら、今(TimeCurrent)の前にある参照バーを持つ。私の問題は、プログラムが "times[]"の最後の項目を取るだけで、他は取らないことです。私はHeureSH[0]の場合、times[0]とcontinueを使用したい。私は何をすることができますか?


PS:それは私が持っていて、私が必要とするすべてです。

削除済み  

こんにちは。

どなたか助けてください

 
Kane59:

こんにちは。

誰か私を助けてくれませんか?

あなたは誰もあなたを助けることを容易にしない、あなたはあちこちにあなたのコードの断片を投稿している.あなたのコードを理解しようとしているのですが、完全なコードを持っていないので、それが何をするのか確認するために実行することができません。

UpdateHSeSpeciales()はいつ呼び出されるのですか?

削除済み  

本当にすみません。

ただ、「UpdateHSeSpeciales」を忘れてしまったのは事実です。


プログラム開始時のinitで呼ばれます。