Mt4 サポート終了。 - ページ 26

 

私の解答を気に入った人は、直接私に手紙を書いて ください。磨きをかけてプレゼントします。

みんなに幸あれ。

 
Реter Konow:

シンボルサイクル、気配値到着時の新しいバー オープンのチェックなど、私のソリューションに簡単に追加することができます。それとOOPはどう関係があるのですか?

あなたは間違った例を選んでいます。他のことを自由に考えてください。

そして、それを実行するのです。キャラクターは変わるものだと考えると--やはり、文字を読むときはそうですね。

 
Artyom Trishkin:

やるんだ。文字が変わることができることを考えると - あなたが文字を読んだときが真実であるため。


では、もし私がそうしたら?じゃあ、何を言うんだ?秘密にしておきますが、私にとってこのような作業は全く子供の遊びです。本当に出来ないと思っているのか?それは甘えだ...。

 
Реter Konow:

では、もし私がそうしたら?じゃあ、何を言うんだ?秘密にしておきますが、私にとってこのような作業は全く子供の遊びです。本当に出来ないと思っているのか?それは甘えだ...。

まあ、もうやってください。

 
Vitaly Muzichenko:

Artyomは質問に答えてくれませんでしたが、問題はこうです:手続き型で書いて、正しく動作するようにすること

文句なしです。ヘッジは、文字列操作の比較を保存するため、まあ、顧客がマニアックで、すべてのシンボルで同時に取引する場合です。

しかし、操作やメモリを保存する場所はどこにもないようで、すべてが最小限になっています

void OnTimer(){

   Alert(Fn_new_bar("EURUSD", PERIOD_D1)); }

//+------------------------------------------------------------------+

uint Sp_Adler32(string line){

   ulong s1 = 1;

   ulong s2 = 0;

   uint buflength=StringLen(line);

   uchar char_array[];

   ArrayResize(char_array, buflength,0);

   StringToCharArray(line, char_array, 0, -1, CP_ACP);

   for (uint n=0; n<buflength; n++){

      s1 = (s1 + char_array[n]) % 65521;

      s2 = (s2 + s1)     % 65521;}

   return ((s2 << 16) + s1);}

//+------------------------------------------------------------------+

bool Fn_new_bar(string symb, ENUM_TIMEFRAMES tf){

   static datetime st_time[]; 

   static uint     st_id[];

   

   //---- set

   datetime new_time = iTime(symb, tf, 0);     if(new_time==0) return(false); 

   uint     new_id   = Sp_Adler32(StringConcatenate(symb,EnumToString(tf))); 

   datetime old_time = 0; 

   uint     old_id   = 0;

   

   //---- find

   int size = ArraySize(st_time); 

   for(int i=0; i<size; i++){

      if(st_id[i]!=new_id) continue; 

      old_id   = st_id  [i]; 

      old_time = st_time[i];

      break;}

   

   //----add new element

   if(old_time==0){

      ArrayResize(st_time, size+1); st_time[size]=new_time;

      ArrayResize(st_id,   size+1); st_id  [size]=new_id; }

   

   //----

   return(old_time>0 && old_time<new_time);}


 
Реter Konow:

少し遅れて申し訳ございませんでした。

以下は、その関数の最初のバージョンです。さらに磨きをかけて発展させることができます。誤りにお気づきの方は、コメントをお願いします。


ポイントはOOPにあるのではなく、あなたのコードがリニアであることにあるのです、おそらくあなたはそれを学ぶことはないでしょうが...。

 
Galina Bobro:

問題ありません。文字列操作の比較を保存するためのヘッジ、まあ、顧客がマニアックですべての文字を同時に取引する場合。

しかし、操作やメモリを節約する場所はどこにもないようで、すべてが最小限の状態です。


トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

Mt4エンド対応。

アルチョム・トリシキン さん 2017.09.10 23:21

彼の手続き型コードの最終結果には、このようなループで動くという目標がありました。

   ENUM_TIMEFRAMES array_timeframes[]=
      {
      PERIOD_M1,PERIOD_M2,PERIOD_M3,PERIOD_M4,PERIOD_M5,PERIOD_M6,PERIOD_M10,PERIOD_M12,PERIOD_M15,PERIOD_M30,
      PERIOD_H1,PERIOD_H2,PERIOD_H3,PERIOD_H4,PERIOD_H6,PERIOD_H8,PERIOD_H12,PERIOD_D1,PERIOD_W1,PERIOD_MN1
      };
   int total=SymbolsTotal(true), total_tf=ArraySize(array_timeframes);
   for(int i=0; i<total; i++){
      string symbol_name=SymbolName(i,true);
      for(int j=0; j<total_tf; j++){
         if(IsNewBar(symbol_name,array_timeframes[j])){
            Print("Новый бар на ",symbol_name," ",EnumToString(array_timeframes[j]));
            }
         }
      }

 
Artyom Trishkin:


習慣で間違った名前を付けてしまいましたが、bool Fn_new_bar(string symb, ENUM_TIMEFRAMES tf)が正しい関数 です。

 
Artyom Trishkin:

じゃあ、今やってよ。


OKです。あなたの解決策はダニにしか効きません。私のはタイマー式です。バーアピアランスでタイミングをとるという私のやり方は、欠点があると思いますか?なるほど。こんな感じにしておきましょう。新しいバーフラグを設定する前に、見積書の到着を確認する機能を追加する予定です。関数にもう一つ、シンボルというパラメータを追加してみます。ユーザーは、新しいバーイベントを受信するシンボルを選択し、関数に送信します。この関数は、このシンボルが最後に引用された時刻を チェックします。そして、バーフォーマル登場時刻と見積もり時刻を比較し、イベントフラグを設定します。

まだ勉強を始めたばかりですが、難しいことはないと思っています。

 
Galina Bobro:

OOPの問題ではなく、あなたのコードがリニアであるかどうか、あなたは知らないかもしれないけれど...。

リニア、ノンリニア...またプログラミングでオペラの話をするんですか?