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

 
Alexey Kozitsyn:
はい、入力パラメータを変更することはできません。正直なところ、なぜこの値を3/5桁の相場に従って変更する必要があるのか理解できません。この値は、入力パラメーターで設定します。わざわざ100(3/5桁の場合)と書くのはダメなんですか?

実際、私は5桁で最適化し、より多くの履歴を残しますが、4桁で取引し、ポイントも含めて設定を使い分けています。設定を混乱させたくない--そんな思いから、このような解決策をとりました。

 
-Aleks-:

実際、私は5桁で最適化し、より多くの履歴を残しますが、4桁で取引し、ポイントも含めて設定を使い分けています。設定を混乱させたくない--そんな思いから、このような解決策をとりました。

このように動作するはずです。

int Sign = 1;

int OnInit() {
// Округлим огрызки - 3 и 5 знак
Sign=(SymbolInfoInteger(_Symbol,SYMBOL_DIGITS)==3 || SymbolInfoInteger(_Symbol,SYMBOL_DIGITS)==5)?10:1;
// Приведем к терминальному количеству знаков
TakeProfit*=Sign;
StopLoss*=Sign;
TrailingShift*=Sign;
TrailingStep*=Sign;
Slippage*=Sign;
}
 
Vitaly Muzichenko:

これは動作するはずです

int Sign = 1;

int OnInit() {
// Округлим огрызки - 3 и 5 знак
Sign=(SymbolInfoInteger(_Symbol,SYMBOL_DIGITS)==3 || SymbolInfoInteger(_Symbol,SYMBOL_DIGITS)==5)?10:1;
// Приведем к терминальному количеству знаков
TakeProfit*=Sign;
StopLoss*=Sign;
TrailingShift*=Sign;
TrailingStep*=Sign;
Slippage*=Sign;
}


ありがとうございます。EAを立ち上げられたら早速試してみようと思います...。

 

また、このようなエラーが発生するのですが、どうすれば修正できますか?

'MODE_MAIN' - 列挙体識別子は既に定義されています initmql4__1.mqh 223 24


 ENUM_STO_PRICE StoFieldMigrate(int field)


  {
   switch(field)
     {
      case 0: return(STO_LOWHIGH);
      case 1: return(STO_CLOSECLOSE);
      default: return(STO_LOWHIGH);
     }
  }

//+------------------------------------------------------------------+
enum ALLIGATOR_MODE  { MODE_GATORJAW=1,   MODE_GATORTEETH, MODE_GATORLIPS };
enum ADX_MODE        { MODE_MAIN,         MODE_PLUSDI, MODE_MINUSDI };
enum UP_LOW_MODE     { MODE_BASE,         MODE_UPPER,      MODE_LOWER };
enum ICHIMOKU_MODE   { MODE_TENKANSEN=1,  MODE_KIJUNSEN, MODE_SENKOUSPANA, MODE_SENKOUSPANB, MODE_CHINKOUSPAN };
enum MAIN_SIGNAL_MODE{ MODE_MAIN,         MODE_SIGNAL };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CopyBufferMQL4(int handle,int index,int shift)
  {
   double buf[];
   switch(index)
     {
      case 0: if(CopyBuffer(handle,0,shift,1,buf)>0)
         return(buf[0]); break;
      case 1: if(CopyBuffer(handle,1,shift,1,buf)>0)
         return(buf[0]); break;
      case 2: if(CopyBuffer(handle,2,shift,1,buf)>0)
         return(buf[0]); break;
      case 3: if(CopyBuffer(handle,3,shift,1,buf)>0)
         return(buf[0]); break;
      case 4: if(CopyBuffer(handle,4,shift,1,buf)>0)
         return(buf[0]); break;
      default: break;
     }
   return(EMPTY_VALUE);
  }
//+------------------------------------------------------------------+

 
-Aleks-:

このような状況で、私はエラーが発生します - エラーが発生する理由を理解するのに役立ちます - MQL5では、ユーザーが入力した変数の値を変更することはできません?

無理だ!

MQL4_to_MQL5.mqhを使うことにしたのなら、それはしないことを強くお勧めします。ライブラリの説明の中にある、例のために書かれたものだからです。つまり、まったく普遍的ではないのです。特に、MarketInfoの非常に限定されたバージョン(例題を動作させるためだけのもの)があります。しかし、良い解決策はある。ですから、このmqhそのものを使うのではなく、そこから有用なものだけを取り出した方がいいのです。

 
-Aleks-:

また、このようなエラーが発生するのですが、どうすれば修正できますか?

'MODE_MAIN' - 列挙体識別子は既に定義されています initmql4__1.mqh 223 24


 ENUM_STO_PRICE StoFieldMigrate(int field)


  {
   switch(field)
     {
      case 0: return(STO_LOWHIGH);
      case 1: return(STO_CLOSECLOSE);
      default: return(STO_LOWHIGH);
     }
  }

//+------------------------------------------------------------------+
enum ALLIGATOR_MODE  { MODE_GATORJAW=1,   MODE_GATORTEETH, MODE_GATORLIPS };
enum ADX_MODE        { MODE_MAIN,         MODE_PLUSDI, MODE_MINUSDI };
enum UP_LOW_MODE     { MODE_BASE,         MODE_UPPER,      MODE_LOWER };
enum ICHIMOKU_MODE   { MODE_TENKANSEN=1,  MODE_KIJUNSEN, MODE_SENKOUSPANA, MODE_SENKOUSPANB, MODE_CHINKOUSPAN };
enum MAIN_SIGNAL_MODE{ MODE_MAIN,         MODE_SIGNAL };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CopyBufferMQL4(int handle,int index,int shift)
  {
   double buf[];
   switch(index)
     {
      case 0: if(CopyBuffer(handle,0,shift,1,buf)>0)
         return(buf[0]); break;
      case 1: if(CopyBuffer(handle,1,shift,1,buf)>0)
         return(buf[0]); break;
      case 2: if(CopyBuffer(handle,2,shift,1,buf)>0)
         return(buf[0]); break;
      case 3: if(CopyBuffer(handle,3,shift,1,buf)>0)
         return(buf[0]); break;
      case 4: if(CopyBuffer(handle,4,shift,1,buf)>0)
         return(buf[0]); break;
      default: break;
     }
   return(EMPTY_VALUE);
  }
//+------------------------------------------------------------------+

リネームする。全ての列挙者のフィールドは異なるものでなければならない。そして、enum ADX_MODEenum MAIN_SIGNAL_MODE には同じフィールドがありますね。
 
fxsaber:
リネームする。ALL列挙のフィールドは、異なるものである必要があります。そして、enum ADX_MODEenum MAIN_SIGNAL_MODE には同じフィールドがありますね。

とりあえずコメントアウトしておきました...。致命的とは思わないが...。

しかし、取引関数と その他の関数の翻訳の2つのライブラリを使用してEAを4から5へコンパイルしました。

5のテスターにはまだうんざりしています。可視化で指標を追加できる場所や、ログをフィルタリングする方法が見つかりません...。

オープンオーダーはまだ見れないのか、えらいこっちゃ。

 

どう解釈するか。

2016.11.04 20:42:25.224 2016.02.11 14:04:30 保留設定時 不測のエラー - 4756
2016.11.04 20:42:25.224 2016.02.11 14:04:30 Magic=49266773 cPoza::setOrder は注文を設定する要求を送信しました。タイプ:BuyStop lot=1.0 opPrice=68180.0 tp=68200.0 sl=67260.0
2016.11.04 20:42:25.224 2016.02.11 14:04:30 failed buy stop 1.00 RTS-12.16 at 68180 sl: 67260 tp: 68200 [Invalid expiration] 無効期限切れ。
2016.11.04 20:42:25.224 2016.02.11 14:04:30 保留設定時 不測のエラー - 4756

 
-Aleks-:

どう解釈するか。

2016.11.04 20:42:25.224 2016.02.11 14:04:30 保留設定時 不測のエラー - 4756
2016.11.04 20:42:25.224 2016.02.11 14:04:30 Magic=49266773 cPoza::setOrder は注文を設定する要求を送信しました。タイプ:BuyStop lot=1.0 opPrice=68180.0 tp=68200.0 sl=67260.0
2016.11.04 20:42:25.224 2016.02.11 14:04:30 failed buy stop 1.00 RTS-12.16 at 68180 sl: 67260 tp: 68200 [Invalid expiration] 無効期限切れ。
2016.11.04 20:42:25.224 2016.02.11 14:04:30 保留設定時 不測のエラー - 4756

有効期限の設定に問題がある。
 
-Aleks-:

今のところ、5つのテスターにうんざりしています。指標を可視化に追加できる場所とログをフィルターする方法が見つかりません。

オープンオーダーを見る方法はまだないのか、えー。

テスターの履歴を見るために、2006年のMT4コンバートスクリプトを使っています。MT4と同じようにすべてを便利に表示してくれる。
理由: