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

 
MrBrooklin #:

こんにちは、アレクセイ。変数pos_total=PositionsTotal()は、グローバルレベルで設定されていました。今、私はそれを関数の中に移動し、それが問題であったことが判明しました。すべてうまくいきました。何が問題なんだ?冗談が全く理解できません!

試しに、pos_totalをグローバルレベルに移動してみたら、また動かなくなった!少なくとも僕にとっては!)))

グローバルレベルの変数は、関数では初期化できないのですね?そうなんですか?

ありがとう、ウラジミール。

できる場合もありますが、すべての変数ができるわけではありません。この場合、EAを実行すると、オープンポジションはまだ表示されず、変数はゼロに等しくなります。

実は昨日、ポジションサンプリングの実験を行い、PositionsTotal()はポジション数を決定するためだけに必要で あるという結論に達しました。そして、この数はループを制限するためだけに必要なのだ。

以下はそのようなループである。

  int i = 0;
  while(bool(posTicket = PositionGetTicket(i)) && !IsStopped())
   {
    string posSymbol = PositionGetString(POSITION_SYMBOL);
    double posPrice = PositionGetDouble(POSITION_PRICE_OPEN),
           pos_tp = PositionGetDouble(POSITION_TP),
           pos_sl = PositionGetDouble(POSITION_SL);
    printf("%s Ticket %d цена = %g тейк-профит = %g стоп-лосс = %g", posSymbol, posTicket, posPrice, pos_tp, pos_sl);
    i++;
   }


は、その前に履歴から注文や取引のリストを取得しても機能する。そのうち、未決注文の選択が邪魔にならないかチェックするつもりだ。


そして、あなたの場合、ループなしで書くほうが簡単です。

      PositionGetTicket(PositionsTotal()-1); // получим тикет позиции

最後のポジションが必要なら

 
Alexey Viktorov #:
この場合、EAを起動してもオープンポジションは表示されず、変数はゼロに なります。

pos_total変数をグローバルレベルに置くと、テスト期間中に50以上のポジションがオープンされたにもかかわらず、EAにはオープンポジションが表示されませんでした。理解できません!このオプションは機能しないのでしょうか?

よろしくお願いします。

 
Alexey Viktorov #:

あなたの場合、ループなしで書く方が簡単です。

最後の位置が必要なら

違うシンボルで違う方向に複数のポジションを開いていなければ、そう思います。つまり、買いと売りです。でも、とにかくヒントをありがとう!

ありがとう、ウラジミール。

 
MrBrooklin #:

違うシンボルで違う方向に複数のポジションが開いていなければ、そう思う。つまり、買いと売りだ。でも、とにかくヒントをありがとう!

ウラジミール、ありがとう。

ポジションがいくつ開いているか、北に行くか北に行くか、あるいはファックに行くか、あるいは全方向に一度に行くか......最後のものはPositionsTotal()- 1になります。

 
Alexey Viktorov #:

オープンしているポジションの数や、北にオープンしているか、北にオープンしているか、全方向に一度にオープンしているかは関係ありません...最後のものはPositionsTotal()- 1になります。

こんにちは、アレクセイ。あなたはいつも正しい!)))

ありがとう、ウラジミール。

 
Alexey Viktorov #:

実は昨日、ポジション・サンプリングの実験をして、PositionsTotal()はポジション数を決定するためだけに必要 だという結論に達した。そして、この数はループを制限するためだけに必要なのだ。

以下はそのようなループである。


は、その前に履歴から注文や取引のリストを取得しても機能する。先日、未決注文の選択が邪魔にならないかチェックしてみる。

ここにも微妙な点がある。

リストが本当に大きく、何らかの基準で順序付けされている場合、ループ内のすべての要素を検索するのではなく、半分に分割して必要な要素を検索する方が有益な場合があります。

 
JRandomTrader #:

ここにも繊細さがある。

リストが本当に大きく、何らかの基準で順序付けされている場合、すべての要素をループするのではなく、半分ずつ分割して必要な要素を探す方が有益な場合がある。

この関数がまったく役に立たないとは言っていない。しかし、場合によっては関数を使わなくてもいいし、使わなくてはならないこともある。結局のところ、どの関数も時間なのだ。ブレーキがかかるまで少しずつ入力すればいい......。

 
MrBrooklin #:

こんにちは、アレクセイ! 私は間抜けだった。君はいつも正しいよ!)))

ありがとう、ウラジーミル

私は正しいのですが、あなたが書いたような関数が、異なるシンボルで複数の取引がオープンされた場合、正しく機能しないことを明記していませんでした。

あなたがチェックするのは最後の 1つだけ であり、それ(最後の1つ)は別のシンボルでオープンすることができるからです。

 
Aleksandr Slavskii #:

そうですね。でも、あなたが書いたような関数が、異なるシンボルで複数の取引がオープンされた場合に正しく機能しないことは明記していませんでした。

あなたがチェックするのは最後の 1つだけ で、それ(最後の1つ)は別のシンボルで建てることができるからです。

アレクサンダーさん、こんにちは。このトピックについてはすでに考えていたのですが、コード内で異なるシンボルのポジションが存在する場所に到達していないため、まだここで質問を始めていません。ヒントをありがとう!))今、私は一点でつまずいているのだが、自分の努力で「完成」させたいという執拗な欲求があるので、ここで公開レビューに持ち込むのは避けたい。

ところで、私のいわゆる「つまずき」は、すべてこのような目に見えない些細なところにあることに気づいた。例えば、アルテム・トリシキンが教えてくれたスペシファイア。こんな些細なことなのに、なぜスクリプトが動かないのか、私は頭を抱えてしまった。あるいは同じリンク&。そのために多くの時間を失った。一般的には、まだ学ぶこと、学ぶこと、学ぶこと、そしてロシア語で - ドキュメントを読むこと、読むこと、読むこと。

よろしく、ウラジミール。

 
こんにちは!


私はネット取引口座を持っています。

Expert Advisorでは、以下のコードを使って取引を制御しています:

HistorySelect(0,TimeCurrent());
ulong ticket = OrderGetTicket(0);
N_deals = HistoryDealsTotal();

しかし、終了した取引の数も推定する必要があります。
DEAL_ENTRY_OUT モディファイアを使う必要があると思います。
しかし、その使い方がわかりません。

助けてください。

よろしくお願いします。


理由: