MetaQuotes Language 5 (MQL5) - язык программирования технических индикаторов, торговых роботов и вспомогательных приложений для автоматизации торговли на финансовых рынках. MQL5 является современным языком высокого уровня и разработан MetaQuotes Software Corp. для собственной торгово-информационной платформы. Синтаксис языка максимально близок...
UPD:Rashidが上記のライブラリファイルを投稿してくれた。標準ライブラリにエラーがあるのは悲しいことです。ライブラリを置き換えることなく、EAで直接いくつかの変更を加えることが可能かどうかを比較検討し、すべてが機能するようにしたいと思います。
これらの編集はすでに標準ライブラリに あります。記事を読んでくださる方には、今だけお答えすることにしました。
いいね、実にいいものだ。
皆さんこんにちは!
私はプログラミング言語MQL5の 勉強を続けています。自分にとって有益な情報を求めて、ほとんど全てのサイトを検索しました。サイトにある情報のほとんどは、すでにプログラミングの基本的な理解を持っている人向けです。
そしてこちら!多くのことを理解し、自分のEAを改良するのに役立った! 著者がこのシリーズを書き続けず、2012年だけに限定したのは残念だ。しかし、同じように、私はこの人に大きな敬意を 表し、すべての初心者を代表して同じように大きな ありがとうを言います!
敬意を込めて、ウラジミール。
こんにちは、とても参考になる投稿をありがとうございます。私は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'.
何が間違っているのか、どうすれば解決できるのか教えてください。
こんにちは、とても参考になる投稿をありがとうございます。私は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'.
何が間違っているのか、どうすれば解決できるのか教えてください。
指値注文と逆指値注文をあちこちで開いたときの記事で
と書いている人は、記事のコードを挿入しているの だろうか?