MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 805

 
Sfinks35:
こんにちは。
私は今、それを手に入れたようです。

しかし、コンパイル時に、「ライン上での型変換により、データが失われる可能性が ある」という警告が1つ出ます。
index = GetPatt5barsDN(index);

コンパイル時に関数ヘッダ(または関数自体)にエラーはない。

double low3 = 0;
   int index = 0;
   low3 = GetPatt5barsDN(index); // Здесь передача значения по ссылке

   Print("low3= ", low3);
   Print("index= ", index);
 

はじめまして、質問があります。最適化の際に、あるパスをスキップする方法はありますか?

例えば、2つのMA(fastとslow)を使ってロボットを最適化する場合、それぞれ10個から始めて1000個で終了させます。

遅いパスの周期が速いパスの周期より短い場合、パスをスキップするにはどうすればよいですか?

 
Roman Sharanov:

はじめまして、質問があります。最適化の際に、あるパスをスキップする方法はありますか?

例えば、2つのMA(fastとslow)を使ってロボットを最適化する場合、それぞれ10個から始めて1000個で終了させます。

遅いパスの周期が速いパスの周期より短い場合、パスをスキップするにはどうすればよいですか?

この場合、初期化中に return(INIT_PARAMETERS_INCORRECT) を実行してください。

 
Igor Zakharov:

この場合、初期化時に return(INIT_PARAMETERS_INCORRECT) を実行するようにしてください。

しゃい

 

こんにちは。誰が教えてくれるんだ。3種類のTS、3種類のEAで、3種類のマジックナンバーで、異なるペアで。しかし、これらは共通の特徴を持っています - 特定の条件(注文 数と小さな利益)に達したときに(OrderClose()関数を使用して)注文を閉じることです。テスターでは問題ないのですが、実際には、あるペアでOrder Close()関数がトリガーすると、条件を満たすかどうかに関わらず、他のペアでもこの関数(OrderClose())がトリガーする印象があります。この原因は何でしょうか? ユーザー定義のClose()関数でしょうか?

以下は、終了条件とカスタムClose()関数です。

if(CountBuy() >= 1 && CountSell() >= 1 && CountSymbolTotal() >= NumberOrder)
   {
      int    i;
      int    total    = OrdersTotal();
      double accruals = CalculateCommission() + CalculateSwapBuy() + CalculateSwapSell();
   
      if((CountProfitBuy() + CountProfitSell()) >= (MaxOrderProfit*GetLots()+ accruals))
      {
         for(i = total-1; i >= 0; i--)
         {
            if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            {
               if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
               { 
                  if(OrderType() == OP_BUY)
                     OrderCloseX();
               }
            }
         } 
         for(i = total-1; i >= 0; i--)
         {
            if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            {
               if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
               { 
                  if(OrderType() == OP_SELL)
                     OrderCloseX();
               }
            }
         }            
      }
   }
//---------------------
void OrderCloseX()
{
   int i;
   int ticket = -1;
   int k      = OrdersTotal();
   
   for(i = k - 1; i >= 0; i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if((OrderType() == OP_BUY || OrderType() == OP_SELL) )
         {            
            ticket = OrderTicket();
         }
      }
   }
   if(OrderTicket() != ticket) 
      if(!OrderSelect(ticket, SELECT_BY_TICKET))
         Print("Ошибка в выборе ордеров!");

   while(true)
   {
      int  error;
      bool result = true;
      
      if (OrderType()==OP_BUY) 
         result = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), Slippage, 0);
         
      if (OrderType()==OP_SELL) 
         result = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), Slippage, 0);
         
      if(result != TRUE) 
      { 
         error = GetLastError(); 
            Print("LastError = ", error); 
      }
      else 
      { 
         error = 0; 
      }
      if(error == 135) 
         RefreshRates();
      else break;
   } 
}

 
Youri Lazurenko:

こんにちは。誰が教えてくれるんだ。3種類のTS、3種類のEAで、3種類のマジックナンバーで、異なるペアで。しかし、これらは共通の特徴を持っています - 特定の条件(注文 数と小さな利益)に達したときに(OrderClose()関数を使用して)注文を閉じることです。テスターでは問題ないのですが、実際には、あるペアでOrder Close()関数がトリガーすると、条件を満たすかどうかに関わらず、他のペアでもこの関数(OrderClose())がトリガーする印象があります。この原因は何でしょうか? もしかしたら、ユーザー定義のClose()関数にあるのでしょうか?

以下は、終了条件とユーザー定義のClose()関数です。

まず、OrderSelect()で注文をチェックするのは、本来であれば、シンボルと注文マスター番号を制御して、OrderCloseX()で注文を閉じて、再度注文を検索しますが、OrderSelect()ではシンボルとマスター番号を制御しないのは、なぜでしょうか

コード全体を書き換えないためにも、OrderCloseX()を追加した方がいいと思います。

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
 
Igor Makanu:

まず、OrderSelect() で注文をチェックし、シンボルと注文マスター番号を管理し、次に OrderCloseX() で注文を閉じ、再び注文を検索しますが、何らかの理由で OrderSelect() でシンボルとマスター番号を管理しません。

すべてのコードを書き直さないために、OrderCloseX()を追加する必要があると思います。

ありがとうございます。訂正させていただきます。すでに修正済み。おそらくこれが原因でしょう。OrderCloseX()関数がペアの1つで呼び出され、それが他のすべてのペアとマジックナンバーで機能します。そうかもしれない、そうかもしれない。いつもありがとうございます。

 
Igor Makanu:

桁数 - 定義済み変数

また、この関数を使うことにしたのですが、例えば1.00000のように事務所の桁数が5で、最後の値がゼロの場合、5桁ではなくゼロを返すかもしれない、例えば1.24700のように見える数値は小数点以下が5であるはずなのに、3桁を返すかもしれないと読んだのですが本当でしょうか。

 
Seric29:

また、この関数を使うことにしたのですが、安定した5文字の桁数、例えば1.00000で最後の値が0の場合、5文字ではなく0を返すことがあるとか、例えば1.24700のように見える数字が、5文字のはずなのに小数点3桁で返すとか書いてありましたが、本当ですか?

桁は NormalizeDouble で使用します。

https://docs.mql4.com/ru/convert/normalizedouble

NormalizeDouble - Преобразование данных - Справочник MQL4
NormalizeDouble - Преобразование данных - Справочник MQL4
  • docs.mql4.com
Рассчитываемые значения StopLoss, TakeProfit, а также значения цены открытия отложенных ордеров, должны быть нормализованы с точностью, значение которой можно получить функцией Digits(). Нужно...
 
突然、すべての端末がブローカーと接続できなくなったのだ。どこもかしこも接続に失敗しています。
ログイン画面では、サーバーを選択することができず、空白になっています。今まで何も変えていないし、何もインストールしていないし、何も削除していない。
その理由は何ですか?