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

 
Roman:

入力されているのであれば、その差は歴然です。
初期化された変数の読み込みは、関数の読み込みよりも常に高速です。

違いはありません。今はリンクが見つからないのですが......答えはずいぶん前に出ています。

 
Vladimir Karputov:

違いはありません。今はリンクが見つからないのですが......答えはずいぶん前に出ています。

Juanとコンパイラの警告については、差はありません ))

 
Vladimir Karputov:

違いはありません。すべてをコンパイルすると、1つの呼び出しにまとまる。だから、すべて関数で やったほうが いいんです。

これも別スレ立ててpipsとポイントみたいに議論しようぜ...。そうすれば、みんなに何かできるかもしれない......。

お前ら自分の意見押し付けるの好きだな...。

 

多少のズレがあるMAがあります。MA_shift=5とする。

CopyBuffer二重の 負のシフトが渡された場合のみ、チャートのゼロバーから MA の正しい値を得ることができるのはなぜですか?
CopyBuffer(hMA, 0,-2*5, rates_total, MA_Buf);

MA_Buf[0]に正しい値が入るようになりました。

 
RickD:

多少のズレがあるMAがあります。MA_shift=5とする。

なぜ、CopyBuffer に二重の 負のシフトを渡した場合のみ、チャートのゼロバーから正しい MA の値を取ることができるのでしょうか?
CopyBuffer(hMA, 0,-2*5, rates_total, MA_Buf);

MA_Buf[0]に正しい値が入るようになりました。

まず絵を描いて、何をもって「ゼロバー」とするかは、shiftパラメータで指定します。

 
Roman:

変数の読み出し、関数より速い。

そうではなく、_SymbolとSymbol()https://www.mql5.com/ru/forum/160683/page933#comment_12780905 とどちらが速いか調べてみました。

MQLのコード最適化は非常にクールなので、使いやすいものを使ってください。

私のテストでは、変数の記述場所や修飾子によってアクセス時間が異なることがありますが、原則的には特定のビルドでの実装に起因する2~5%の速度があります。

 
現在のシンボルの最後のトランザクションの結果を取得する最も簡単で速い方法を教えてください。なぜなら、ドキュメントを見るとすべてが複雑になっているからです。結果を得るためには、まず、必要な案件のチケットを見つける必要があります。チケットを見つけるためには、そのインデックスによって履歴から案件を探す必要があり、インデックスは履歴から検索する必要があり、シンボルによるフィルタリングも必要であることは言うまでもありません。
 
WinZip:
現在のシンボルでの最後の取引の結果を簡単かつ迅速に取得する方法を教えてください。ドキュメントがすべてややこしいので。結果を得るためには、まず必要な取引のチケットを見つける必要があります。チケットを見つけるためには、そのインデックスによって履歴の中の取引を見つける必要があり、インデックスは履歴の中で探す必要があり、シンボルによってフィルタリングする必要があることは言うまでもないでしょう。

取引履歴に毎回アクセスするのを避けるには、OnTradeTransaction で以下のようなタイプで取引をキャッチします。

TRADE_TRANSACTION_DEAL_ADD - 取引を履歴に追加する


//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      long     deal_ticket       =0;
      long     deal_order        =0;
      long     deal_time         =0;
      long     deal_time_msc     =0;
      long     deal_type         =-1;
      long     deal_entry        =-1;
      long     deal_magic        =0;
      long     deal_reason       =-1;
      long     deal_position_id  =0;
      double   deal_volume       =0.0;
      double   deal_price        =0.0;
      double   deal_commission   =0.0;
      double   deal_swap         =0.0;
      double   deal_profit       =0.0;
      string   deal_symbol       ="";
      string   deal_comment      ="";
      string   deal_external_id  ="";
      if(HistoryDealSelect(trans.deal))
        {
         deal_ticket       =HistoryDealGetInteger(trans.deal,DEAL_TICKET);
         deal_order        =HistoryDealGetInteger(trans.deal,DEAL_ORDER);
         deal_time         =HistoryDealGetInteger(trans.deal,DEAL_TIME);
         deal_time_msc     =HistoryDealGetInteger(trans.deal,DEAL_TIME_MSC);
         deal_type         =HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_entry        =HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_magic        =HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_reason       =HistoryDealGetInteger(trans.deal,DEAL_REASON);
         deal_position_id  =HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID);

         deal_volume       =HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
         deal_price        =HistoryDealGetDouble(trans.deal,DEAL_PRICE);
         deal_commission   =HistoryDealGetDouble(trans.deal,DEAL_COMMISSION);
         deal_swap         =HistoryDealGetDouble(trans.deal,DEAL_SWAP);
         deal_profit       =HistoryDealGetDouble(trans.deal,DEAL_PROFIT);

         deal_symbol       =HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_comment      =HistoryDealGetString(trans.deal,DEAL_COMMENT);
         deal_external_id  =HistoryDealGetString(trans.deal,DEAL_EXTERNAL_ID);
        }
      else
         return;
      ENUM_DEAL_ENTRY enum_deal_entry=(ENUM_DEAL_ENTRY)deal_entry;
      if(deal_symbol==m_symbol.Name() && deal_magic==InpMagic)
        {
         if(deal_type==DEAL_TYPE_BUY || deal_type==DEAL_TYPE_SELL)
           {
            
...
           }
        }
     }
  }

m_symbol.Name() - 現在のシンボル、InpMagic - Expert Advisorの一意の識別子です。

 
こんにちは、私はサイトとFacebookのメールに登録し、メタトレーダー5-4に入ることができない私は私のアカウントを補充するのに役立ちます。
 
Igor Makanu:

は事実ではなく、_SymbolとSymbol()のどちらが速いか調べたhttps://www.mql5.com/ru/forum/160683/page933#comment_12780905

つまり、アクセス時間は一長一短、MQLでのコード最適化は非常にクールなので、便利なものは何でも使ってください。

私のテストでは、変数の記述場所や修飾子によってアクセス時間が異なることがありますが、原則的には特定のビルドでの実装に書き留めることができる2〜5%の速度があり、それはビルド番号に依存します。

オプティマイザがうまく機能するのは認めるが、常にコンパイラのオプティマイザに頼るのは間違っている。
メモリレベル、初期化レベル、値の戻りレベルで、どのようにコードが実行されるか、前もって考えておく必要があります。
つまり、1回の操作で実行されるアクションの数を計算し、アクションの数が少なければ、コードは速くなる。そして、最適なコードを一気に書き上げることを実践してください。
短いコードであれば違いはないかもしれませんが、何百ものファイルがあるプロジェクトでは、その分遅れが出てきます。
とプロファイラーがあり、コードを書き換えるだけとなります。みんな自分でレーキを選んでいる))。

また、キーワードでグーグル検索

__inline 
__forceinline
不思議なことに、それらはmqlにundocumentedとして入っている。
理由: