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

 
MrBrooklin #:

今、手に入れた。ありがとう!少なくとも1つのオープンポジションがあれば、エラーコード4753は表示されないことがわかりました。

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

次のように書くと表示されます。

PositionSelect("мой символ");
 
Alexey Viktorov #:

次のように書くと表示される。

こんにちは、アレクセイ。ループの代わりにPositionSelect() を使う必要があるのでしょうか?

ウラジミール。

 
MrBrooklin #:

こんにちは、アレクセイ。ループの代わりにPositionSelect() を使う必要があるのでしょうか?

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

存在しない文字を書くとエラーになります。

 
Alexey Viktorov #:

どのように書いても構わない。主なことは、存在しない文字を書くとエラーになるということだ......。

でも、スリッパは投げないでね!!!エラーコードが出ない。((((

void OnStart()
  {
   ResetLastError(); // установим значение предопределенной переменной _LastError в ноль
   string symb = "BrooklinUSDrfd";
   PositionSelect(symb);
   PrintFormat("Не удалось выбрать позицию по символу %s. Ошибка = ", symb, GetLastError());
  }

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

 
MrBrooklin #:
エラー = "
lu指定子があるはずです。
 
Artyom Trishkin #:
そこに指定子があるはずだ

アルテム、ありがとう!本当にありがとう!

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

 

要するに、ここに 書かれている問題を別の方法で解決したのだ:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ResetLastError(); // установим значение предопределенной переменной _LastError в ноль
   if(!PositionSelect(_Symbol))
      PrintFormat("Не удалось выбрать позицию по символу %s. Ошибка = %lu", _Symbol, GetLastError());
   int pos_total = PositionsTotal(); // объявим переменную для хранения количества открытых позиций
   if(pos_total > 0) // если есть открытые позиции
     {
      for(int i=0; i<pos_total; i++) // запустим цикл и переберём все открытые позиции
        {
         if(PositionGetSymbol(i) == _Symbol) // выберем все открытые позиции по текущему символу
           {
            ulong  pos_id = PositionGetInteger(POSITION_IDENTIFIER);
            double pos_price = PositionGetDouble(POSITION_PRICE_OPEN);
            double pos_tp = PositionGetDouble(POSITION_TP);
            double pos_sl = PositionGetDouble(POSITION_SL);
            PrintFormat("Позиция #%d цена = %G тейк-профит = %G стоп-лосс = %G", pos_id, pos_price, pos_tp, pos_sl);
           }
        }
     }
  }
//+------------------------------------------------------------------+

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

 

皆さんこんばんは!

既存のオープンポジションに 追加ポジション(ストップ&テイクなし)をオープンする関数を作ろうとしています。コードを書きました:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Open_Add_Pos_Buyl()
  {
   for(int i=pos_total-1; i<pos_total; i++) // ищем последнюю по списку открытую позицию
     {
      PositionGetTicket(i); // получим тикет позиции по индексу в списке открытых позиций
      if(PositionGetString(POSITION_SYMBOL) == _Symbol && // если совпадает символ открытой позиции
         PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && // если совпадает тип открытой позиции
         PositionGetInteger(POSITION_MAGIC) == Magic_Number) // и если совпадет мэджик
        {
         double pos_price_open=PositionGetDouble(POSITION_PRICE_OPEN); // объявим и инициализируем переменную для цены открытой позиции
         if(// тут задано условие для открытия позиции)
           {
            double new_price_pos=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
            trade.Sell(0.01,_Symbol,new_price_pos,0,0);
           }
        } 
     }
  }

しかし、なぜかオープンポジションが表示されません。デバッガで問題を見つけようとしたのですが、ループを開始した後、関数の中に何が書かれているかを見ることなく、すぐに関数を抜けてしまいます。私のコードのどこにバグがあるのか教えていただけませんか?

よろしくお願いします。

 
MrBrooklin オープンポジションに 追加ポジション(ストップ&テイクなし)をオープンする関数を作ろうとしています。コードを書きました:

しかし、なぜかオープンポジションが表示されません。デバッガで問題を見つけようとしたのですが、ループを開始した後、関数の中に何が書かれているかを見ることなく、すぐに関数を抜けてしまいます。PositionGetTicket(i)にブレークポイントを置いたのですが、私のコードのどこにバグがあるのか教えていただけませんか?

よろしくお願いします。

pos_total とは何ですか?

 
Alexey Viktorov #:

pos_totalは何と等しいか?

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

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

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

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

理由: