初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 186

 
このサイトで一番良いシグナルインジケーターを教えてください。もちろん無料であればOKです。
 
barabashkakvn:
そして、「歴史に基づいたかなりの計算」がダイナミックな配列に 加算されるのですね。

そんなのあるんですね、はい :)正確には、複数の動的配列が使われるのですが、あまり大きなサイズにならないようにするためです。

また、半分に分割することについてですが、どちらのセグメントを取るか、いくつのインプットを持つかは、あまり違いがないように思います。平均して1日は2500〜3500msで処理されるが、1週間は数分待つ必要がある。今、手元に適当なログがないので、どの程度かわからない。しかし、1日5倍という桁違いの量で、しかもそのほとんどが最後の1〜2日に費やされている。一方、1ヶ月は一晩置いても、朝にはおそらくまだぶら下がっているはずです>.>。

 
Lone_Irbis:


また、半分に分割することについてですが、どのセクションを取るか、何回入力するかはあまり変わらないようです。

1 / 2の比率でフォワードテストを入れる。履歴を自動的に期間分けしてくれます。さらに、手間をかけるだけの価値があるかどうかも見極めることができます。
 
Lone_Irbis:
どこかに「EAが不調になる最も多い理由」みたいな記事ないかなぁ?Strategy TesterのExpert Advisorが、最初は飛んでいるのに、だんだん遅くなるのはなぜですか?致命的というほどの開発段階ではない(基本的な機構や道具の開発には十分な速度がある)。しかし、1週間以上の区間は意味がなく、それ以降はすでに速度がゼロになる傾向があるので、やはり不便です。

その車輪に塗料の入った樽を載せて、必要に応じて後ろに滑らせてみてください。

https://www.mql5.com/ru/forum/14041/page3#comment_605412

Линейное торможение - ошибка программиста или особенность работы MT4?
Линейное торможение - ошибка программиста или особенность работы MT4?
  • www.mql5.com
Такая работа просто убивает возможность оперативной настройки советника.
 
MetaDriver:

ペイントバレルにキャスターをつけ、必要に応じて後ろにスライドさせてみてください。

https://www.mql5.com/ru/forum/14041/page3#comment_605412

それは面白いたとえ話ですね :)ご指摘ありがとうございます。あとは、その樽を見つけるだけだ...。というか、樽ですね。しかし、すでにニュースや抵抗レベルの ハンドラーを漠然と疑っているのですが...。
 
Lone_Irbis:
楽しいたとえ話です :)ご指摘ありがとうございます。あとは樽を探すだけ...。というか、樽ですね。しかし、すでにニュースや抵抗レベルのハンドラーを漠然と疑っているのですが...。
多くの場合、このようなバレルは「時間の始まり」です。エキスパートアドバイザーは、すべてのバー(ティック)で自身の取引履歴(または他の蓄積された情報)を再分析しようとします。
 
最近、パネル作成に再注目しているので、質問です。OBJ_RECTANGLE_LABELと OBJ_LABELの 2つのラベルを作成していますが、OBJ_RECTANGLE_LABELをグラフィック上にドラッグして、OBJ_LABELを正確に1つとしてドラッグできる方法が分かりません。もしかしたら、互いにリンクして、1つのアクションが他の(他のすべての)アクションを引き起こすようなメカニズムがあるのでしょうか?
 
MetaDriver:
多くの場合、そのようなバレルは「時間の始まり」であり、エキスパートアドバイザーがバー(ティック)ごとに再分析しようとする自身の取引履歴(または他の蓄積された情報)です。

О!驚いたことに、文字通り数分で問題が見つかり、修正されたのです。確かに、問題は取引履歴にあり、1ティック ごとにオーバーしていた。当初使用していた「the simplest Expert Advisor for mql5」のコードから継承した関数です。それ以来、いつの間にか忘れ去られていたのです。効いているようなので、わざわざ...と思ってしまいます。明らかに、そのコードの残骸に目を通した方が良いですね :)念のため、同じようなラグでここをググった人がいたら、問題の断片と、この問題を解決しようとした私の創作を掲載します。私のバージョンは、ソースとの関係でどれだけ「正しい」のかはわかりません。おそらく、私が書く他のものとまったく同じクソみたいなコードでしょう。[私はもちろん、気にしない。つまり、もし誰かが下の部分を使おうと思ったら、作者が独学のクソコテであることを考慮に入れてください。しかし、少なくとも、何も壊れていないようですし、ロボットはジェット機のように飛んでいます。)まあ、少なくとも以前と比べれば。トライアル2ヶ月が1分程度で終わったのは、やはり本家の6時間以上とは対照的でいい感じです %)

でした。

// Эта функция вызывалась дважды за каждый тик. С ее помощью записывались две глобальные переменные: 
// с ценой последнего ордера и числом открытых ордеров (да, взятый за исходник код был примером самого простейшего мартина). 
double History(bool LastPrice = false){
   long Ticket, OldTicket = 0, PosID, Magic, Dir;
   double PriceOpen = 0, Count = 0;
   ENUM_DEAL_TYPE CheckDir;
   if(Sell) CheckDir = DEAL_TYPE_SELL; 
   else if(Buy) CheckDir = DEAL_TYPE_BUY;
   
   HistorySelect(0, Now);
   int HistoryTotal = HistoryDealsTotal();
   // Проблемное место было тут: в цикле перебиралась вся история торговли, что в начале немного. 
   // Но даже за сутки счетчик доходил до сотни (не рискну предположить, сколько там набиралось за месяц). 
   // И этот бессмысленный и беспощадный процесс повторялся на каждом тике вообще без всякой на то причины.
   for (int i=0; i < HistoryTotal; i++){ 
      Ticket = (int)HistoryDealGetTicket(i);
      PosID  = HistoryDealGetInteger(Ticket, DEAL_POSITION_ID);
      Magic  = HistoryDealGetInteger(Ticket, DEAL_MAGIC);
      Dir    = HistoryDealGetInteger(Ticket, DEAL_TYPE);
      
      if(LastPrice) { // Этой частью добывалась цена
         if(PosID == PositionID && Magic == MagicNumber && Dir == CheckDir) {
            if(Ticket > OldTicket) {
               PriceOpen = HistoryDealGetDouble(Ticket, DEAL_PRICE);
               OldTicket = Ticket;
            }
         }
      }
      
      else { // А тут оно считало ордера
         if(PosID == PositionID && Magic == MagicNumber) Count++;
      }                              
   }
   
   if(LastPrice) return(PriceOpen);
   else return(Count);
}

なった。

// Вызывается она теперь только в конце функций создания/изменения/закрытия позиций. Если открытых нет - глобальные переменные просто обнуляются.
// Хотя в принципе, если вызывать ее не каждый тик, а только на изменениях, вероятно и старая версия не тормозила бы так уж сильно
void History(){
   long Ticket, PosID, Magic, Dir;
   bool GotPrice = false;
   Total = 0;
   HistorySelect(0, Now);
   int HistoryTotal = HistoryDealsTotal();
   
   // Похоже, что быстрее будет считать с обратного конца
   for(int i=HistoryTotal;i>=0;i--){
      Ticket = (int)HistoryDealGetTicket(i);
      PosID  = HistoryDealGetInteger(Ticket, DEAL_POSITION_ID);
      Magic  = HistoryDealGetInteger(Ticket, DEAL_MAGIC);
      Dir    = HistoryDealGetInteger(Ticket, DEAL_TYPE);
      
      if(PosID == PositionID && Magic == MagicNumber) {
         // Корявую конструкцию заменяем на... другую корявую конструкцию... но она хотя бы компактнее :)
         Total++; 
         if(!GotPrice){
            LastOrderPrice = HistoryDealGetDouble(Ticket, DEAL_PRICE);
            GotPrice = true; // Раз уж нужная цена всегда в начале списка, на ней и остановимся
         }
      }
      // Чтобы не перепахивать всю торговую историю, если номер позиции уже меньше нашего (но больше ноля) - прерываем цикл
      else if(PosID > 0 && PosID < PositionID) break; 
   }
}

とにかく、ありがとうございました :)このヒントがなければ、おそらくまだ長い間、コードの遠いほこりだらけの隅を調べることを思いつかなかったでしょう...。

 
Lone_Irbis:

О!驚いたことに、文字通り数分で問題が見つかり、修正されたのです。確かに、問題は取引履歴にあり、1ティックごとにオーバーしていた。当初使用していた「the simplest Expert Advisor for mql5」のコードから継承した関数です。それ以来、いつの間にか忘れ去られていたのです。効いているようなので、わざわざ...と思ってしまいます。明らかに、そのコードの残骸に目を通した方が良いですね :)念のため、同じようなラグでここをググった人がいたら、問題の断片と、この問題を解決しようとした私の創作を掲載します。私のバージョンは、ソースとの関係でどれだけ「正しい」のかはわかりません。おそらく、私が書く他のものとまったく同じクソみたいなコードでしょう。[私はもちろん、気にしない。つまり、もし誰かが下の部分を使おうと思ったら、作者が独学のクソコテであることを考慮に入れてください。しかし、少なくとも、何も壊れていないようですし、ロボットはジェット機のように飛んでいます。)まあ、少なくとも以前と比べれば。トライアル2ヶ月が1分程度で終わったのは、やはり本家の6時間以上とは対照的でいい感じです %)

でした。

なった。

とにかく、ありがとうございました :)このヒントがなければ、おそらくまだ長い間、コードの遠いほこりだらけの隅を調べることを思いつかなかったでしょう...。

OK
 
paladin800:
最近、パネル作成に再注目しているので、質問です。OBJ_RECTANGLE_LABELと OBJ_LABELの 2つのラベルを作成していますが、OBJ_RECTANGLE_LABELをグラフィック上にドラッグして、OBJ_LABELを正確に1つとしてドラッグできる方法が分かりません。もしかしたら、お互いに束縛しあって、片方にアクションを起こすと、もう片方(他全部)にも同じアクションを起こすような仕組みになっているのでは?

そのような仕組みはないので、自分で作るしかない。 幸い、それほど難しいことではないのだが。でも、ちょっと手間がかかりますね。

頑張ってください。

理由: