English Русский 中文 Español Deutsch Português
トレーダーキット:Drag Trader Library

トレーダーキット:Drag Trader Library

MetaTrader 4 | 21 4月 2016, 11:27
617 0
TheXpert
TheXpert

はじめに

開発の際に、ある程度そのライブラリにより提供されている機能を実装していたり、似たような機能を持つ製品はすでに存在していました。このライブラリがそれらよりすぐれているかはわかりません。有名なAutographや、その他のものには機能性や利便性で劣っているかもしれません。しかし、Drag Trade Libraryはある特徴があり、おそらく需要のあるものになります。



1. 開発の目的

ユーザーへの親しみやすさや最小限のインターフェースを維持しながら、マウスやコントロールオブジェクトを用いてチャート上で直接注文を取り扱えるエキスパートアドバイザーを作成することを初期から計画していました。エキスパートアドバイザーの主な特徴は、ターミナルのオリジナル言語にてすべて開発されているため、悪意のあるコードは含まれずユーザーにとって安全であるということです。加えて、エキスパートアドバイザーは本来無料のソフトウェアを意図されていました。

このプロジェクトへの取り組みにより、上記の機能を組み合わせ、EAに簡単に統合できるライブラリが生まれました。加えて、そのライブラリコードはライブラリフレームワーク外でも仕様できる役にたつ機能を持っています。



2. 構造

そのライブラリの機能は、4つのブロックに分けることができます。

  1. トレーディングブロック
  2. 情報ブロック
  3. 注文ハンドリングブロック
  4. 設定ブロック

図1. ライブラリ機能

そのEAの機能は、同じブロック分割の原則に基づいて表示されています - ユーザーインターフェースは必要なブロックを稼働・停止させ、依存・独立しながら使用できる3つの独立したブロックに分解することができます。さらに、このアプローチにより、不必要な論理ブロックを処理する際に浪費されるリソースを節約し、機能ブロックが停止された際に最小限のリソースを用いるようにすることができます。すべての機能ブロックは標準として停止されています。


2.1. 稼働・停止ブロックの原則

機能を処理するすべてのブロックは、エキスパートアドバイザーに配置されています。しかし、情報や多くのコントロール、情報オブジェクトはメインツールウィンドウには描画されていません。されません。その描画スペースは、機能ブロックの稼働・停止を行うpseudoindicatorsによって提供されています。これは、もし特定のインジケーターがチャートに存在すれば、エキスパートアドバイザーのそれぞれの機能ブロックが稼働されます。

そのインジケーターはそのようなものとして使用されません。それらの目的は、描画スペースを提供することのみです。

図2. 補助インジケーター

インジケーターの使用においていくつか制限があります。外部のインジケーターは、pseudoindicatorウィンドウにドラッグできますが、ウィンドウの存在がpsudoindicaorの名前により決められ、それぞれの機能ブロックは稼働されないので、逆にはドラッグできません。



3. ユーザーインターフェース

3.1. エキスパートアドバイザー設定

その設定は、個別の機能ブロックを形成するためにそのライブラリから取り出されました。これにより、ライブラリにすべての機能を抜粋し、配置でき、エキスパートアドバイザーの実行中、前の両方で外部から設定できます。さらに、その設定は仕様に節約することなく、個別の論理ブロックに分割できます。

そのプロセスは、適切なスクリプトを必要なチャートに適用するという部分にあります。

現在、3つの設定スクリプトがあります;

  • DragTrade_CommentsSettings.mq4 – コメント設定(トレーディングサブウィンドウに表示されているログ)
  • DragTrade_ObjectsSettings.mq4 – 一般ユーザーインターフェース設定 - コントロール、情報オブジェクトのスタイル
  • DragTrade_TradeSettings.mq4 – lライブラリトレーディング設定

このスクリプトはすべての属性の詳細を提供するので、どのように設定されるかを理解する上で問題がありません。

この機能の実装は、設定を保存するためのターミナルのグローバル変数の仕様に基づきます。これは、その使用に制限を課します - 送信される情報の最大サイズが制限され、8バイトのダブルタイプに等しいので、線はこの方法で渡すことができません。

エキスパートアドバイザーの属性の設定例は以下をご覧ください。コメント、オブジェクトアウトプットの設定は稼働するエキスパートアドバイザーのために変更されます。

オンライントレーディングのためにパラメーターを再設定、変更することを恐れずこのテスターの戦略を自由にテストすることができるようになるため、オンラインとテストモードのために渡す異なるパラメーターがあります。そのパラメーターの設定はその他のものに影響しません。

したがって、もし標準のパラメーターを変更したいのであれば、テストモードのために類似したスクリプトを使用する必要があります。

  • DragTrade_TesterCommentsSettings.mq4 – コメント設定(トレーディングサブウィンドウに表示されたログ)
  • DragTrade_TesterObjectsSettings.mq4 – 一般ユーザーインターフェース設定 - コントロールと情報オブジェクトのスタイル
  • DragTrade_TesterTradeSettings.mq4 – ライブラリトレーディング設定
3.2. 機能性

そのインターフェースは3つの独立した停止できるエリアに分割できます。

  • DragTrade_Infobar (情報ブロック)
  • DragTrade_OrdersBar (注文ハンドリングブロック)
  • DragTrade_Toolbar (トレーディングブロック)

全体として、このようになります:

そのうちの一つを詳しく見てましょう。

3.2.1. 情報パネル

その情報パネルは、情報を表示するための場所です。これは、その機能の最も複雑でない部分です。現在のライブラリの設定や、資産情報やアカウントの情報を表示します。

図3. 情報パネル

表示する情報は簡単に拡大できますが、ライブラリコードの修正をする必要があります。

その機能は以下の関数により実現されます: void ClearInformation() 、 void DrawInformation()

3.2.2. 注文パネル

このパネルは、現在の資産注文に関する情報を表示し、それらを扱うコントロールを含みます。

図4. 注文パネル

このパネルを使用することで何ができるか

  • マーケット、未決注文含め、特定の通貨ペアに配置されている注文のリストから注文をクローズします。
  • すべての買い注文をクローズします
  • すべての売り注文をクローズします
  • すべての未決注文を削除します
  • すべての注文を削除し、クローズします

以下のビデオは、このパネルに関する図表による説明を提供しています。

3.2.3. トレーディングパネル

このパネルはトレーディング機能を表示するために使用されます。そのライブラリの主な機能を保持するため最も重要で必要なパネルです。このパネルにより、チャートから直接特定のコントロールを用いて注文を配置し、扱うことができるようになります。

図5. トレーディングパネル

このパネルを使用することで何ができるか

  • マーケット注文を配置し、クローズします。
  • 未決注文のオープンや、ストップ、制限をかけます。未決注文のストップレベルの設定において十分良い方法を見つけていないので、ターミナル内臓の機能を用いてのみ設定できます(つまり、注文修正ウィンドウ)
  • 未決注文を削除する
  • 注文のストップレベルを変更する
  • 制限、ストップ注文のトリガー価格を変更します

マーケット注文は、以下のように配置されます:

  • 価格ポインターを用いて、将来の注文のストップロス価格を設定します
  • "Open Market Order"にコントロールを重ねます

マーケット注文は、ストップレベルを価格のその他の側にドラッグすることで、クローズされます。

以下のビデオは、マーケット注文を扱う例を紹介しています。

買い注文を扱う:




売り注文を扱う:




未決注文は以下の通り配置されます:

  • 価格ポインターを用いて、将来の注文のトリガー価格を設定します
  • もし、ストップ注文したいのであれば、コントロールを"Open Stop Order" に重ね、制限注文を行いたいのであれば、"Open Limit Order"にコントロールを重ねます。

未決注文は、注文線をその他の側の価格帯にドラッグするだけでクローズされます。

以下のビデオは、未決注文を扱う例を紹介しています。

ストップ注文のハンドリング:




制限注文のハンドリング::


4. エキスパートアドバイザーへの統合

そして、最後に最も興味深い部分

それはとてもシンプルです。その統合プロセスは、必要最小限の設定が統合中にライブラリに渡されるため、かなり単純化されています:残りの設定は、外部のスクリプトが担います。

エキスパートアドバイザーの最もシンプルな例は、ライブラリをエキスパートアドバイザーに帰るシェルにより示されています。以下の通りです:

//+------------------------------------------------------------------+
//|                                      DragTrade_Example_v_1.0.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, TheXpert"
#property link      "theforexpert@gmail.com"

extern int      Magic          = 1111;
extern int      EAMagic        = 1234;
extern int      TimesToRepeat  = 3;
extern int      Slippage       = 3;

#include <DragTrade_v_1.0/DragTradeLib_v_1.0.mqh>

bool Testing;

int init()
{
   Testing = IsTesting();
   DragTrade_Init(Magic, EAMagic, TimesToRepeat, Slippage, "Drag Trade Example");

   Comment_("Test Example of using Drag Trade Library");

   return(0);
}

int deinit()
{
   DragTrade_Deinit();
   return(0);
}

int start()
{
   DragTrade_Start();
   
   return(0);
}

上記のコードは、マウスを用いたトレードを行うエキスパートアドバイザーを使用する準備として適用されます。

このコードのイベントは、すべての新しいティックごとにハンドリングされます。

メインライブラリ統合のポイント:

  • 関数init deinit は本質的で、エキスパートアドバイザーにある必要があります。
  • ライブラリヘッドファイルDragTradeLib_v_1.mqh を含め、ライブラリコンポーネントが全て適切な位置にあることを確認してください。
  • 以下のライブラリ関数は、一致するEA関数の中で呼ばれます:
  1. DragTrade_Init
  2. DragTrade_Deinit
  3. DragTrade_Start

DragTrade_Init 関数は以下の通りです:

   void DragTrade_Init(int magic, int eaMagic, int timesToRepeat, int slippage, string ordersComment = "");

渡されるパラメーターを詳細に見てみましょう:

  • int magic – ライブラリに使用されるマジックナンバーライブラリを用いて配置される注文は、この番号を持ちます。もしその値が-1であれば、その注文はマジックナンバー0でオープンし、マジックナンバーによるフィルタリングオプションは表示中は使用できません。
  • int eaMagic – 戦略のマジックナンバー自動的・手動で行われた注文は、実装された戦略により識別できるよう導入されます。もしこれらの注文を戦略が「見える」ようにしたい場合、同一のマジックナンバーを設定するか、二つの異なるマジックナンバーのトレーサビリティを実装できます。もしその値が-1の場合、追加のマジックナンバーは使用されません。
  • int timesToRepeat – トレーディングパラメーターもしエラーにより即刻、リトライする場合の注文配置試行回数
  • int slippage – トレーディングパラメータースリッページ
  • string ordersComment – ライブラリを用いて配置された注文へのコメント

もしコマンドをすぐに実行したいのであれば、start 関数をループにできます。

int start()
{
   while (!IsStopped())
   {
      DragTrade_Start();
      Sleep(200);
   }
   return(0);
}

しかし、テスターでそのようなエキスパートアドバイザーをテストすることはできません - フリーズします。

ソリューションは、テスターの異なる動作を提供することで発見できます。

int start()
{
   if (Testing)
   {
      DragTrade_Start();
   }
   else
   {
      while (!IsStopped())
      {
         RefreshRates();
         
         DragTrade_Start();
         Sleep(200);
      }
   }
   
   return(0);
}

この記事に添付されている標準パッケージは、この最もシンプルなエキスパートアドバイザーを含んでいます。

さらに、そのパッケージは、統合ライブラリやライブラリトレーディング関数を持つ標準エキスパートアドバイザーMACD Sampleも含みます。

統合に必要な関数の他に、DragTradeLib_v_1.0.mqhファイルはライブラリに使用されるトレーディング戦略の実装において役に立ち、あなたのコードの実装にも使用できるすべての関数を提供しています。



5. ライブラリのインストール

そのインストールは、シンプルです - ターミナルフォルダに添付されているアーカイブを展開し、起動中ならターミナルを再起動すると、実行可能ファイルがターミナルのファイルリストに現れるようになります。



6. ライセンス

/* =============================================================================================== */
/* Copyright (c) 2010 Andrey Nikolaevich Trukhanovich (aka TheXpert)                               */
/*                                                                                                 */
/* Permission is hereby granted, free of charge, to any person obtaining a copy of this software   */
/* and associated documentation files (the "Software"),                                            */
/* to deal in the Software without restriction, including without limitation the rights            */
/* to use, copy, modify, merge, publish, distribute,                                               */
/* sublicense, and/or sell copies of the Software, and to permit persons                           */
/* to whom the Software is furnished to do so, subject to the following conditions:                */
/*                                                                                                 */
/*                                                                                                 */
/* The above copyright notice and this permission notice shall be included                         */
/* in all copies or substantial portions of the Software.                                          */
/*                                                                                                 */
/* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS                        */
/* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,                     */
/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR          */
/* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER                                     */
/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR         */
/* IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                   */
/* =============================================================================================== */


まとめ

そのライブラリは、実際のアカウントを扱いながら試され、信用でき役に立つ安定したツールであることがわかりました。

もう一度、Viktor Khabibulaevich Rustamovに感謝の意を示したいと思いますかれは、ライブラリ作成のアイディアの原案者であり、その考えの実装におけるアドバイスを提供する源であり、テスターでもありました。

たくさんのコードがあるので、小さいエラーや欠点はあると思います。もし見つけたら知らせてください。

そして、実行可能な修正用コードを提供します。その他の方々によるライセンス下でのさらなるプロジェクト開発は私のサポートを得ることができます。そのライブラリに関するコメントと提案は、将来のバージョンで可能な限り、考慮します。

頑張ってください!


MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/1354

添付されたファイル |
Accumulation/Distributionへのインサイトと、そのゴール地点 Accumulation/Distributionへのインサイトと、そのゴール地点
Accumulation/Distribution (A/D)インジケーターは、一つ興味深い特徴があります - このインジケータチャートのトレンド線のブレークアウトは、特定の確率にてやがて来る価格チャートのトレンド線のブレークアウトを示唆します。この記事は、MQL4プログラミングに慣れ親しんでいない人にとってはとても役に立ち、面白い記事になるかと思います。この観点から最も簡単なコードの構造を用い、コーディングの方法を理解する上でわかりやすい情報を提示することに努めました。
合同通貨の動きのフラクタル解析 合同通貨の動きのフラクタル解析
通貨はそれぞれどのうによ独立しているのでしょうか?それらの動きは協調しているのか、それとも、ある通貨の動きはその他の動きに影響しないのでしょうか?この記事は、非線形力学やフラクタル幾何学を用いたこの問題への取り組みを紹介します。
インジケーターの外部パラメーターのグラフィックコントロール インジケーターの外部パラメーターのグラフィックコントロール
インジケーターの外部変数は、パラメーターが変更できる特別なウィンドウを用いてコントロールされ、そのインジケーターは再度使用されます。これらの操作の不便さは、スクリーン上に必要なパラメータを表示させ、視覚的にインジケータを管理する必要性を生み出しました。
MQL5でのZIPアーカイブの扱い MQL5でのZIPアーカイブの扱い
MQL5は常に進化しています。この度新しい機能が追加されました。この革新により、DLLなしでZIPアーカイブを標準MQL5ツールで実行できるようになりました。この記事ではCZipクラスの使い方と、ZIPアーカイブの読み込み・生成・修正を例として扱います。