記事"MQL5でのトレードオペレーション - 簡単です"についてのディスカッション - ページ 4

 
Konstantin Efremov:

UPD:Rashidが上記のライブラリファイルを投稿してくれた。標準ライブラリにエラーがあるのは悲しいことです。ライブラリを置き換えることなく、EAで直接いくつかの変更を加えることが可能かどうかを比較検討し、すべてが機能するようにしたいと思います。

これらの編集はすでに標準ライブラリに あります。記事を読んでくださる方には、今だけお答えすることにしました。

 

いいね、実にいいものだ。

 
<Deleted>
.
 
Andy Obama:
 

皆さんこんにちは!

私はプログラミング言語MQL5の 勉強を続けています。自分にとって有益な情報を求めて、ほとんど全てのサイトを検索しました。サイトにある情報のほとんどは、すでにプログラミングの基本的な理解を持っている人向けです。

そしてこちら!多くのことを理解し、自分のEAを改良するのに役立った 著者がこのシリーズを書き続けず、2012年だけに限定したのは残念だ。しかし、同じように、私はこの人に大きな敬意を 表し、すべての初心者を代表して同じように大きな ありがとうを言います!

敬意を込めて、ウラジミール。

Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
  • www.mql5.com
MetaQuotes Language 5 (MQL5) - язык программирования технических индикаторов, торговых роботов и вспомогательных приложений для автоматизации торговли на финансовых рынках. MQL5 является современным языком высокого уровня и разработан MetaQuotes Software Corp. для собственной торгово-информационной платформы. Синтаксис языка максимально близок...
 
このトピックに関係のないコメントは、「オフトピック・ポスト」に移動しました。
 
pdev:

こんにちは、とても参考になる投稿をありがとうございます。私はMT5初心者で、EAの作成について勉強中なので、サンプルコードをコピーしてCtrade.Buyを実行しましたが、バックテストに失敗しました。詳細は以下の通りです:


1) 口座:基本通貨をNZDとしたライブ口座です。

2) バックテスト用のMetaEditor設定:


3) コードhttps://www.mql5.com/ja/articles/481 からコピー:


//+------------------------------------------------------------------+

//|                                                         demo.mq5 |

//|                        Copyright 2017, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2017, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"

#include<Trade\Trade.mqh>


//--- object for performing trade operations

CTrade  trade;

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit()

  {

   //--- set MagicNumber for your orders identification

   int MagicNumber=123456;

   trade.SetExpertMagicNumber(MagicNumber);

   //--- set available slippage in points when buying/selling

   int deviation=10;

   trade.SetDeviationInPoints(deviation);

   //--- order execution mode

   trade.SetTypeFilling(ORDER_FILLING_RETURN);

   //--- logging mode: it would be better not to declare this method at all, the class will set the best mode on its own

   trade.LogLevel(1);

   //--- what function is to be used for trading: true - OrderSendAsync(), false - OrderSend()

   trade.SetAsyncMode(true);

   //---

   return(0);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

//---

   

  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

   BuySample1();

  }


//--- Buy sample  

//+------------------------------------------------------------------+

//|  Buying a specified volume at the current symbol                 |

//+------------------------------------------------------------------+

void BuySample1()

  {

//--- 1. example of buying at the current symbol

   if(!trade.Buy(0.1))

     {

      //--- failure message

      Print("Buy() method failed. Return code=",trade.ResultRetcode(),

            ". Code description: ",trade.ResultRetcodeDescription());

     }

   else

     {

      Print("Buy() method executed successfully. Return code=",trade.ResultRetcode(),

            " (",trade.ResultRetcodeDescription(),")");

     }

//---

  }

4) エラーログ (EUR/USD でのみテストしていることに注意してください):

GJ 0 19:36:44.410 127.0.0.1 ログイン (ビルド 1730)

HH 0 19:36:44.420 ネットワーク 38520 バイトの口座情報をロード

JO 0 19:36:44.420 ネットワーク 1482 バイトのテスターパラメータをロード

QE 0 19:36:44.420 ネットワーク 188 バイトの入力パラメータをロード

FR 0 19:36:44.421 ネットワーク 443 バイトの記号リストをロード

IF 0 19:36:44.421 テスターエキスパートファイルが追加された: Expertsdemo.ex5.46684バイトがロードされた

QH 0 19:36:44.433 テスター初期預金10000.00 NZD、レバレッジ1:100

JN 0 19:36:44.437 テスターの初期化に成功

ES 0 19:36:44.437 ネットワーク 46 Kb の初期化データを受信

PP 0 19:36:44.437 テスター Intel Core i7-4510U @ 2.00GHz、8103 MB

RJ 0 19:36:44.799 シンボル EURUSD: 同期されるシンボル

HR 0 19:36:44.800 シンボル EURUSD: シンボルが同期、3624 バイトのシンボル情報を受信

NJ 0 19:36:44.800 ヒストリー EURUSD: ヒストリーの同期開始

GO 0 19:36:44.856 History EURUSD: 27バイトのヒストリデータをロードして0:00:00.000に同期します。

RQ 0 19:36:44.856 History EURUSD: 2012.01.01から2017.11.15までの履歴が同期されました。

EF 0 19:36:44.993 History EURUSD,Daily: 履歴キャッシュが1010本分割り当てられ、2014.01.01 00:00 から 2014.12.31 00:00 までの312本が含まれています。

ND 0 19:36:44.993 History EURUSD,Daily: 履歴は2014.01.01 00:00から開始。

OL 0 19:36:44.996 Tester EURUSD,Daily (HalifaxPlus-Live): 毎ティック生成

GN 0 19:36:44.996 Tester EURUSD,Daily: Expertsdemo.ex5の2015.01.01 00:00から2017.11.15 00:00までのテスト開始

CK 0 19:36:56.288 Symbols NZDUSD: 同期されるシンボル

IS 0 19:36:56.288 Symbols NZDUSD: シンボルが同期、3624バイトのシンボル情報を受信

JL 0 19:36:56.288 ヒストリー NZDUSD: ヒストリーの同期開始

HJ 0 19:36:56.575 History NZDUSD: 14 Kbのヒストリデータをロードして0:00:00.078に同期します。

LS 0 19:36:56.575 History NZDUSD: 2013.01.01から2017.11.15までの履歴が同期されました。

CO 0 19:36:56.579 Symbols EURNZD: 同期されるシンボル

OJ 0 19:36:56.580 シンボル EURNZD: シンボルの同期が完了、3624バイトのシンボル情報を受信

DL 0 19:36:56.580 ヒストリー EURNZD: ヒストリーの同期開始

MK 0 19:36:56.656 ヒストリー EURNZD: 27バイトのヒストリーデータをロードし、0:00:00.000に同期します。

OD 0 19:36:56.656 History EURNZD: 2013.01.01から2017.11.15までの履歴が同期されました。

IN 0 19:36:56.665 トレード 2015.01.02 03:00:00 マーケット買い 0.10 EURUSD (1.20538 / 1.20549 / 1.20538)

PE 0 19:36:56.665トレード2015.01.02 03:00:00取引#2買い0.10 EURUSD at 1.20549完了(注文#2に基づく)

FH 0 19:36:56.666 トレード 2015.01.02 03:00:00 ディール実行 [#2 buy 0.10 EURUSD at 1.20549] (注文 #2 に基づく)

OG 0 19:36:56.666 Trade 2015.01.02 03:00:00 order performed buy 0.10 at 1.20549 [#2 buy 0.10 EURUSD at 1.20549].

FO 0 19:36:56.670 demo (EURUSD,D1) 2015.01.02 03:00:00 Buy()メソッドが正常に実行されました。リターンコード=10009 (1.20549で実行)

NM 2 19:37:15.823 History NZDUSD 2016.09.21 23:01:00: corrupted history detected (s:-73370, o:73433, h:+48, l:-123, c:-117 -- tv:63, rv:11250111).

JF 2 19:37:15.823 History NZDUSD 2016.09.21, バッドコンテナが見つかりました。

LQ 2 19:37:16.106 テスター履歴 未定義関数でエラー9

OH 2 19:37:16.106 Tester stopped on 0% of testing interval with error '20 NZDUSD'.


何が間違っているのか、どうすれば解決できるのか教えてください。

削除済み  
pdev:

こんにちは、とても参考になる投稿をありがとうございます。私はMT5初心者で、EAの作成について勉強中なので、サンプルコードをコピーしてCtrade.Buyを実行しましたが、バックテストに失敗しました。詳細は以下の通りです:


1) 口座:基本通貨をNZDとしたライブ口座です。

2) バックテスト用のMetaEditor設定:


3) コードhttps://www.mql5.com/ja/articles/481 からコピー:


//+------------------------------------------------------------------+

//|                                                         demo.mq5 |

//|                        Copyright 2017, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2017, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"

#include<Trade\Trade.mqh>


//--- object for performing trade operations

CTrade  trade;

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit()

  {

   //--- set MagicNumber for your orders identification

   int MagicNumber=123456;

   trade.SetExpertMagicNumber(MagicNumber);

   //--- set available slippage in points when buying/selling

   int deviation=10;

   trade.SetDeviationInPoints(deviation);

   //--- order execution mode

   trade.SetTypeFilling(ORDER_FILLING_RETURN);

   //--- logging mode: it would be better not to declare this method at all, the class will set the best mode on its own

   trade.LogLevel(1);

   //--- what function is to be used for trading: true - OrderSendAsync(), false - OrderSend()

   trade.SetAsyncMode(true);

   //---

   return(0);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

//---

   

  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

   BuySample1();

  }


//--- Buy sample  

//+------------------------------------------------------------------+

//|  Buying a specified volume at the current symbol                 |

//+------------------------------------------------------------------+

void BuySample1()

  {

//--- 1. example of buying at the current symbol

   if(!trade.Buy(0.1))

     {

      //--- failure message

      Print("Buy() method failed. Return code=",trade.ResultRetcode(),

            ". Code description: ",trade.ResultRetcodeDescription());

     }

   else

     {

      Print("Buy() method executed successfully. Return code=",trade.ResultRetcode(),

            " (",trade.ResultRetcodeDescription(),")");

     }

//---

  }

4) エラーログ (EUR/USD でのみテストしていることに注意してください):

GJ 0 19:36:44.410 127.0.0.1 ログイン (ビルド 1730)

HH 0 19:36:44.420 ネットワーク 38520 バイトの口座情報をロード

JO 0 19:36:44.420 ネットワーク 1482 バイトのテスターパラメータをロード

QE 0 19:36:44.420 ネットワーク 188 バイトの入力パラメータをロード

FR 0 19:36:44.421 ネットワーク 443 バイトの記号リストをロード

IF 0 19:36:44.421 テスターエキスパートファイルが追加された: Expertsdemo.ex5.46684バイトがロードされた

QH 0 19:36:44.433 テスター初期預金10000.00 NZD、レバレッジ1:100

JN 0 19:36:44.437 テスターの初期化に成功

ES 0 19:36:44.437 ネットワーク 46 Kb の初期化データを受信

PP 0 19:36:44.437 テスター Intel Core i7-4510U @ 2.00GHz、8103 MB

RJ 0 19:36:44.799 シンボル EURUSD: 同期されるシンボル

HR 0 19:36:44.800 シンボル EURUSD: シンボルが同期、3624 バイトのシンボル情報を受信

NJ 0 19:36:44.800 ヒストリー EURUSD: ヒストリーの同期開始

GO 0 19:36:44.856 History EURUSD: 27バイトのヒストリデータをロードして0:00:00.000に同期します。

RQ 0 19:36:44.856 History EURUSD: 2012.01.01から2017.11.15までの履歴が同期されました。

EF 0 19:36:44.993 History EURUSD,Daily: 履歴キャッシュが1010本分割り当てられ、2014.01.01 00:00 から 2014.12.31 00:00 までの312本が含まれています。

ND 0 19:36:44.993 History EURUSD,Daily: 履歴は2014.01.01 00:00から開始。

OL 0 19:36:44.996 Tester EURUSD,Daily (HalifaxPlus-Live): 毎ティック生成

GN 0 19:36:44.996 Tester EURUSD,Daily: Expertsdemo.ex5の2015.01.01 00:00から2017.11.15 00:00までのテスト開始

CK 0 19:36:56.288 Symbols NZDUSD: 同期されるシンボル

IS 0 19:36:56.288 Symbols NZDUSD: シンボルが同期、3624バイトのシンボル情報を受信

JL 0 19:36:56.288 ヒストリー NZDUSD: ヒストリーの同期開始

HJ 0 19:36:56.575 History NZDUSD: 14 Kbのヒストリデータをロードして0:00:00.078に同期します。

LS 0 19:36:56.575 History NZDUSD: 2013.01.01から2017.11.15までの履歴が同期されました。

CO 0 19:36:56.579 Symbols EURNZD: 同期されるシンボル

OJ 0 19:36:56.580 シンボル EURNZD: シンボルの同期が完了、3624バイトのシンボル情報を受信

DL 0 19:36:56.580 ヒストリー EURNZD: ヒストリーの同期開始

MK 0 19:36:56.656 ヒストリー EURNZD: 27バイトのヒストリーデータをロードし、0:00:00.000に同期します。

OD 0 19:36:56.656 History EURNZD: 2013.01.01から2017.11.15までの履歴が同期されました。

IN 0 19:36:56.665 トレード 2015.01.02 03:00:00 マーケット買い 0.10 EURUSD (1.20538 / 1.20549 / 1.20538)

PE 0 19:36:56.665トレード2015.01.02 03:00:00取引#2買い0.10 EURUSD at 1.20549完了(注文#2に基づく)

FH 0 19:36:56.666 トレード 2015.01.02 03:00:00 ディール実行 [#2 buy 0.10 EURUSD at 1.20549] (注文 #2 に基づく)

OG 0 19:36:56.666 Trade 2015.01.02 03:00:00 order performed buy 0.10 at 1.20549 [#2 buy 0.10 EURUSD at 1.20549].

FO 0 19:36:56.670 demo (EURUSD,D1) 2015.01.02 03:00:00 Buy()メソッドが正常に実行されました。リターンコード=10009 (1.20549で実行)

NM 2 19:37:15.823 History NZDUSD 2016.09.21 23:01:00: corrupted history detected (s:-73370, o:73433, h:+48, l:-123, c:-117 -- tv:63, rv:11250111).

JF 2 19:37:15.823 History NZDUSD 2016.09.21, バッドコンテナが見つかりました。

LQ 2 19:37:16.106 テスター履歴 未定義関数でエラー9

OH 2 19:37:16.106 Tester stopped on 0% of testing interval with error '20 NZDUSD'.


何が間違っているのか、どうすれば解決できるのか教えてください。

 

指値注文と逆指値注文をあちこちで開いたときの記事で

double price=1000*point;

と書いている人は、記事のコードを挿入しているの だろうか?