[アーカイブ!】どんなルーキーの質問でも、フォーラムを散らかさないように。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 2. - ページ 246

 
BBSL:

eddyは悪気はないと言っています。

どうでもいいと言ったんだ :D 彼らの問題だから、誰かを不快にさせてもきちんと行動するよ。でもそれは彼らの利益のためで、問題を解決して原因を探し、最終的にはそれを根絶するためだ。そうしないと、常に問題があることになる。
 
Ais:

全てを1つのファイルで行う理由の1つ→https://docs.mql4.com/ru/basis/variables/formal:

"参照 "でパラメータを渡すことが可能です。この場合、そのようなパラメータの変更は、参照渡しされる呼び出し側関数の対応する変数に影響します。配列の要素を参照渡しすることはできません。参照によるパラメータは、1つのモジュール内でのみ渡すことができ、ライブラリ関数では 不可能です。"


そう、それが問題なのかもしれない...。

パラメータが参照渡しの配列である関数がたくさんあります...

つまり、問題を回避するためにマルチファイルのプログラム構造を放棄しなければならないのですが、別の方法で解決できないのでしょうか?

 
Bicus:

皆さん、ここで質問です。

テスターでEAを動かしています。EAは履歴にアクセスすることができます。つまり、直近の、例えば20件の決済済み注文のうちの1件を探しているのです。

これは実際のEAではとても簡単なことで、注文が表示される履歴の期間を指定することができます。したがって、ラストオーダーは常に「上」である。しかし、テスターで取引数が増えれば増えるほど、より多くの注文が決済され、そのリストに目を通さなければならず、Expert Advisorの動作が遅くなる。

とにかく、この問題をどのように解決したのでしょうか?

現代のコンピュータは、1秒間に何億回もの演算を行う。

何回取引すれば、コンピュータの動作が遅くなるのでしょうか?

難しい」場合は、直近の月/半月分のみ注文検索を行う条件を指定することができます。

 
eddy:
しかし、それは彼らの利益のためであり、彼らは問題を解決し、原因を探し始め、最終的にはそれらを根絶することを望んでいるのです。


eddy、正しいという概念は非常に主観的なものです))

ある集団が「これは一般的に認められている正しいことだ」と思えば、それがその集団のルールとなる。このフォーラムには、そんなグループがあります。

自分の 世界観があるのは大いに結構だが、それを議論して、さらに人を変えたり、再教育したりすることに時間を費やすのは、とても贅沢なことだ))。

アイデアの正しさについて議論することは資源の無駄遣いであり、私たちの問題は解決されません。

私は、あなたに 敬意を表し、あなたの 考えを理解した上で、プログラミングに戻ることを提案します)))

 
tmt0086:
こんにちは =) 今、EAを書きました...条件はなく、GBPUSDとEURUSDで開くだけです。そのため、テスト時には、EURUSDに立った状態でGBPUSDの注文をクローズすることはありません。その逆も然り。設定できますか? それで、注文を開くと・・・。デモではできないが、テストはできない。

誰か教えてくれ...
 
Sergey_Rogozin:

あなたの「難しい」ケースでは、注文は最後の月/学期にしか再生されないという条件を導入することができます。

どのような条件ですか?

テスターで履歴をソートすることは不可能です。ラストオーダーは一番下まで届きます。履歴を全部スクロールしないとたどり着けません。

私が間違っているのでしょうか?

 
tmt0086:

誰か教えてくれ...

MT4には多通貨ストラテジーテスターは ありません。
 
BBSL:


eddy、正しいという概念は非常に主観的なものです))

あるルールが他のルールよりも重要でない場合、または階層的に低い場合、あるルールがそれを必要とする場合、それは無視されるべきです。私は生涯にわたってルールと正しさを研究してきました
 
Roman.:

MT4には多通貨ストラテジーテスターはありません。

どこでテストできるか教えてください。 MT5で動作しますか?
 
Bicus:

条件とは?

テスターで履歴をソートすることは不可能です。ラストオーダーは一番下に落ちます。履歴をすべてスクロールしないとたどり着けません。

私が間違っているのでしょうか?


いいえ。ここでは、注文履歴 から最も新鮮なクローズドオーダーを 選択して、さらに作業を行う例を示します...

//---Поиск последнего отработавшего ордера для открытия очередной позиции ---
   
   for (orderIndex = (OrdersHistoryTotal() - 1); orderIndex >= 0; orderIndex--)
   {   
      if (!OrderSelect(orderIndex, SELECT_BY_POS, MODE_HISTORY))
      {
         Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
         continue;
      }
   
      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber))
      {
         continue;
      }
      
        
   //-------------------------Принимаем в расчет только ордер, закрытый недавно-----------------------
if(time<OrderCloseTime())     //(сравниваем его с хранящимся в пероеменной time) 
  {
    time=OrderCloseTime();     //если время закрытия ордера больше - ложим его в переменную
         
         
     
         int lastType = OrderType();
         double lastLots = OrderLots();
         double lastProfit = OrderProfit() + OrderSwap();
.....
.....
.....