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

 
Vladimir Karputov:

ポイントは変わりません。あなたは、すべてのティックでチケット「0」を持つ 保留中の注文を削除 しようとしているのです。

あと、全てのティックに「0」のティックがついた保留注文があるとか言ってる人?保留中の注文がいくつあるか確認しましたか?そして、なぜそれを知っているのか......?

どのティックで "0 "なのか?OrderGetTicket(0) は、チケット 0 の注文が選択されたことを意味するのではなく、インデックス 0 の保留中の注文のリストからチケット注文を返します。

 
ascerdfg:


おそらく、もっと具体的なタスクが必要なのでしょう。

例えば、マジックが "1 "の保留中の注文が あれば、それを削除します。

この場合、実装は以下のようになります。

#include <Trade\Trade.mqh>

CTrade trader;
int OnInit()
  {

   trader.SetExpertMagicNumber(1);

   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
  {
//---
  
  }
void OnTick()
  {
   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
      if(OrderGetTicket(i)>0)     // selects the pending order by index for further access to its properties
         if(OrderGetInteger(ORDER_MAGIC)==1)
            trader.OrderDelete(OrderGetTicket(i));
  }

すべての保留中の注文をループで処理

保留中の注文が正常に選択された場合(戻り値は0より大きいチケットです)

選択した保留注文のマジック値が "1 "の場合

削除する

 
Alexey Viktorov:

どのチケットで「0」なのか?OrderGetTicket(0) は、チケット 0 の注文が選択されたことを意味するのではなく、インデックス 0 の保留中の注文のリストから、その注文のチケットを返します。

はい、その通りです。

 

2004年から今日までの30文字分のテスターを動かすのに必要なRAMの容量を教えてください。

テスターでは足りないと言っていますが、どれくらい必要かは書いてありません。

 
Igor Zakharov:

2004年から今日までの30文字分のテスターを動かすのに必要なRAMの容量を教えてください。

テスターでは足りないと言っているが、どの程度かは書いていない。

2キャラクター、5キャラクターを走らせる ...

 
Vladimir Karputov:

2キャラクター、5キャラクターを走らせる ...

そんなことより、このようなテストを可能にするためには、どれくらいのメモリを買えばいいのでしょうか?

以下は、あるシンボルについての結果です(始値モードのログより)。

264  Mb memory used including 6 Mb of history data, 64  Mb of tick data

2.はこちら

271 Mb memory used including 12 Mb of history data, 64 Mb of tick data

3:

1038  Mb memory used including 12 Mb of history data, 832 Mb of tick data

そして、こちらが4。

1450 Mb memory used including 18 Mb of history data, 1216  Mb of tick data

飛躍的に 伸びましたね :)刻みがほぼ同じなので、ロジックをたどることができない。

EURUSD,H1: 21470549 ticks, 94233 bars generated. 63097850 total ticks for all symbols
EURUSD: generate 21470549 ticks in 0:00:05.375, passed to tester 21470549 ticks
USDCAD: generate 20302871 ticks in 0:00:05.062, passed to tester 20302871 ticks
USDJPY: generate 21324430 ticks in 0:00:05.641, passed to tester 21324430 ticks
1450 Mb memory used including 18 Mb of history data, 1216 Mb of tick data

20文字以上という報告はよく見かけますが、テラバイトのRAMを使っている人がいるとは思えません。もしかしたら、秘密があるのかも?

 

インジケーターのグラフィックバッファの数を設定することは可能ですか?

また、2つ目の質問ですが、RAMを節約するためにExpert Advisorが使用するインディケータを強制的に再初期化することは可能でしょうか?

 
Aleksey Vyazmikin:

インジケーターのグラフィックバッファの数を設定することは可能ですか?

また、2つ目の質問ですが、RAMを節約するためにExpert Advisorが使用するインディケータを強制的に再初期化することは可能でしょうか?

プロパティ indicator_plots に記載されている indicator_plot の数を減らすことは可能で、私も実行しました。しかし、それを増やすことはほとんど不可能です。しかし、この減少はメモリの節約にはつながりません。やはり、バッファは残ります。INDICATOR_DATAからINDICATOR_CALCULATIONSに転送されるだけで、それ以上はない。

 
Alexey Viktorov:

プロパティindicator_plotsに記載されているのは減らすことができます、私はそうしました。しかし、増やすことはできそうにありません。しかし、この削減ではRAMを節約することはできません。やはり、バッファは残りますね。INDICATOR_DATAからINDICATOR_CALCULATIONSに転送されるだけで、それ以上はない。

ご返信ありがとうございました。バッファの数の化粧直しは、残念ながら関係ありません。

 

OnInit()ブロックで3つのタイムフレームからMACDインディケータのハンドルを取得したいのですが、チャート上ではうまくいきますが、テスターではうまくいかず、ターミナルが固まります。 存在しないデータを取得したいのですね。対処法をアドバイスしていただけませんか?


//+------------------------------------------------------------------+
//|                                                        Test.mq5  |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

//--- Количество периодов торгуемых символов
#define  NUMBER_OF_PERIODS 3

ENUM_TIMEFRAMES Periods[NUMBER_OF_PERIODS]={PERIOD_M1,PERIOD_M2,PERIOD_M3};
int handles[NUMBER_OF_PERIODS];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ArrayInitialize(handles,INVALID_HANDLE);
      for(int p=0; p<NUMBER_OF_PERIODS; p++)
        {
         if(handles[p]==INVALID_HANDLE)
           {
            handles[p]=iCustom(NULL,Periods[p],"Examples\\MACD");
            Print(handles[p]);
            if(handles[p]==INVALID_HANDLE)  Print("Не удалось получить хэндл индикатора для символа !");
           }
        }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
理由: