エラー、バグ、質問 - ページ 3155

 
murziks #:


メタトレーダーがcsvの代わりに読み取れるものは何か教えてください。

バイナリーファイルは読み書きが可能です。変数、構造体、配列これらはすべてファイルに書き込まれ、読み返される。

 

携帯端末 開発者の皆様、もう「メール」タブのメールの扱いを直してください。

モバイル端末(Android)の最新ビルド以前は、アカウントに接続すると、「メール」タブに過去に何度も削除されたメールがいっぱい表示されます。

アカウントに再接続するとすぐに、メールタブに以前削除したメールと未削除のメールが乱雑に表示されるんだ。どうすればいいのでしょうか?

 

PC用端末の「ツール>設定>取引履歴の表示」、チェックボックスの任意の値で「PCM>取引履歴」、「F8>取引履歴の表示」を通じて取引履歴の表示を有効/無効にできる場合、どのように変化するか教えてください。

つまり、端末の 一般設定で取引履歴の表示を無効にしておけば邪魔にならないし、一方、チャート設定で有効にするかPCMを使えばどのチャートでも表示される。その理屈は理解できない。

 

PC端末の開発者の皆様へ。以前から、チャートプロファイル(テンプレートではなく、あくまでプロファイル)を扱う場合、プロファイルを変更すると、それを手動で指示しなくても自動的に保存されてしまうという不思議なロジックがありました。

ユーザーによるプロファイル設定の ミスや端末の不具合により、設定しにくいワークスペースがかぼちゃになる。

ユーザーが手動でプロファイルを保存するまで、プロファイルに加えられた変更は保存されないようにすることはできませんか(最後に作業したプロファイルではなく、一時的なプロファイルファイルに保存されるようにする)。

私たちは、TradingViewのような内蔵インターフェースの変更を何年も待っていました。おそらく、あなたにとって難しいことではなく、ユーザーにとって非常に便利なものだと思います。

 

例えば、"profit in pips tospeed up calculations"のチェックボックスがあるテストでは15%のドローダウン、このチェックボックスがないテストでは93%のドローダウンと、なぜこのような違いがあるのでしょうか?

どちらの結果がより正しいのでしょうか?

取引回数は同じ

同時に最初のケースでは、同じロットで2ポンド、2番目の20ポンドの利益が発生しました。

ロットを変えれば見えるのと同じで、10円の違いでもある。

 
ありがとうございます。を使いたくはないでしょう。
 
MQの サーバーから暗号通貨が消えました。劣化、悲しみ、悔しさ。
 

Generic/Queueのエラー。

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

[POSSIBLE ERROR] CQueueコンテナのクラス

Loris De Marchi, 2022.02.14 13:00

みなさん、こんにちは!!!

少なくともCQueue::Contains(T item)とCQueue::Remove(T item)のメソッドではエラーが発生していると思われます。

キューは古典的なヘッドテール循環システムで管理されているので、このコードは間違っているはずです。

 //+------------------------------------------------------------------+
//| Removes all values from the CQueue<T>.                           |
//+------------------------------------------------------------------+
template < typename T>
bool CQueue::Contains(T item)
  {
   int count=m_size;
//--- try to find item in array
   while (count--> 0 )
     {
       //--- use default equality function
       if (::Equals(m_array[count],item))
         return ( true );
     }
   return ( false );
  }

また、上記のメソッドの記述が正しくないことから、このクラスを作成する際に何らかのミスがあったのではないかと思われます。


例えば、この単純なコードを実行すると、Removeメソッドは明らかに失敗します。

   CQueue< ulong > foo;
   foo.Enqueue( 1 );
   foo.Remove( 1 );
   foo.Enqueue( 2 );
   printf (foo.Contains( 2 ));

明らかにキューに入っているのに "false "と表示される...。


このクラスが修正されたのか、それとも私のものを使った方がいいのか、教えてください。

ありがとうございます。


 

こんにちは。 MQLの配列は、順インデックスと逆インデックス(直列)の両方が可能であることが分かっています。そこで質問なのですが、MQLで配列を扱う場合、直列インデックスや逆インデックスが必要な場合、どのような方法があるのでしょうか?シリーズのインデックスによる値を取得する最初のバリエーションは、次のようになります。

double arrayValue(const double array[], conct int shift) {
  int len = (int)array.Size();
  if (shift < 0 || shift >= len)
    return WRONG_VALUE;
  return array[len - shift - 1];
}

2つ目の方法は、ArraySetAsSeriesを 使用する方法です。

double arrayValue(double &array[], conct int shift) {
  int len = (int)array.Size();
  double ret;
  if (shift < 0 || shift >= len)
    return WRONG_VALUE;
  if (!ArraySetAsSeries(array, true))
    return WRONG_VALUE;
  ret = array[shift];
  ArraySetAsSeries(array, false);
  return ret;
}

もちろん、何かを断言するわけではありませんが、ArraySetAsSeriesは単に配列フラグのseriesをオンに するだけなので、最初の例のようにインデックスによる値へのアクセスが 発生するのだと思われます。

double arrayValue(const double array[], conct int shift) {
  int len = (int)array.Size();
  if (shift < 0 || shift >= len)
    return WRONG_VALUE;
  return array[len - shift - 1];
}

そして、インデックスによる値のアドレス指定は、おおよそこのように処理されます。

OnCalculate indicator handlerに毎回series for arraysを入れるのは意味があるのか、それともarrays rates_totalの長さを使ってlow barに対応した方が良いのか?

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[]) 
{
  Print(price[rates_total-1]); // получение цены на младшем баре без использования серии
  return(rates_total);
}

この2つの方式は速度が同等なのか、それとも私の推理に間違いがあるのか?

 

ターミナルは、クローズしたポジションの 累積利益を返しません。どこに問題がありそうなのか、教えてください。

double GetClosedPositionsInstrumentProfit(string symbol, datetime from) 
{
   HistorySelect(from, TimeCurrent());

   double profitSum = 0;

      for (int i = HistoryDealsTotal()-1; i >= 0; i--) 
    {   
      ulong ticket = HistoryDealGetTicket(i);
      if (ticket < 0) continue; 
      long magic = HistoryDealGetInteger(ticket, DEAL_MAGIC);
      if (magic != EXPERT_MAGIC) continue; 
      string positionSymbol = HistoryDealGetString(ticket, DEAL_SYMBOL);
      if (symbol != positionSymbol) continue; 
      
      double profit = HistoryDealGetDouble(ticket, DEAL_PROFIT) + HistoryDealGetDouble(ticket, DEAL_SWAP)+ HistoryDealGetDouble(ticket, DEAL_COMMISSION);
      profitSum += profit; 
         
      Print ("Profit " + DoubleToString(profitSum,2));              
    }         
   return profitSum;
}