エラー、バグ、質問 - ページ 1343 1...133613371338133913401341134213431344134513461347134813491350...3185 新しいコメント StrategyTester 2015.08.14 01:35 #13421 StrategyTester:こんにちは。MT5とそのテスターについての質問です。私は自分で書いた多通貨のExpert Advisorを持っていて、2つの通貨ペアの間のいくつかの比率を計算する自分で書いた多通貨のインディケータを 呼び出すようにしています。テストとデバッギング中に問題が見つかりました。ターミナルでは、ある瞬間、ライン「A」がライン「B」より高くなり、ストラテジーテスターでは、同じ瞬間、同じインディケータの設定、視覚化をオンにすると、ライン「A」がライン「B」より低くなります。また、一般的に、ターミナルでのインジケーターラインの外観は、ストラテジーテスターでのそれとは根本的に異なります。質問:MT5 Testerの不具合なのか、コードのエラーなのか?はっきり言いますが、インジケーターの再描画が表示されているのです。 StrategyTester 2015.08.14 02:18 #13422 Karputov Vladimir: 常にインジケータは端末にあるように描かれています。テスターでは、いくつかのモード(すべてのティック、数学的価格など)を試す必要があるかもしれません。 全ティック」、「M1のOHLC」、「始値のみ」を試してみました。結果は同じで、インジケータは再描画されます。オプションの「数学的計算」はアクティブではなく、使用できません。 Vladimir Karputov 2015.08.14 03:34 #13423 StrategyTester: 全ティック」、「M1のOHLC」、「始値のみ」を試しました。結果は同じで、インジケータは再描画されます。オプションの「数学的計算」はアクティブではなく、使用できません。 その場合、コードの提供をお願いします。 Alexey Navoykov 2015.08.14 11:27 #13424 開発者への質問:どのような場合にシンボルの履歴が非同期とみなされるか、すなわちSeriesInfoInteger(symbol, period,SERIES_SYNCHRONIZED) が false を返すか。ポイントは、あるシンボルについて履歴があるにもかかわらず、すべてのタイムフレームで偽の値が返される状況に時々遭遇することです(Barsや他の関数がゼロ以外の値を返す)。 何が原因なのでしょうか? Alexey Navoykov 2015.08.14 11:54 #13425 そんな問題もあります。CopyTime、CopyCloseなどを通じて、インジケータ内の複数のシンボル/タイムフレームの履歴を読み込むと、インジケータがしばしば点滅します。これはレンダリングの結果ではなく(バーの再計算は行われない)、単に画像全体が数秒間のうちに消え、再び現れるものです。 また、数秒ではなく、まるまる数秒続くこともあります。 通常、チャートをスクロールする際に観察される現象です。要求された時系列が小さい場合は、この問題は発生しません。これがどう関係するのか、開発者のコメントを聞きたいものです。 StrategyTester 2015.08.15 10:14 #13426 Karputov Vladimir: その場合、コードの提供をお願いします。端末とテスターの違いとインジケーターのコードのイラストを同封します。//+------------------------------------------------------------------+ //| Indicator1_6test.mq5 | //+------------------------------------------------------------------+ #property copyright "" #property link "" #property version "1.6" #property indicator_separate_window #property indicator_separate_window #property indicator_buffers 2 #property indicator_plots 2 #property indicator_color1 SkyBlue #property indicator_color2 Yellow #property indicator_type1 DRAW_LINE #property indicator_type2 DRAW_LINE //--- enum TT{_close=0,_open=1,_high=2,_low=3}; //--- input string activ1="GBPUSD",activ2="EURUSD"; input TT PriceType=_close; input int Len=100; //--- double ratio[],avr[];string NN[]={"rr1","rr2","aa1","aa2"}; //--- void setv(int i,double v){ObjectSetDouble(0,NN[i],OBJPROP_PRICE,v);} //--- int OnInit() { SetIndexBuffer(0,ratio); PlotIndexSetString(0,PLOT_LABEL,"Ratio"); SetIndexBuffer(1,avr); PlotIndexSetString(1,PLOT_LABEL,"Avr"); ArraySetAsSeries(ratio,1); ArraySetAsSeries(avr,1); for(int i=0;i<4;i++)ObjectCreate(0,NN[i],22,0,0,0); return(INIT_SUCCEEDED); } //--- int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int limit=0;double zz[4]; if(prev_calculated==0){limit=MathMin(Bars(activ1,0),Bars(activ2,0));limit--;} else limit=rates_total-prev_calculated; if(limit==0)limit=1; double Price1[],Price2[]; ArraySetAsSeries(Price1,1); ArraySetAsSeries(Price2,1); getV(Price1,Price2,limit); for(int i=0;i<limit;i++){if(Price1[i]>0&&Price2[i]>0)ratio[i]=Price1[i]/Price2[i];else ratio[i]=ratio[i+1];} double sred=0,sum=0; for(int i=0;i<limit;i++) { sred=0; avr[i]=SimpleMA(i,Len,ratio); for(int j=i;j<i+Len;j++) { if(j>=ArraySize(ratio))break; if(ratio[j]==0||ratio[j]==EMPTY_VALUE){sred=0;break;} sred=1; } } if(prev_calculated!=0)for(int i=0;i<10;i++)if(ratio[i]==0)ratio[i]=ratio[i+1]; zz[0]=ratio[1];zz[1]=ratio[2]; zz[2]=avr[1];zz[3]=avr[2]; for(int i=0;i<4;i++)setv(i,zz[i]); return(rates_total); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void getV(double&Price1[],double&Price2[],int limit) { if(PriceType==_close){CopyClose(activ1,PERIOD_CURRENT,0,limit,Price1);CopyClose(activ2,PERIOD_CURRENT,0,limit,Price2);} if(PriceType==_open){CopyOpen(activ1,PERIOD_CURRENT,0,limit,Price1);CopyOpen(activ2,PERIOD_CURRENT,0,limit,Price2);} if(PriceType==_high){CopyHigh(activ1,PERIOD_CURRENT,0,limit,Price1);CopyHigh(activ2,PERIOD_CURRENT,0,limit,Price2);} if(PriceType==_low){CopyLow(activ1,PERIOD_CURRENT,0,limit,Price1);CopyLow(activ2,PERIOD_CURRENT,0,limit,Price2);} } //--- double SimpleMA(const int position,const int period,const double &price[]) { //--- double result=0.0; //--- check position //--- calculate value if(position+period+1>ArraySize(price))return(0); for(int i=0; i<period; i++) result+=price[position+i]; result/=period; return(result); } //--- Vladimir Pastushak 2015.08.15 10:30 #13427 一般的に関数で Copyは別の問題がある。 この関数が呼ばれると、EAが「フリーズ」することがあるという事実を知り、大量のシンボルを使ってプログラムを書き、各シンボルの文字通り過去3日間の履歴で計算を行いました。以前、数分間すべてがハングアップする瞬間がありましたが、それがコピー機能のせいだとほとんど分かりませんでした。 この機能は、150~200のシンボルを安全に処理した後にハングアップし、別のシンボルでもハングアップします...。ハングアップ時間は5秒から2〜3分まで...。 Renat Fatkhullin 2015.08.15 10:36 #13428 EAのコピー関数は同期式であり、利用できない場合はデータのページングを期待する。 Vladimir Karputov 2015.08.15 10:49 #13429 StrategyTester:端子とテスターの違いとインジケーターのコードの説明図を添付します。関数にエラーがあります。//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void getV(double&Price1[],double&Price2[],int limit) { if(PriceType==_close) { CopyClose(activ1,PERIOD_CURRENT,0,limit,Price1); CopyClose(activ2,PERIOD_CURRENT,0,limit,Price2); } if(PriceType==_open) { CopyOpen(activ1,PERIOD_CURRENT,0,limit,Price1); CopyOpen(activ2,PERIOD_CURRENT,0,limit,Price2); } if(PriceType==_high) { CopyHigh(activ1,PERIOD_CURRENT,0,limit,Price1); CopyHigh(activ2,PERIOD_CURRENT,0,limit,Price2); } if(PriceType==_low) { CopyLow(activ1,PERIOD_CURRENT,0,limit,Price1); CopyLow(activ2,PERIOD_CURRENT,0,limit,Price2); } }急いで他のシンボルのデータをコピーしようとしている。してはいけません。まず、データをダウンロードし、準備し、チェックする必要がある...。ここでは、データアクセスの整理について 説明します。 StrategyTester 2015.08.15 11:09 #13430 Karputov Vladimir:関数にエラーがあります。急いで他のキャラクターのデータをコピーしようとしている。これではいけない。まず、データを読み込み、準備し、確認する必要があります。以下は、「データアクセスの整理」の説明です。 ご指摘ありがとうございます。拝見させていただきます。 1...133613371338133913401341134213431344134513461347134813491350...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
こんにちは。
MT5とそのテスターについての質問です。
私は自分で書いた多通貨のExpert Advisorを持っていて、2つの通貨ペアの間のいくつかの比率を計算する自分で書いた多通貨のインディケータを 呼び出すようにしています。テストとデバッギング中に問題が見つかりました。ターミナルでは、ある瞬間、ライン「A」がライン「B」より高くなり、ストラテジーテスターでは、同じ瞬間、同じインディケータの設定、視覚化をオンにすると、ライン「A」がライン「B」より低くなります。また、一般的に、ターミナルでのインジケーターラインの外観は、ストラテジーテスターでのそれとは根本的に異なります。質問:MT5 Testerの不具合なのか、コードのエラーなのか?
はっきり言いますが、インジケーターの再描画が表示されているのです。
常にインジケータは端末にあるように描かれています。テスターでは、いくつかのモード(すべてのティック、数学的価格など)を試す必要があるかもしれません。
全ティック」、「M1のOHLC」、「始値のみ」を試しました。結果は同じで、インジケータは再描画されます。オプションの「数学的計算」はアクティブではなく、使用できません。
開発者への質問:どのような場合にシンボルの履歴が非同期とみなされるか、すなわちSeriesInfoInteger(symbol, period,SERIES_SYNCHRONIZED) が false を返すか。
ポイントは、あるシンボルについて履歴があるにもかかわらず、すべてのタイムフレームで偽の値が返される状況に時々遭遇することです(Barsや他の関数がゼロ以外の値を返す)。 何が原因なのでしょうか?
そんな問題もあります。CopyTime、CopyCloseなどを通じて、インジケータ内の複数のシンボル/タイムフレームの履歴を読み込むと、インジケータがしばしば点滅します。これはレンダリングの結果ではなく(バーの再計算は行われない)、単に画像全体が数秒間のうちに消え、再び現れるものです。 また、数秒ではなく、まるまる数秒続くこともあります。 通常、チャートをスクロールする際に観察される現象です。要求された時系列が小さい場合は、この問題は発生しません。
これがどう関係するのか、開発者のコメントを聞きたいものです。
その場合、コードの提供をお願いします。
端末とテスターの違いとインジケーターのコードのイラストを同封します。
一般的に関数で
Copy
は別の問題がある。
この関数が呼ばれると、EAが「フリーズ」することがあるという事実を知り、大量のシンボルを使ってプログラムを書き、各シンボルの文字通り過去3日間の履歴で計算を行いました。
以前、数分間すべてがハングアップする瞬間がありましたが、それがコピー機能のせいだとほとんど分かりませんでした。 この機能は、150~200のシンボルを安全に処理した後にハングアップし、別のシンボルでもハングアップします...。
ハングアップ時間は5秒から2〜3分まで...。
端子とテスターの違いとインジケーターのコードの説明図を添付します。
関数にエラーがあります。
急いで他のシンボルのデータをコピーしようとしている。してはいけません。まず、データをダウンロードし、準備し、チェックする必要がある...。ここでは、データアクセスの整理について 説明します。
関数にエラーがあります。
急いで他のキャラクターのデータをコピーしようとしている。これではいけない。まず、データを読み込み、準備し、確認する必要があります。以下は、「データアクセスの整理」の説明です。