記事「自動で動くEAを作る(第15回):自動化(VII)」についてのディスカッション

 

新しい記事「自動で動くEAを作る(第15回):自動化(VII)」はパブリッシュされました:

自動化に関するこの連載を完結させるために、前回に引き続きトピックについて説明しましょう。EAを時計仕掛けのように動かすために、すべてがどのように組み合わされるかを見ていきます。

自動的に機能するEAを作成する際にプログラマーの作業に影響するような主な失敗、問題、困難について説明しましたが、それが多くの知識をもたらし、実際の市場観察の方法を変える可能性があることもお見せしました。

安全で信頼性が高く、堅牢なシステムを実際に作ることができるように、提示をおこないました。同時に、モジュール式でコンパクト、そして非常に軽量でなければなりません。そして、他の多くのものと組み合わせて使うこともできなければなりません。同時にいろいろなことが操作できないようなシステムには意味がありません。というのも、1つの資産だけを取引していても、実際に利益を上げられるとは限らないからです。

おそらく読者の多くは、この連載の、3つの実践的な例を使ってこの考え方を説明した以前の記事に興味を持つでしょう。ただし、この記事を活用するためには、連載全体の知識が必要であることにご注意ください。プログラミングの天才である必要はないし、何科目もクラスを取って卒業する必要もないということを、とてもシンプルな方法で伝えることができたと思います。MetaTrader 5プラットフォームとMQL5言語がどのように機能するかを本当に理解する必要があります。

また、使用したい指標がMQL5やMetaTrader5がにない場合でも、効率的な作業システムのための特定の状況を作り出す方法も紹介しました。例3で示した、HILO指標を内部的に作成する方法です。しかし、それとは関係なく、システムは常に正しく実装され、テストされるべきです。素晴らしいシステムを作っても、結局何の利益も得られないのでは意味がないからです。

作者: Daniel Jose

 

こんにちは、ダニエル。まず最初に、開発者や熱狂的なファンのコミュニティとのコラボレーションにおけるあなたのパフォーマンスを祝福したいと思います。

この一連の記事のEAの実行について質問があります。

あなたのドキュメントに従って、OCO注文を保留に変更することで、ネッティング口座とヘッジ口座でテストしました。しかし、注文は執行されません。

ログにもエラーはありません。

何が原因でしょうか?

注:コードには何も変更していません。売買ロジックだけです。私のロジック(私のストラテジー)でテストしてみましたが、何のエントリーもありませんでした。

バッチ数量を設定すると)手動で実行されますが、自動では実行されません。

 
César Augusto #:

こんにちは、ダニエル。まず第一に、開発者や熱狂的なファンのコミュニティとのコラボレーションにおけるあなたのパフォーマンスを祝福したい。

この一連の記事のEAの実行について質問があります。

私は、あなたのドキュメントに従って、OCO注文を保留に変更することにより、ネッティング口座とヘッジ口座でそれをテストしました。しかし、注文が執行されません。

ログにもエラーはありません。

何が原因でしょうか?

注:コードは何も変えていません。売買ロジックだけです。私のロジック(私のストラテジー)でテストしたところ、エントリーが出ませんでした。

バッチ数量を設定すると)手動で実行されますが、自動では実行されません。

自動エントリーは、設定した入力パラメーターが注文のトリガーを許可した場合にのみ起こります。言い換えれば、ロジックが、それが何であれ、インジケータが特定の値を持つ必要があるとした場合、自動エントリーまたは自動エグジットは、その値に達したときにのみ発生します。そうでなければ、自動エントリーや自動エグジットは起こりません。一連の流れの中に、3つのセットアップの例があることがお分かりいただけたかと思います。トリガー・ロジックがどのように機能するかを理解するために、それぞれを勉強してみてください。このトリガーロジックを理解しなければ、自動メカニズムを機能させることはできません。ネズミ捕りと同じで、ゾウを捕まえるようにセットアップしても、ネズミが触れただけではトリガーされないのだ😂 ...。とにかく、例題のメカニズムを勉強して、頑張って.😁👍

 

ダニエル、あなたの献身的な指導に感謝します。

C_Automaton_v3.mqhを使用しているこのパート15のEA(バージョンv3)の機能をチェックしていただけますか?

eSelectMediaリストの定義は明確です。しかし、FORループでm_Op配列の要素を操作するとき、特に "sizeof(eSelectMedia) "を使用することに問題があると思います。

ドキュメント(https://www.mql5.com/en/docs/basis/types/integer/enumeration) によると、sizeofは、それ以上の要素を持つ列挙であっても、常に4を返すそうです。

Documentation on MQL5: Language Basics / Data Types / Integer Types / Enumerations
Documentation on MQL5: Language Basics / Data Types / Integer Types / Enumerations
  • www.mql5.com
Enumerations - Integer Types - Data Types - Language Basics - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
 
FernandoN23 #:

ダニエル、献身的な指導に感謝する。

C_Automaton_v3.mqhを使用しているこのパート15のEA(バージョンv3)の機能をチェックしていただけますか?

eSelectMediaリストの定義は明確です。しかし、FORループ内のm_Op配列の要素の操作、特に "sizeof(eSelectMedia) "に関して、その使用には問題があると思います。

ドキュメント(https://www.mql5.com/en/docs/basis/types/integer/enumeration) によると、sizeofは、それ以上の要素を持つ列挙であっても、常に4を返します。

あなたは混同しています。ドキュメントに書かれている4は、sizeofを返すために使用されるバイト単位のサイズであり、返される最大要素数ではありません。

 
Daniel Jose #:

あなたは物事を混同している。ドキュメントに書かれている4は、sizeofの返り値で使われるバイト単位のサイズであり、返される最大要素数ではない。

ダニエル、素早い返答ありがとう。

sizeof(enum)を使ったFORの件ですが、以下にテストスクリプトと得られた結果、そしてもう一つ質問を追加します。

ご指導ありがとうございました。

test.mq5 スクリプト

//+------------------------------------------------------------------+
void OnStart()
  {
      enum eSelectMedia {MEDIA_FAST, MEDIA_SLOW};
      enum eSelectMeses {JANEIRO, FEVEREIRO, MARCO, ABRIL, MAIO, JUNHO, JULHO, AGOSTO, SETEMBRO, OUTUBRO, NOVEMBRO, DEZEMBRO};
   
      struct st01
         {
               double  Buff[];
               int     Handle;
         }m_Op[sizeof(eSelectMedia) + 1];
                   
      Print("Tamanho do eSelectMedia = ", sizeof(eSelectMedia));
      Print("Tamanho do eSelectMeses = ", sizeof(eSelectMeses));
      Print("Tamanho do m_Op = ", ArraySize(m_Op));
      
      Print("========= Mostrar enum eSelectMedia =========");
      for (int i = sizeof(eSelectMedia); i >= 0; i--)
        {
            Print("eSelectMedia - idx = ", i);
        }
   
      Print("========= Mostrar enum eSelectMeses =========");
      for (int i = sizeof(eSelectMeses); i >= 0; i--)
        {
            Print("eSelectMeses - idx = ", i);
        }
   
      Print("========= Mostrar enum m_Op =========");
      for (int i = ArraySize(m_Op); i >= 0; i--)
        {
            Print("m_Op - idx = ", i);
        }     
  }
// 終了 OnStart() 
//+------------------------------------------------------------------+


結果

2023.06.07 09:09:10.415    teste (EURUSD,M1)    Tamanho do eSelectMedia = 4
2023.06.07 09:09:10.415    teste (EURUSD,M1)    Tamanho do eSelectMeses = 4
2023.06.07 09:09:10.415    teste (EURUSD,M1)    Tamanho do m_Op = 5
2023.06.07 09:09:10.415    teste (EURUSD,M1)    ========= Mostrar enum eSelectMedia =========
2023.06.07 09:09:10.415    teste (EURUSD,M1)    eSelectMedia - idx = 4
2023.06.07 09:09:10.415    teste (EURUSD,M1)    eSelectMedia - idx = 3
2023.06.07 09:09:10.415    teste (EURUSD,M1)    eSelectMedia - idx = 2
2023.06.07 09:09:10.415    teste (EURUSD,M1)    eSelectMedia - idx = 1
2023.06.07 09:09:10.415    teste (EURUSD,M1)    eSelectMedia - idx = 0
2023.06.07 09:09:10.415    teste (EURUSD,M1)    ========= Mostrar enum eSelectMeses =========
2023.06.07 09:09:10.415    teste (EURUSD,M1)    eSelectMeses - idx = 4
2023.06.07 09:09:10.415    teste (EURUSD,M1)    eSelectMeses - idx = 3
2023.06.07 09:09:10.415    teste (EURUSD,M1)    eSelectMeses - idx = 2
2023.06.07 09:09:10.415    teste (EURUSD,M1)    eSelectMeses - idx = 1
2023.06.07 09:09:10.415    teste (EURUSD,M1)    eSelectMeses - idx = 0
2023.06.07 09:09:10.415    teste (EURUSD,M1)    ========= Mostrar enum m_Op =========
2023.06.07 09:09:10.415    teste (EURUSD,M1)    m_Op - idx = 5
2023.06.07 09:09:10.415    teste (EURUSD,M1)    m_Op - idx = 4
2023.06.07 09:09:10.415    teste (EURUSD,M1)    m_Op - idx = 3
2023.06.07 09:09:10.415    teste (EURUSD,M1)    m_Op - idx = 2
2023.06.07 09:09:10.415    teste (EURUSD,M1)    m_Op - idx = 1
2023.06.07 09:09:10.415    teste (EURUSD,M1)    m_Op - idx = 0



eSelectMonths enumには12個の要素があります。 ドキュメントによると、sizeof()の戻り値はいずれも4です。C_Automaton_v3.mqhファイルによると、m_Opはsizeof(eSelectMedia) + 1に基づいて定義されているため、ArraySize() = 5となります。 FORループでsizeof(enum)を使用すると、対応するenumの要素数が考慮されませんでした。 この場合、列挙の正確な要素数を考慮するループはどのように作成すればよいのでしょうか?






モデレーターによって編集さ れた不適切な形式の コード

 
@FernandoN23 #: スクリプト test.mq5

コードを入力する際は コードを入力するときは、 CODE ボタン(Alt -S)を 使用して ください。

エディターのコードボタン

Nota de usuário - MQL5.community
Nota de usuário - MQL5.community
  • www.mql5.com
Você acabou de registrar e, provavelmente, você tem perguntas como: "Como faço para inserir uma imagem na minha mensagem?", "Como faço para formatar meu código fonte MQL5?", "Onde são mantidas minhas mensagens pessoais?". Você pode ter muitas outras perguntas. Neste artigo, nós preparamos algumas dicas práticas que ajudarão você a se acostumar com o MQL5.community e tirar o máximo proveito de seus recursos disponíveis.
 
MetaQuotes:

新しい記事自動で動くEAを作る(第15回):自動化 (VII) を掲載しました:

著者ダニエル・ホセ

こんにちは、Danielさん。
EA_v1.mq5、EA_v2.mq5、EA_v3.mq5ファイルを教えてください。または、私はどこに添付ファイルを見ることができるのだろうか。
 

EAをEURUSD 1Mチャートで使用しているのですが、ClosePosition関数がうまくポジションをクローズしてくれません。

口座のタイプがヘッジングで、ポジションをクローズするにはアクションをTRADE _ACTION_ DEALではなく TRADE_ACTION_CLOSE_BYに設定する必要があるためだと推測しています。

 
親愛なるダニエル。記事執筆おめでとうございます。移動平均シグナルをトリガーしたバーの高値または安値でペンディングオーダーを 送信 するために、「inline virtual void Triggers(void) final」メソッドのコードブロックを置き換えたところ、EAは1枚買いの設定になっているにもかかわらず、すでに2枚買ってしまいます。元のコードに戻せば、また完璧に機能します。助けていただけるなら、ありがとうございます