新しいビルド604でのテスターは正しく動作しません。 - ページ 4 1234567891011...13 新しいコメント Ian Venner 2014.02.10 23:48 #31 このシンプルなEAは、MQデモ口座444の509と604で、同じ日付でバックテストを行うために作成されました。 EAは買い売り交互にトレードを行う 固定SL/TP。口座 残高に基づくロットサイジング。以下ソースコード。 509は509でコンパイルし、509でテストしました。 600は604でコンパイルし、604でテストしています。 ストラテジーテスターレポート テストEA 509 MetaQuotes-新MT4テスト(ビルド509) シンボルEURUSD (ユーロ vs 米ドル) 期間1時間(H1) 2013.10.14 06:00 - 2013.12.30 23:00 (2013.01.01~2013.12.31)です。 モデルすべてのティック(利用可能なすべての最小タイムフレームに基づく最も正確な方法) テスト中のバー1384モデル化されたティック1448514モデリング品質46.42% ミスマッチ・チャート・エラー0 初期預金10000.00 総純利益-1199.25総利益20200.90総損失-21400.15 利益率0.94期待ペイオフ-8.75 絶対的ドローダウン2515.20最大ドローダウン3725.52 (33.23%)相対ドローダウン33.23% (3725.52) 総トレード数137ショートポジション (勝率)68 (41.18%)ロングポジション(ウォン)69 (44.93%) 利益取引 (%)59 (43.07%)損失取引 (全体に占める割合)78 (56.93%) 最大利益取引394.33損失トレード-337.74 平均値利益取引342.39損切り取引-274.36 最大連勝(儲け)4 (1494.97)連続損失(資金での損失)12 (-3337.77) 最大連続利益(勝利数)1494.97 (4)連続損失(損失額カウント)-3337.77 (12) 平均値連勝2連敗2 平均値連勝2連敗2 新しいEA BooYa!!!またまたFXでハイテンションになっちゃいました :)) キタ━━━━━━(゚∀゚)━━━━━━ !!!!やっとこさ Ian Venner 2014.02.10 23:48 #32 ストラテジーテスターレポート テストEA 600+ MetaQuotes-新MT4テスト(ビルド604) シンボルEURUSD (ユーロ vs 米ドル) 期間1時間(H1) 2013.10.14 06:00 - 2013.12.30 23:00 (2013.01.01~2013.12.31)です。 モデルすべてのティック(利用可能なすべての最小タイムフレームに基づく最も正確な方法) テスト中のバー1384モデル化されたティック1459801モデリング品質46.42% ミスマッチ・チャート・エラー0 初期預金10000.00スプレッド現在 (6) 総純利益-1985.08売上総利益19147.44売上総損失-21132.52 利益率0.91期待ペイオフ-14.81 絶対値ドローダウン2677.75最大ドローダウン4021.28 (35.45%)相対ドローダウン35.45% (4021.28) 総取引数134ショートポジション (勝率)67 (40.30%)ロングポジション (ウォン)67 (44.78%) 利益取引 (%)57 (42.54%)損失トレード (全体に占める割合)77 (57.46%) 最大利益取引394.33損失トレード-337.74 平均値利益トレード335.92損切り取引-274.45 最大連勝(儲け)4 (1494.97)連続損失(損失額)12 (-3336.50) 最大連続利益(勝利数)1494.97 (4)連続損失(損失額カウント)-3336.50 (12) 平均値連勝2連敗2 EAのご提案(負けから利益へ) Tester in new build 新しいEA Ian Venner 2014.02.10 23:52 #33 //======================================================================== //| Test EA 509.mq4 | //| Copyright 2014, SDC | //| https://www.mql5.com/en/users/sdc | //======================================================================== #property copyright "Copyright 2014, SDC" #property link "https://www.mql5.com/en/users/sdc" //======================================================================== int start() //======================================================================== { //---- static int ticket; //---- if(OrderSelect(ticket,SELECT_BY_TICKET)) {if(OrderCloseTime()<=0) //-------------------- last order is still open {return(0); }else //------------------------------------------ last order is closed {if(OrderType()==0) ticket = maketrade(1); if(OrderType()==1) ticket = maketrade(0); }}else //-------------------------------------- cant find previous order {ticket = maketrade(0); } //---- return(0); } //======================================================================== int maketrade(int op) //======================================================================== { int errcnt=0; int mn = 777; int ticket=0; double lot=lots(); double price=0; double sl=30; double tp=40; //---- if(lot<=0)return(0); if(Digits == 5 || Digits ==3) {sl*=10; tp*=10; } if(op == 0) {price = Ask; tp = Bid + tp*Point; sl = Bid - sl*Point; } if(op == 1) {price = Bid; tp = Ask - tp*Point; sl = Ask + sl*Point; } while(ticket < 1) {ticket=OrderSend(Symbol(),op,lot,price,0,sl,tp,"",mn,0,Gold); if(ticket>0)return(ticket); else errcnt++; if(errcnt>2)return(0); //-------------------------------- 3 tries abort if(errors(GetLastError())==1) continue; //------------------- try again else return(-1); } //---- return(0); } //======================================================================== double lots() //---- generic lot sizing //======================================================================== { string pair = Symbol(); double free = AccountFreeMargin(); double maxlot = MarketInfo(pair,MODE_MAXLOT); double minlot = MarketInfo(pair,MODE_MINLOT); double onelot = MarketInfo(pair,MODE_MARGINREQUIRED); double lot = AccountBalance()/10000; double newlot = 0; double step = MarketInfo(pair,MODE_LOTSTEP); //---- if(lot*onelot < free) newlot=MathFloor(lot/step)*step; else newlot=MathFloor(free/onelot/step)*step; if(newlot > maxlot) newlot = maxlot; if(newlot < minlot) newlot = minlot; if(newlot*onelot < free) return(newlot); //---- return(0); } //======================================================================== int errors(int error) //---- generic errror handling //======================================================================== { Print("Test EA 509 Error: ",error); if(error==0) return(0); switch(error) { //recoverable error case 129: RefreshRates(); return(1); //---- wrong price case 135: RefreshRates(); return(1); //-- price changed case 136: while(RefreshRates()==false) Sleep(1); return(1); //------ no quotes case 138: RefreshRates(); return(1); //-------- requote case 146: Sleep(500); RefreshRates(); return(1); //---- system busy //logical error case 130: return(2); //-- invalid stops case 4108: return(2); //- invalid ticket //critical error case 2: return(3); //--- common error case 5: return(3); //---- version old case 64: return(3); //---- acc blocked case 133: return(3); //----- prohibited default : return(3); //---- other error } //---- return(0); } //======================================================================== Ian Venner 2014.02.10 23:56 #34 //======================================================================== //| Test EA 600+.mq4 | //| Copyright 2014, SDC | //| https://www.mql5.com/en/users/sdc | //======================================================================== #property copyright "Copyright 2014, SDC" #property link "https://www.mql5.com/en/users/sdc" #property version "1.00" #property strict //======================================================================== void OnTick() //======================================================================== { //---- static int ticket; //---- if(OrderSelect(ticket,SELECT_BY_TICKET)) {if(OrderCloseTime()<=0) //-------------------- last order is still open {return; }else //------------------------------------------ last order is closed {if(OrderType()==0) ticket = maketrade(1); if(OrderType()==1) ticket = maketrade(0); }}else //-------------------------------------- cant find previous order {ticket = maketrade(0); } //---- return; } //======================================================================== int maketrade(int op) //======================================================================== { int errcnt=0; int mn = 777; int ticket=0; double lot=lots(); double price=0; double sl=30; double tp=40; //---- if(lot<=0)return(0); if(Digits == 5 || Digits ==3) {sl*=10; tp*=10; } if(op == 0) {price = Ask; tp = Bid + tp*Point; sl = Bid - sl*Point; } if(op == 1) {price = Bid; tp = Ask - tp*Point; sl = Ask + sl*Point; } while(ticket < 1) {ticket=OrderSend(Symbol(),op,lot,price,0,sl,tp,"",mn,0,Gold); if(ticket>0)return(ticket); else errcnt++; if(errcnt>2)return(0); //-------------------------------- 3 tries abort if(errors(GetLastError())==1) continue; //------------------- try again else return(-1); } //---- return(0); } //======================================================================== double lots() //---- generic lot sizing //======================================================================== { string pair = Symbol(); double free = AccountFreeMargin(); double maxlot = MarketInfo(pair,MODE_MAXLOT); double minlot = MarketInfo(pair,MODE_MINLOT); double onelot = MarketInfo(pair,MODE_MARGINREQUIRED); double lot = AccountBalance()/10000; double newlot = 0; double step = MarketInfo(pair,MODE_LOTSTEP); //---- if(lot*onelot < free) newlot=MathFloor(lot/step)*step; else newlot=MathFloor(free/onelot/step)*step; if(newlot > maxlot) newlot = maxlot; if(newlot < minlot) newlot = minlot; if(newlot*onelot < free) return(newlot); //---- return(0); } //======================================================================== int errors(int error) //---- generic errror handling //======================================================================== { Print("Test EA 600+ Error: ",error); if(error==0) return(0); switch(error) { //recoverable error case 129: RefreshRates(); return(1); //---- wrong price case 135: RefreshRates(); return(1); //-- price changed case 136: while(RefreshRates()==false) Sleep(1); return(1); //------ no quotes case 138: RefreshRates(); return(1); //-------- requote case 146: Sleep(500); RefreshRates(); return(1); //---- system busy //logical error case 130: return(2); //-- invalid stops case 4108: return(2); //- invalid ticket //critical error case 2: return(3); //--- common error case 5: return(3); //---- version old case 64: return(3); //---- acc blocked case 133: return(3); //----- prohibited default : return(3); //---- other error } //---- return(0); } //======================================================================== Ian Venner 2014.02.11 00:06 #35 509 グラフ 604 グラフ Ian Venner 2014.02.11 05:35 #36 同じサーバーでベータテスト版を動かしていたため(デモ口座は 違いますが)、おそらくライブフィードデータにギャップがあり、テストに支障をきたしているのだと思われます。チャート履歴を削除して、両方の端末に同じチャート履歴をダウンロードさせて、テストをやり直そうと思います。 Edit: それ自体が試練になることは分かっていたかもしれません。MQは1974年からの1分足チャートデータを持っているのはいいのだが、全部はいらない!!!。私の端末は今、700MBのRAMを動かしています*rollseyes*。 削除済み 2014.02.11 10:17 #37 SDC: 同じサーバーでベータテスト版を動かしていたため(デモ口座は違いますが)、おそらくライブフィードデータにギャップがあり、テストに支障をきたしているのだと思われます。チャート履歴を削除して、両方の端末に同じチャート履歴をダウンロードさせて、テストをやり直そうと思います。 Edit: それ自体が試練になることは分かっていたかもしれません。MQは1974年からの1分足チャートデータを持っているのはいいのだが、全部はいらない!!!。そのように、あなたは全く持っていないか、またはあなたのPCでシルコンバレーの半分を必要とするように多くのことができます!私の端末は現在700MB RAM *rollseyes*を実行しています。 こんにちは、M15とM1のテストを試してみてください。 このコードで使用されているインジケータを見ることができませんでした。 604の可能性のある問題は、指標や他の数値のために、いくつかの数値の精度が失われることです。 2つの環境の変数の正確な値を比較するための数値テスト方法を開発する必要があります。 ydrol 2014.02.11 10:28 #38 おそらく問題の根本的な原因ではないと思いますが、60xではどこかにResetLastError()を含める必要があるのでしょうか?(whileループ内の最初のコマンド?) Ian Venner 2014.02.11 13:16 #39 cbalta: 古いmq4から新しいものにコードを変換しましたか? 新しいmq4に変換した古い複雑なmq4 EAで試してみてください。このコードで使用されているインジケータは見当たりませんでしたが...。 604の問題点は、インジケータや他の数値の精度が落ちることです。2つの環境で変数の正確な値を比較するための数値テスト方法を開発する必要があるのですが... 私は投稿した同じソースコードを使いました。509のテストコードを509 Metaeditorでコンパイルし、600のソースコードを604 Metaeditorでコンパイルしました。2つの違いは、新しいものは void OnTick() を使い、古いものは start() を使っていることだけです。 私は、これが未知の可能性ができるだけ少ない基本的なテストであることを望んだので、私はどんな指標も使いませんでした。あなたがテストパラメータを 広げたいなら、指標と他の取引基準を使うためにEAを修正することができます。 Ian Venner 2014.02.11 13:19 #40 ydrol: おそらく問題の根本的な原因ではないと思いますが、60xではどこかにResetLastError()を含める必要があるのでしょうか?(whileループ内の最初のコマンド?) 必要なのかよくわからないのですが?私はそれを調べます、EAはエラーなしでテストを実行したので、私は新しいターミナルでGetLastError()がどのように実行されるかを見ることができませんでした。RAMの使用量が多い(最大1GB以上)のは、履歴センターでダウンロードボタンを押したときに、metaquotesデモサーバーからダウンロードされた何十もの1分チャートデータのためで、そのうちのいくつかを削除しなければならなかったのです。 1234567891011...13 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
このシンプルなEAは、MQデモ口座444の509と604で、同じ日付でバックテストを行うために作成されました。
509 グラフ
604 グラフ
同じサーバーでベータテスト版を動かしていたため(デモ口座は 違いますが)、おそらくライブフィードデータにギャップがあり、テストに支障をきたしているのだと思われます。チャート履歴を削除して、両方の端末に同じチャート履歴をダウンロードさせて、テストをやり直そうと思います。
Edit: それ自体が試練になることは分かっていたかもしれません。MQは1974年からの1分足チャートデータを持っているのはいいのだが、全部はいらない!!!。私の端末は今、700MBのRAMを動かしています*rollseyes*。
同じサーバーでベータテスト版を動かしていたため(デモ口座は違いますが)、おそらくライブフィードデータにギャップがあり、テストに支障をきたしているのだと思われます。チャート履歴を削除して、両方の端末に同じチャート履歴をダウンロードさせて、テストをやり直そうと思います。
Edit: それ自体が試練になることは分かっていたかもしれません。MQは1974年からの1分足チャートデータを持っているのはいいのだが、全部はいらない!!!。そのように、あなたは全く持っていないか、またはあなたのPCでシルコンバレーの半分を必要とするように多くのことができます!私の端末は現在700MB RAM *rollseyes*を実行しています。
こんにちは、M15とM1のテストを試してみてください。
このコードで使用されているインジケータを見ることができませんでした。
604の可能性のある問題は、指標や他の数値のために、いくつかの数値の精度が失われることです。
2つの環境の変数の正確な値を比較するための数値テスト方法を開発する必要があります。
おそらく問題の根本的な原因ではないと思いますが、60xではどこかにResetLastError()を含める必要があるのでしょうか?(whileループ内の最初のコマンド?)
古いmq4から新しいものにコードを変換しましたか? 新しいmq4に変換した古い複雑なmq4 EAで試してみてください。
このコードで使用されているインジケータは見当たりませんでしたが...。
604の問題点は、インジケータや他の数値の精度が落ちることです。
2つの環境で変数の正確な値を比較するための数値テスト方法を開発する必要があるのですが...
私は投稿した同じソースコードを使いました。509のテストコードを509 Metaeditorでコンパイルし、600のソースコードを604 Metaeditorでコンパイルしました。2つの違いは、新しいものは void OnTick() を使い、古いものは start() を使っていることだけです。
私は、これが未知の可能性ができるだけ少ない基本的なテストであることを望んだので、私はどんな指標も使いませんでした。あなたがテストパラメータを 広げたいなら、指標と他の取引基準を使うためにEAを修正することができます。
おそらく問題の根本的な原因ではないと思いますが、60xではどこかにResetLastError()を含める必要があるのでしょうか?(whileループ内の最初のコマンド?)