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

 
MrBrooklin #:

セルゲイさん、ご回答ありがとうございました。お返事をいただいて、さらに戸惑いました。どうしてだろう?スクリプトを実行すると、設定されたすべての保留中の注文が照会されます。画像で見る限り、チャート上に2枚あり、同時に1枚は選択され、もう1枚は選択されないのですね。よくわからないのです。

もう少し詳しく説明していただけますか?

単なる好奇心ではなく、自習を続けるために質問しています。

ウラジミールさん、ありがとうございます。

ここでは、イテレータiを最大インデックスから0に変更するループがありますが、内部では何が起こっているのでしょうか?さて、どうなるかというと、最初のコマンドでORDER_SYMBOLパラメータを取得しようとすると、こうなります。しかし、どの順番で取得しようとしているかというと、3行下の順番が選択されるからです
 
Sergey Gridnev #:
つまり、イテレータiを最大インデックスから0に変更するループがあるわけですが、その内部はどうなっているのでしょうか。さて、どうなるかというと、最初のコマンドでORDER_SYMBOLパラメータを取得しようとすると、こうなります。しかし、どの順番で取得しようとしているかというと、3行下の順番が選択されるからです

セルゲイさん、とても丁寧でわかりやすい解説をありがとうございましたサイクルスタート直後に保留中のオーダーチケットのある行を入れれば、すべてうまくいきました。

はい ...注意して見てください。それが、私に本当に欠けているものなのです。いつもありがとうございます。

敬具 ウラジミール

 

尊敬する専門家の皆さん、おはようございます。

今日もまた、MQL5 Referenceから引用したコードで、理解できない問題に2つ直面しました。今回は自分で何も書かず、既成の例題を取り入れただけです。

MQL5 Reference / 定数・列挙・構造体 / データ構造 /取引要求の構造 を開いています。そこで見つける。

取引要求の構成
Modify Pending Order
Торговый приказ на модификацию уровней цен отложенного ордера. Требуется указание 7 полей:
    action
    order
    price
    sl
    tp
    type_time
    expiration
 Пример торговой операции TRADE_ACTION_MODIFY для модификации уровней цен отложенного ордера:

これは明らかです。このコードで例題に続いています。

#define  EXPERT_MAGIC 123456  // MagicNumber эксперта
//+------------------------------------------------------------------+
//| Модификация отложенных ордеров                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//-- объявление и инициализация запроса и результата
   MqlTradeRequest request={};
   MqlTradeResult  result={};
   int total=OrdersTotal(); // количество установленных отложенных ордеров
//--- перебор всех установленных отложенных ордеров
   for(int i=0; i<total; i++)
     {
      //--- параметры ордера
      ulong  order_ticket=OrderGetTicket(i);                             // тикет ордера
      string order_symbol=Symbol();                                      // символ
      int    digits=(int)SymbolInfoInteger(order_symbol,SYMBOL_DIGITS);  // количество знаков после запятой
      ulong  magic=OrderGetInteger(ORDER_MAGIC);                         // MagicNumber ордера
      double volume=OrderGetDouble(ORDER_VOLUME_CURRENT);                // текущий объем ордера
      double sl=OrderGetDouble(ORDER_SL);                                // текущий Stop Loss ордера
      double tp=OrderGetDouble(ORDER_TP);                                // текущий Take Profit ордера
      ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE); // тип ордера
      int offset = 50;                                                   // отступ от текущей цены для установки ордера, в пунктах
      double price;                                                      // цена срабатывания ордера
      double point=SymbolInfoDouble(order_symbol,SYMBOL_POINT);          // размер пункта
      //--- вывод информации об ордере
      PrintFormat("#%I64u %s  %s  %.2f  %s  sl: %s  tp: %s  [%I64d]",
                  order_ticket,
                  order_symbol,
                  EnumToString(type),
                  volume,
                  DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),digits),
                  DoubleToString(sl,digits),
                  DoubleToString(tp,digits),
                  magic);
      //--- если MagicNumber совпадает, Stop Loss и Take Profit не заданы
      if(magic==EXPERT_MAGIC && sl==0 && tp==0)
        {
         request.action=TRADE_ACTION_MODIFY;                           // тип торговой операции
         request.order = OrderGetTicket(i);                            // тикет ордера
         request.symbol   =Symbol();                                   // символ
         request.deviation=5;                                          // допустимое отклонение от цены
        //--- установка уровня цены, тейк-профит и стоп-лосс ордера в зависимости от его типа
         if(type==ORDER_TYPE_BUY_LIMIT)
           {
            price = SymbolInfoDouble(Symbol(),SYMBOL_ASK)-offset*point; 
            request.tp = NormalizeDouble(price+offset*point,digits);
            request.sl = NormalizeDouble(price-offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                // нормализованная цена открытия
           }
         else if(type==ORDER_TYPE_SELL_LIMIT)
           {
           price = SymbolInfoDouble(Symbol(),SYMBOL_BID)+offset*point; 
            request.tp = NormalizeDouble(price-offset*point,digits);
            request.sl = NormalizeDouble(price+offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                 // нормализованная цена открытия
           }
         else if(type==ORDER_TYPE_BUY_STOP)
           {
           price = SymbolInfoDouble(Symbol(),SYMBOL_ASK)+offset*point; 
            request.tp = NormalizeDouble(price+offset*point,digits);
            request.sl = NormalizeDouble(price-offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                 // нормализованная цена открытия
           }
         else if(type==ORDER_TYPE_SELL_STOP)
           {
           price = SymbolInfoDouble(Symbol(),SYMBOL_BID)-offset*point; 
            request.tp = NormalizeDouble(price-offset*point,digits);
            request.sl = NormalizeDouble(price+offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                 // нормализованная цена открытия
           }
         //--- отправка запроса
         if(!OrderSend(request,result))
            PrintFormat("OrderSend error %d",GetLastError());  // если отправить запрос не удалось, вывести код ошибки
         //--- информация об операции   
         PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
         //--- обнуление значений запроса и результата
         ZeroMemory(request);
         ZeroMemory(result);
        }
     }
  }
//+------------------------------------------------------------------+

黄色でハイライトされている行を理解しようとしています。すぐに疑問が浮かびます。この例が保留中の注文に 関連しているのであれば、 PositionGetDouble(POSITION_PRICE_OPEN)はどう関係するのでしょうか?たぶん、こんなセリフがあるはずです。

DoubleToString(OrderGetDouble(ORDER_PRICE_OPEN),digits)
これが1点目です。2つ目の問題は、私が設定したBUY_STOP保留注文があるチャートでこのスクリプトを実行しようとしたときに出てきます(他のタイプの保留注文でも同様のことが起こりますが)。それで、どうなるんですか?何も起きない!?保留中の注文の修正が見当たりません。もしかしたら、私が理解していないことがあるのでしょうか?

エキスパート]タブにしか表示されません。
2022.02.25 08:41:38.491 4 (EURUSD,M1)   #4727791  EURUSD  ORDER_TYPE_BUY_STOP  0.10  0.00000  sl: 0.00000  tp: 0.00000  [0]
親愛なる専門家、この例を理解するために私を助けてください、なぜそれはディレクトリにありますが、そのコードは動作しませんか?

ウラジミールさん、ありがとうございます。
 
MrBrooklin #:
...
専門家の皆様、この例を理解するために私を助けてください、なぜそれが参考書にありますが、そのコードは動作しないのですか?

敬具 ウラジミール

数ページ前にも書きましたね。

トレーディング、自動売買システム、ストラテジーテストのためのフォーラムです。

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

アレクセイ・ヴィクトロフ, 2022.02.20 10:24

サーシャドキュメントにある例や tumblrの例を使うより、もっと悪い ことは考えられない ですね。また、whileループの強制終了のフラグもどこかに消えてしまっていますね。すべてにおいて......言葉がない。
ドキュメントに書かれた例や、標準ライブラリに書かれた例も、しっかりチェックされているのか疑問です。そんなエラーはいくらでもある。例というのは、あくまでサンプルとしてしか使えないと私は思っているのですが...
 
Alexey Viktorov #:

数ページ前にも書きましたが

ドキュメントに書かれた例や標準ライブラリまで、徹底的にチェックされているのか疑問です。そんなエラーはいくらでもある。私の考えでは、例はあくまでサンプルとして使うべきで...

アレクセイさん、こんにちは。

こんなに真面目な会社が、ハンドブックに対する姿勢が悪いのは、とても悲しいことです。

敬具 ウラジミール

 
MrBrooklin #:

アレクセイさん、こんにちは。

こんなに真面目な会社が、ハンドブックに対してこんなにも不真面目な態度をとっているのはとても悲しいことです。

敬具 ウラジミール

この例にはもう一つ間違いがあります。あるいは、完全に盲目になっているか。

必須項目の中に有効期限がありますが、例のコードでは有効期限がどこに割り当てられているのかがわかりません。その代わり、価格からの許容乖離幅を割り当てています。

 
Alexey Viktorov #:

この例には、まだ間違いがあります。それとも私が完全に盲目になってしまったのか...。

必須項目の中にexpirationがありますが、サンプルコードではexpirationが割り当てられていません。その代わり、価格からの許容偏差が規定されています。

賞味 期限切れだけでなく、そこそこあるはずです。

type_time - тип истечения

敬具 ウラジミール

 
MrBrooklin #:

それだけでなく、有効 期限を設けることも必要です。

敬具 ウラジミール

このブランチのモデレーター兼オーガナイザーのArtem Trishkinに宛てたものです!

あなたとしては、「MQL5 Guide to MQL」に関連する問題はすべて合格できる可能性があるのでしょうか?

もしご迷惑でなければ、せめてこのページを 更新していただけないでしょうか?

敬具 ウラジミール
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Типы торговых операций - Торговые константы - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
MrBrooklin #:

このスレッドの司会者であり主催者であるArtem Trishkin氏に向かって言っているのです!

あなたとしては、MQL5ガイドに関連するすべての質問をMQL5に伝える可能性がありますか?

もしよろしければ、せめてこのページだけでも 更新していただけないでしょうか?

ウラジミールさん、謹んで申し上げます。

また、このスレッドで 報告することもできます。

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2022.02.24
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Alexey Viktorov #:

このスレッドでも 報告することができます。

Alexeyさん、ありがとうございます!まずはこのスレッドで回答を待ちますが、何もなければErrors, Bugs, Questions トピックで報告させていただきます。

敬具 ウラジミール