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

 
私はある関数を別の関数の中で使っているのですが、教えてください。outerでは、変数を宣言しています。内部のものでは、使っています。ここでは、約
  string PositionSymboll = "";
   if  (PositionSymboll=PositionGetSymbol(i)){//Возвращает символ соответствующей открытой позиции и автоматически выбирает позицию для дальнейшей работы с ней
    if (PositionGetInteger(POSITION_MAGIC)== MAGIC)//Функция возвращает запрошенное свойство открытой позиции, предварительно выбранной
              { BU_();}}

などなど。このように悪態をつく。 'PositionSymboll' - 未宣言の識別子 Redo.mq5 2472 5

正直、ここで釣果が出るとは思っていませんでした。使っているBU_()関数の中にカプセル化すると、ピリメンが「null」になるんです。どうすればいいのか?

最初の関数の中、ifループの中で宣言するのは、私にとって非常に良いことです。

 
そして、void OnTick()関数の中で宣言しても、コンパイラは、最初の関数ですでに同じことを宣言しているのです。抜けた、抜けた...。
 
Dimka-novitsek:
ああ、あなた!しかも、void OnTick()関数の中で宣言しても、コンパイラは同じように、最初の関数ですでに文句を言うのです!?私はパスです、ちょうど落ちたので...。
void OnStart()
  {
   int i=0; long MAGIC=1234;
   
   string PositionSymboll="";
   if(PositionSymboll=PositionGetSymbol(i))
     {//Возвращает символ соответствующей открытой позиции и автоматически выбирает позицию для дальнейшей работы с ней
      if(PositionGetInteger(POSITION_MAGIC)==MAGIC)//Функция возвращает запрошенное свойство открытой позиции, предварительно выбранной
        { BU_();}
     }
  }
void  BU_(){} 

は正常にコンパイルされますが、コンストラクト

string PositionSymboll="";
   if(PositionSymboll)

という疑問があるのですが、文字列変数でtrue/falseのチェックをしているのでしょうか?

という疑問は暴論です。

 
ありがとうございます!!!私はまだ勉強中で、これがMQL5での最初のEAです。レトリックとはどういう意味ですか?
 
Dimka-novitsek:
ありがとうございます!!!MQL5で初めてのEAなので、勉強中です。レトリックとはどういう意味ですか?

つまり、レスポンスを求めないということです。

if文の式として渡された文字列型変数がfalseを返すのは、その変数が初期化されていない場合だけです。

それ以外の場合は、変数の内容がtrueで出力されます。

 
ありがとうございます!!!
 

関数に送られた価格で保留中の注文が ある場合、trueを返すべき関数があるかどうか教えてください。しかし、「ハゲ」(true/falseの交互)を返します。mql5で注文を処理するロジックがどこにあるのか、教えてください。(学習中なだけ)。


bool OrderExist(double price)                                                                      // функция возвращает наличие ордера на передаваемой цене
{
         
uint total=OrdersTotal();
ulong    ticket;

for(uint i=0;i<total;i++)
   {
   if((ticket=OrderGetTicket(i))>0)      
      {
      if(NormalizeDouble(OrderGetDouble(ORDER_PRICE_OPEN),4)== price)
         {
         return(true);
         }
      }
   }
return(false);
}
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
DMXX:

アドバイスお願いします。私が関数に送った価格で保留中の注文が ある場合、trueを返すべき関数があります。しかし、それは禿げたもの(交互に真/偽)を返します。mql5で注文を処理するロジックがどこにあるのか、教えてください。(学習中なだけ)。

しかし、注文が指定された価格で開いたかどうかは確実ではなく、スリッページがあったかもしれないので、次のようになります:注文が時間通りに開いた場合 - true、開かなかった場合(価格が移動した) - false。

 
fyords:
しかし、設定した価格で注文を開けたということではなく、スリッページが発生した可能性があるため、「時間内に注文を開けた場合-true、時間内に開けなかった(価格が動いた)場合-false」となるのである。
はい、この値段で端末に表示されます。運用中ということは、正常に配置されたということですよね?
 
DMXX:
はい、この値段で端末にぶら下がっています。運用中ということは、正常に配置されているということですよね?

はい、設定されていますが、トリガーされると......。

例えば、保留中の注文が あり、その価格が現在の価格と1ポイント違っていた場合、次のティックで価格が1ポイントではなく、例えば3~5ポイント跳ね上がり、その結果、誤った価格で注文が開始されることになります。わかりやすい例では、ギャップがあります。

それとも、私が質問を理解しておらず、頭が悪いのでしょうか。

理由: