記事"トレーダーのライフハック: インジケーターで作られたファストフード"についてのディスカッション

 

新しい記事 トレーダーのライフハック: インジケーターで作られたファストフード はパブリッシュされました:

MQL5 に新たに切り替えた場合、この記事は役に立つでしょう。 まず、インジケーターデータとシリーズへのアクセスは、通常の MQL4 スタイルで行われます。 次に、このシンプルさを MQL5 に実装します。 すべての関数は、可能な限り明確であり、ステップバイステップのデバッグに最適です。

検証のためだけに "コメント " を実装しました。 ビジュアルモードで "MACD MQL4 style EA short.mq5" を起動し、インデックス #1 の足にカーソルを置く場合、テスターのタスクを確認することができます。

テスター上の "MACD MQL4 style EA short.mh5"

図1. テスター上の "MACD MQL4 style EA short.mh5"

作者: Vladimir Karputov

 

素晴らしい...

 

この記事は別の 記事の一部を抜粋したものである。効率的に動作させるために何もしていない。指標や時系列のキャッシュもない。High[i]、Low[i]などがない。iCustomもない。

まったく違うものが出てくることが予想された。さらに、Expert Advisorsのファーストフードが、ソースにすらないのでは意味がない。

   for(int i=PositionsTotal()-1;i>=0;i--)
      if(m_position.SelectByIndex(i)) // プロパティにさらにアクセスするために、インデックスによって位置を選択する。
         if(m_position.Symbol()==m_symbol.Name())
           {
            //--- ロング・ポジションを建てる
            if(m_position.PositionType()==POSITION_TYPE_BUY)
              {
               //--- 閉鎖すべきか?
               if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && 
                  MacdCurrent>(MACDCloseLevel*m_adjusted_point))
                 {
                  //--- ポジションを閉じて終了する
                  if(!m_trade.PositionClose(m_position.Ticket()))
                     Print("PositionClose error ",m_trade.ResultRetcodeDescription());
                  return;
                 }
               //--- トレーリング・ストップをチェックする
               if(TrailingStop>0)
                 {
                  if(m_position.PriceCurrent()-m_position.PriceOpen()>m_adjusted_point*TrailingStop)
                    {
                     if(m_position.StopLoss()<m_symbol.Bid()-m_adjusted_point*TrailingStop)
                       {
                        //--- 位置を修正して終了する
                        if(!m_trade.PositionModify(m_position.Ticket(),
                           m_symbol.NormalizePrice(m_position.PriceCurrent()-m_adjusted_point*TrailingStop),
                           m_position.TakeProfit()))
                           Print("PositionModify error ",m_trade.ResultRetcodeDescription());
                        return;
                       }
                    }
                 }
              }

            if(m_position.PositionType()==POSITION_TYPE_SELL)
              {
               //--- 閉鎖すべきか?
               if(MacdCurrent<0 && MacdCurrent>SignalCurrent && 
                  MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*m_adjusted_point))
                 {
                  //--- ポジションを閉じて終了する
                  if(!m_trade.PositionClose(m_position.Ticket()))
                     Print("PositionClose error ",m_trade.ResultRetcodeDescription());
                  return;
                 }
               //--- トレーリング・ストップをチェックする
               if(TrailingStop>0)
                 {
                  if((m_position.PriceOpen()-m_position.PriceCurrent())>(m_adjusted_point*TrailingStop))
                    {
                     if((m_position.StopLoss()>(m_symbol.Ask()+m_adjusted_point*TrailingStop)) || (m_position.StopLoss()==0.0))
                       {
                        //--- 位置を修正して終了する
                        if(!m_trade.PositionModify(m_position.Ticket(),
                           m_symbol.NormalizePrice(m_symbol.Ask()+m_adjusted_point*TrailingStop),
                           m_position.TakeProfit()))
                           Print("PositionModify error ",m_trade.ResultRetcodeDescription());
                        return;
                       }
                    }
                 }
              }
           }
Переход с MQL4 на MQL5
Переход с MQL4 на MQL5
  • 2010.05.11
  • Sergey Pavlov
  • www.mql5.com
Данная статья, построенная в форме справочника по функциям MQL4, призвана помочь переходу с MQL4 на MQL5. Для каждой функции языка MQL4 приведено описание и представлен способ ее реализации на MQL5, что позволит вам значительно ускорить перевод своих программ с MQL4 на MQL5. Для удобства функции разбиты на группы, как в документации по MQL4.
 
fxsaber:

この記事は別の 記事の一部を抜粋したものである。効率的に動作させるために何もしていない。指標や時系列のキャッシュもない。High[i]、Low[i]などがない。iCustomもない。

まったく違うものが出てくることが予想された。さらに、Expert Advisors のファーストフードが、どうせソースの匂いもしないのであれば、何の意味があるのだろうか?


典型的なMQL4-caの例です - コードを読んだり見たりすることなく、フラグを立てて表彰台に直行します :) .

 
Vladimir Karputov:

典型的なMQL4-caの例です - 読まず、コードも見ず、フラグを立てて表彰台に直行です :) 。

コメントする前に、記事の本文だけでなく、添付されたソース(IndicatorsMQL4.mqhとIndicatorsMQL5.mqhの分析を含む)もすべて読みました。

 
fxsaber:

コメントする前に、記事の本文だけでなく、添付されたソース(IndicatorsMQL4.mqhとIndicatorsMQL5.mqhの分析を含む)もすべて読んでください。


MQL5Include∕SimpleCall∕Series.mqhファイルに目を通した(見逃した)はずです。

キャッシュについて - これらはあなたの個人的な推測(期待)です。

この記事は、「私のファイルを差し込めば、MQL4のスタイルで 無心に作業を続けることができます」とMQL4ユーザーを欺くことを意図したものではなく、インジケーターのアドレスにおける古いアプローチをMQL5に移行する方法を示したものです。

 
Vladimir Karputov:

MQL5Include\SimpleCall\Series.mqhファイルを見落としたに違いない。

よく読んで。High[i]などはどこにありますか?

キャッシュについて - これらはあなたの個人的な推測(期待)です。

この 記事は、「私のファイルを差し込めば、MQL4のスタイルで無心に作業を続けることができます」と MQL4ユーザーを欺くことを意図したものではなく、インジケーターのアドレスにおける古いアプローチをMQL5に移行する方法を示したものです。

iCustomは?あなたは軽率にも他の記事の一部をコピペしそうになり、パフォーマンスに失敗した。実際、これはMQL4スタイルのコストであり、あなたの実装ではないとユーザーを欺いている。

ここには、MQL4スタイルがいくつかの問題においてMQL5より劣っていないことを示すパフォーマンス測定値がある。インジケーターでも同じことができる。

こちらは時系列のリアライゼーションの1つ です。作者が努力し、パフォーマンスを重視し、MQL4スタイルから脱却しようとしているのがわかるだろう(必要であれば、このアイデアを改良することもできる)。

Высокопроизводительная библиотека iTimeSeries
Высокопроизводительная библиотека iTimeSeries
  • 投票: 25
  • 2017.05.25
  • nicholishen
  • www.mql5.com
Одной из основных проблем с MQL5 до сих пор было удаление встроенных функций для работы с таймсериями. Несмотря на то, что такой подход расширил для программистов возможности разработки, он также замедлил работу из-за обязательного шага по созданию и удалению новых ячеек памяти каждый раз, когда требуется доступ к данным таймсерии.  Рассмотрим...
 
fxsaber:

よく読んでください。High[i]などはどこにあるのか?

iCustomはどこにあるのか?あなたは軽率にも他の記事の一部をコピペしそうになり、パフォーマンスに失敗してしまった。実際、これはMQL4スタイルのコストであって、あなたの実装のコストではないとユーザーを欺いている。

ここには、MQL4スタイルがいくつかの問題においてMQL5より劣っていないことを示すパフォーマンス測定値がある。インジケーターでも同じことができる。

こちらは時系列のリアライゼーションの1つ です。作者がパフォーマンスを重視し、MQL4スタイルから少し離れていることがわかるだろう(その方が作者にとって都合がいいのだ)。


MQL5に早く慣れるために、シリーズのiXXXX関数だけが残されている。それらはより完全なパラメーター(シンボル、時間枠、シフト)を持っているので、より高度に特殊化されたHigh[]などを簡単に置き換えることができる。目標は、ユーザーがMQL4を無心に使い続けることではなく、MQL4のコードを少しずつ書き換えることだ。

iCustomは計画にも入っていなかった。

キャッシュについて - これは一般向けの記事には絶対にありません。


追記:ところで、ユーザーからのフィードバックによって、High[]や同様の関数が必要なのか、それともiXXXXシリーズがなくてもやっていけるのかが明らかになるだろう。

 
Vladimir Karputov:

目標は、ユーザーがMQL4を無心に使い続けることではなく、MQL4のコードを少しずつ書き直すことだ。

MQL4スタイルは純粋なMQL5だ。SBよりも悪いものではない。想像で風車と戦うな。StandardLibrary-Styleとは戦わない。

iCustomは計画にもなかった。

キャッシュについて - 一般向けの記事には絶対にありません。

インジケータに関するMT4とMT5のトピックでは、標準インジケータが最も議論されていません。ほとんどの人がカスタムインジケータについて話していました。標準的なインジケータは何十年も前に書かれたものであり、取り返しのつかないほど時代遅れです。古いインジケーターを使って先進的なMQL5で作業するのは奇妙に見えます。

キャッシュについては、記事の中で説明されるべきではなかったが、MQL4スタイルとの関連で結論の客観性を取ったのだから、行うべきだった。

複数のインジケーターに同時にアクセスすると、テスト速度が低下する;

 
Vladimir Karputov:

追記:ところで、High[]や同様の機能が必要なのか、それともiXXXXシリーズは省いていいのか、ユーザーのフィードバックでわかるだろう。

コメントという形で何も言わなくても、投票をして結果を見てください。Bid/Ask変数のような単純なものでも同様です。

 

この記事は「MQL4表現を保存しようとするコードを書けない方法」と呼ぶべきだ。

漏れたハンドル(なぜインジケーター・ハンドルを閉じるのか)と驚くべきオーバーヘッド(インジケーターを再作成しようとすると、インジケーター・マネージャーの中に落ちる)を伴うハードな恐怖。そして十分な数の人が、見もせず理解もせずにそれをコピーしてしまいます。

その上、インジケータから1つの値を抽出するのは非効率的です。

私は記事を完全に読み、コードにも十分に目を通しました。