[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 375

 
Chiripaha:

私は同意する用意がありません。- なぜなら、そのような立場では、EAを動作させ、資金もポジションも正しく計算し続けるというロジックが失われてしまうからです。- これはその一つです。2番目。- 例えば、私のEAが100ミリ秒眠っていて、同時に別のEAが動き出したとしたら、この100ミリ秒が過ぎると同時に、もう一つのEAはその作業を止めなければならないということが起こるのでしょうか...。で、それをまた真ん中のこの人に渡す、ということを無限に繰り返していく...。その一方で私は、EAで、数分間、実行ブロックごとに何度も「スリープ」状態になるのを見たことがあります(まれではありません)。- では、この時間帯に他のすべてのフクロウが動いていないとしたら、それもどこかおかしい。- だから、質問はかなり適切です。この際、操作のロジックを理解したいと思います。しかし、公式の資料で詳しい説明に出会ったことはない。

でも、納得する準備はできています。もともと、mql4が登場したとき、誰も多通貨や、一つの端末にフクロウの群れがいることなど考えたことがなかった。だから、これが正常である可能性もある。

チリパハ

しかし、2つの悪のうち、私は後者を選びます。その場合、私はフクロウを残すだけです......間違いないです。そうしないと、再計算のスピードは遅くなるけれども、少なくとも再計算の正確さは保たれます。

複数の信号、つまり各シンボルに異なる信号を使用する方がより理にかなっています。そして、必要なだけのシグナルをアレイに集め、すべてを1つのEAで取引します。ロジックは同じなのに、なぜ多くのEAが必要なのでしょうか?

チリパハ

この問題は、見た目ほど些細なことではありません。- 実は、私の実験では、「EAに取引を許可する」のチェックを外しても、EAの動作は止まらず、すべての計算が毎ティック行われることが分かっています。EAのトランザクションだけがサーバーに送信されることはありません。しかし、これらの計算が(正確とは言い難い)「滑り」で埋め尽くされると、これらのEAが5~10個あれば、具体的には現在取引している実際のEAの実行を遅らせることができるのです。

そう、プログラマーの中には、これを前提にトレードやフクロウの仕事を飛ばすためのパーミッションにコントロールを置く人もいるのです。しかし、その頻度は高くはありません。また、コードが閉じていると、その操作がブレーキなのかそうでないのか(具体的にどのフクロウなのか)、まったく理解することができません。- では、フォーラム検索でこのトピックをつつくことにします。何かが減速している。

どうやらそうみたいです。この「EAに取引を許可する」ボタンは、EAコードがそれを提供する場合にのみ意図したとおりに機能します。
 
Chiripaha:

私は同意する用意がありません。- なぜなら、そのような立場では、EAを動作させ、資金もポジションも正しく計算し続けるというロジックが失われてしまうからです。- これはその一つです。2番目。- 例えば、私のEAが100ミリ秒眠っていて、同時に別のEAが動き出したとしたら、この100ミリ秒が過ぎると同時に、もう一つのEAはその作業を止めなければならないということが起こるのでしょうか...。で、それをまた真ん中のこの人に渡す、ということを無限に繰り返していく...。その一方で私は、EAで、数分間、実行ブロックごとに何度も「スリープ」状態になるのを(まれではありませんが)見たことがあります。- では、この時間帯に他のすべてのフクロウが動いていないとしたら、それもどこかおかしい。- だから、質問はかなり適切です。この際、操作のロジックを理解したいと思います。しかし、公式の資料で詳しい説明に出会ったことはない。

しかし、2つの悪のうち、私は後者を選びます。この場合、私なら確信犯的なフクロウを残すだけです。そうでなくても、再計算のスピードは落ちるが、正確さは保たれる。

この問題は、見た目ほど些細なことではありません。- 要は、私の実験では、「EAに取引を許可する」のチェックを外すと、EAの動作は止まらず、すべての計算が毎ティック同じように行われることがわかりました。EAのトランザクションだけがサーバーに送信されることはありません。しかし、これらの計算が(正確とは言い難い)「滑り」で埋め尽くされると、これらのEAが5~10個あれば、具体的には現在取引している実際のEAの実行を遅らせることができるのです。

そう、プログラマーの中には、これを前提にトレードやフクロウの仕事を飛ばすためのパーミッションにコントロールを置く人もいるのです。しかし、その頻度は高くはありません。また、コードが閉じていると、その操作がブレーキなのかそうでないのか(具体的にどのフクロウなのか)、まったく理解することができません。- では、フォーラム検索でこのトピックをつつくことにします。何かが減速している。

質問してくれたアルル さん、思い出させてくれて、更新してくれて、ありがとうございます。私は経験不足で、何が書いてあるのか理解できませんでした。今、もう一度やります。


プロセッサのコード処理の詳細に立ち入ることなく、共通の「絵」で止めておきましょう。Sleep()の 間に、まさにこのコードのさらなる処理のための休止があります(残りのコードはすべて独立した並列スレッドで処理されます)。
 
TarasBY:
Sleep()の間、このコードの処理は一時停止されます(残りのコードはすべて独立した並列スレッドで処理されます)。

さて、それでは...。そして、それが「待ち伏せ」です。私の理解が正しければですが。- はっきり言って...

私が正しく理解しているならば、Igor、Expert Advisorsは(私が実験で行ったように)全く順次ではなく、並行して処理されるのですか?そうすると、アルルの 言う通り、それぞれのシグナルが正しい条件を受け取っていれば、2つのトレードを並行して開くことができることがわかりますね?

そのため、自分の仕事を正しく整理することができる、ということが重要なのです。何がどのように起こっているのか理解できていないと、大きな失敗をすることがあります。
 

また、一見するとテスターではSleep()が動作していないように見えますが、ドキュメントのどこかに書かれているくらいですから...。

EAの開始はStart()関数で、各ティックが到着するごとに行われます。12個のEAがある場合、エラーを処理するようにしてください、表示されるはずです。証券会社に何度も依頼すると、ほとんどの場合、「フローがビジー状態です」などのエラーが発生します。

チェックボックス「EAの 取引を許可する」に関して。はい、Expert Advisorは動作しますが、取引のみが禁止されています。ログを参照してください、それはすべてを言うでしょう。

 

こんにちは、このスクリプトは何なのか、教えてください。

//+------------------------------------------------------------------+
//|                                                        close.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
#property show_confirm

//+------------------------------------------------------------------+
//| script "close first market order if it is first in the list"     |
//+------------------------------------------------------------------+
int start()
  {
   bool   result;
   double price;
   int    cmd,error;
//----
   if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
     {
      cmd=OrderType();
      //---- first order is buy or sell
      if(cmd==OP_BUY || cmd==OP_SELL)
        {
         while(true)
           {
            if(cmd==OP_BUY) price=Bid;
            else            price=Ask;
            result=OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);
            if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
            else error=0;
            if(error==135) RefreshRates();
            else break;
           }
        }
     }
   else Print( "Error when order select ", GetLastError());
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
alex12:

こんにちは、このスクリプトは何なのか、教えてください。

リストの最初の成行注文であれば閉じる」と書かれています。
 
alex12:

こんにちは、これはどのようなスクリプトか教えてください。


アレックス ここに書いてあるのは、こういうことです。

script "close first market order if it is first in the list"

最初の成行注文がリストの最初の注文である場合に、その注文を閉じるスクリプトです。

つまり、コードのロジックから理解する限り、最初に開いた注文が閉じる可能性が高いのです。例えば10個の注文を開いている場合、注文番号1が閉じられます。つまり、先に開封されたものです。

 
Chiripaha:

さて、それでは...。そして、それが「待ち伏せ」です。私の理解が正しければですが。- 整理すると...

私の理解が正しければ、Igor、Expert Advisorsは(私が実験で行ったように)順次処理されるのではなく、並行して処理されるのですね。もしそうなら、アルルの 言うとおりで、それぞれのシグナルが正しい条件を受け取っていれば、2つのトレードを並行して開くことができるということでしょうか。

なぜこれが重要かというと、仕事をきちんと整理するのに役立つからです。何がどのように起こっているのかを理解していないと、多くのミスを犯すことになります。

Sergiyさん、「すべてのExpert Advisorはターミナルでシリアルに処理される」という仮定はどこから出てきたのですか?- 並列計算 機の時代に。;)

そのような実験(Expert Advisorのコードを端末で処理する順番を決める)はしていませんので、論理的にお答えしています。単純に(端末の操作の詳細は省きますが)トレード操作中にExpert Advisorを連続処理するように(強制的に)アレンジしています。でも、一番正しい答えは、私自身の経験です。確かに、得られた結果を正しく処理するためには、エクスペリエンスを設定する際に入力パラメータを正しく考慮することを忘れてはならない。:)

追伸:MT4の現在のビルドでは、最大8つ(私の記憶が正しければ)の取引注文を並行して処理できるとどこかで読みましたが、「私の視点」からは、ユーザー端末が何であるかは不明です - それはDCサーバー(「ワイヤーの反対側」)によって規制されています。;)

 
Chiripaha:

...

I.e.コードのロジックを理解すると、最初のオープンオーダーがクローズする可能性が高くなります。例えば10個の注文がある場合、注文番号1が閉じられます。つまり、最初に開封されたものです。


ただし、この最初の注文が成行注文である場合に限ります。保留中の注文であれば、何も起こりません。
 
TarasBY:

Sergeyさん、「すべてのEAが端末で順次処理される」なんていう仮定はどこから出てきたのでしょうか?- 並列計算機の時代に。;)

そのような実験(Expert Advisorのコードの処理順序を端末で決定する)はしていませんので、論理的にお答えしています。単純に(端末の操作の詳細は省きますが)トレード操作中にExpert Advisorを連続処理するように(強制的に)アレンジしています。でも、一番正しい答えは、私自身の経験です。確かに、得られた結果を正しく処理するためには、エクスペリエンスを設定する際に入力パラメータを正しく考慮することを忘れてはならない。:)

そこが(実験のパラメーターを正しく演出するための)ポイントです。そのため、自分の能力に自信がないからこそ、この結果が乖離した場合、何か間違ったことをしたのかもしれない、と特定するために質問しているのです。これは、どちらかというとテストのポイントになるのですが、そういう時に、一見正しく書かれている ように見えるプログラムが失敗して、どこかを探さなければならないことに気づかされるのです。

この「実験」は偶然に手に入れたものです。並列作業用のプログラムも書きました。この方法は効率が上がらないので、今は断念しました(他のプロジェクトで実現するかもしれません)。その結果、最初のプログラムが処理されない、つまりデータが得られないと、2番目のプログラムが始まらない(より正確には、失敗する)ような事態が発生したのだ。そして、この順番は、どのウィンドウにEAブロックを置くか(つまり、どの順番で置くか)に依存しました。- したがって、ウィンドウの順序が重要である、すなわちエキスパートアドバイザーは並列ではなく、順次処理されると結論づけられる。そして、この順序は、端末のリストにおけるウィンドウの番号付けに依存する。

これが私たちの経験の本質なのです。

しかし、繰り返しになりますが、これは私の結果に対する間違った解釈かもしれません。だからこそ、「滑り」に限らず、今、しつこくこの問題を解いているのです。