エラー、バグ、質問 - ページ 561 1...554555556557558559560561562563564565566567568...3185 新しいコメント Alexey 2011.11.06 14:03 #5601 ArrayInitializeが 動作しないコードが添付されていますが、ループのコメントを解除すると、すべてうまくいきます。また、クラス内の変数とグローバルレベルのインジケータを同じ名前で宣言した場合、警告が表示されます。#property indicator_separate_window #property indicator_buffers 2 #property indicator_plots 2 //--- plot Line1 #property indicator_label1 "Line1" #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- plot Line2 #property indicator_label2 "Line2" #property indicator_type2 DRAW_LINE #property indicator_color2 clrBlue #property indicator_style2 STYLE_SOLID #property indicator_width2 1 //--- indicator buffers double Line1Buffer[]; double Line2Buffer[]; //+------------------------------------------------------------------+ int OnInit() { SetIndexBuffer(0,Line1Buffer,INDICATOR_DATA); SetIndexBuffer(1,Line2Buffer,INDICATOR_DATA); ArraySetAsSeries(Line1Buffer,true) ; ArraySetAsSeries(Line2Buffer,true) ; ArrayInitialize(Line1Buffer,EMPTY_VALUE) ; ArrayInitialize(Line2Buffer,EMPTY_VALUE); return(0); } //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { ArraySetAsSeries(price,true) ; int i ; /* for(i=0; i<rates_total;i++) { Line1Buffer[i]=EMPTY_VALUE; Line2Buffer[i]=EMPTY_VALUE ; }*/ for(i=0;i<100;i++) { Line1Buffer[i]=price[i] ; } return(rates_total); } //+------------------------------------------------------------------+ x572intraday 2011.11.07 04:46 #5602 週末、ティックがない間に、私はデモ口座でこのインディケータをデバッグし、MT5ターミナルの2つのインスタンスの最後のビルドで実行しました。設定はどこでも同じです。念のため、オフラインで確認しましたので、ティック要素は除外しています。問題は、「アンダー・インディケータ」の最も単純なコード(本格的で複雑なインディケータは言うに及ばず)が、各社の端末によって異なる数値を表示することである。#property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 1 double Buffer[]; int handle; int OnInit() { SetIndexBuffer(0,Buffer,INDICATOR_DATA); handle=iFractals(_Symbol,PERIOD_CURRENT); if(handle==INVALID_HANDLE) return(-1); return(0); } 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[]) { Print(1); return(rates_total); } 1.EGlobal。2.メタクォーツ念のため、両端末を完全にアンロードし(メモリプロセスでタスクマネージャで確認)、再度ロードして両コードを再コンパイルしました。結局、変更なし。 Loky 2011.11.07 07:36 #5603 当たり前のこと、それが当たり前なんです。 Andrey Dik 2011.11.07 20:16 #5604 MathRound() は4と5で動作が異なるので、同じにする必要があります。4Pのコードです。int start() { double minlot=0.01; double step =0.01; Print(minlot+step*MathRound((0.005 - minlot)/step)); return(0); }5秒コードvoid OnStart() { double minlot=0.01; double step =0.01; Print(minlot+step*MathRound((0.005 - minlot)/step)); } Mykola Demko 2011.11.07 21:27 #5605 joo:MathRound()は4と5で動作が異なるので、同じにする必要があります。4秒コード5秒コード問題はここなんです。 double y=MathRound(-0.5); Print("Округление -0.5 до ",y);この値は、4と5で丸め方が異なります。 x572intraday 2011.11.07 21:53 #5606 Loky: 当たり前だ、それが当たり前なんだ。 さらに具体的には? idispatch 2011.11.08 12:39 #5607 テストが中断された場合、MT5が注文履歴などを 保存しないのはなぜですか?MT4では保存されていました。また、テストチャートからの注文履歴に位置決めがありません。チャートをクリックすることで、大きなドローダウンの領域の注文を見ることができ、便利でした。 Михаил Янович 2011.11.08 23:41 #5608 こんばんは。SLeep()メソッドがどのように機能するのか、教えてください。Expert Advisor を一定時間、一時停止するはずですが、間違っていますか?{for (int sleep=0;sleep<10000;sleep++)if(BarsCalculated(Handle)>=o_bars_reoptimizate){ Print(BarsCalculated(Handle)); break; }.else Sleep(100);}.このコードでは、ある指標について計算されたバーの数がある値よりも大きい場合、ループが解除され、そうでない場合、次のコードの実行に100msの遅延が発生するという結果を期待しています。可能な合計遅延時間は100*10000ms...インジケータの計算には十分な時間です。あるいは、テスターでは、私が想定しているように、この機能は動作していません。分かりやすく説明していただき、ありがとうございました。 Sergey Gritsay 2011.11.09 07:50 #5609 mi__x__an:こんばんは。SLeep()メソッドがどのように機能するのか、教えてください。Expert Advisor を一定時間、一時停止するはずですが、間違っていますか?{for (int sleep=0;sleep<10000;sleep++)if (BarsCalculated(Handle)>=o_bars_reoptimizate){ Print(BarsCalculated(Handle)); break; }.else Sleep(100);}.このコードでは、ある指標について計算されたバーの数がある値よりも大きい場合、ループが解除され、そうでない場合、さらにコードの実行に100msの遅延が発生するという結果を期待しています。可能な合計遅延時間は100*10000ms...インジケータの計算には十分な時間です。あるいは、テスターでは、私が想定しているように、この機能は動作していません。分かりやすく説明していただき、ありがとうございました。スリープは インジケータでは機能しない x572intraday 2011.11.09 07:51 #5610 例えばCopyBufferの ドキュメントを見ると、「インジケータ値の一部を(インジケータバッファ ではない)別の配列にコピーしたい場合は、必要な値がコピーされている中間配列をこの目的に使用する必要があります」とあり、脳がガタガタになってしまうのだそうです。そして、すでにこの中間配列から、必要な数の値を要素ごとに受信配列の適切な位置にコピーしています。"int CopyBuffer( int indicator_handle, // handle индикатора int buffer_num, // номер буфера индикатора [...] ); buffer_num が明示的に参照される場合、SetIndexBuffer を用いて、受信配列と指示バッファの間に一つまたは複数のシーケンス番号を事前バインドする必要があることを確実に示唆 する。しかし、「インジケータのいくつかの値を(インジケータバッファではない)別の配列にコピーしたい場合」、buffer_numは インジケータではないので、定義上、何も接続していないので、話に ならないのです。矛盾?曖昧さ?それとも、完全にプログラムされているのだろうか?インジケータ・バッファの明確な定義を探したのですが、失敗しました。SetIndexBufferで リンクされた任意のバッファなのか、それともそれだけでは不十分で、INDICATOR_DATA 識別子を持つ配列でなければならないのか? 1...554555556557558559560561562563564565566567568...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ArrayInitializeが 動作しないコードが添付されていますが、ループのコメントを解除すると、すべてうまくいきます。
また、クラス内の変数とグローバルレベルのインジケータを同じ名前で宣言した場合、警告が表示されます。
週末、ティックがない間に、私はデモ口座でこのインディケータをデバッグし、MT5ターミナルの2つのインスタンスの最後のビルドで実行しました。設定はどこでも同じです。念のため、オフラインで確認しましたので、ティック要素は除外しています。
問題は、「アンダー・インディケータ」の最も単純なコード(本格的で複雑なインディケータは言うに及ばず)が、各社の端末によって異なる数値を表示することである。
1.EGlobal。2.メタクォーツ

念のため、両端末を完全にアンロードし(メモリプロセスでタスクマネージャで確認)、再度ロードして両コードを再コンパイルしました。結局、変更なし。
MathRound() は4と5で動作が異なるので、同じにする必要があります。
4Pのコードです。
5秒コード
MathRound()は4と5で動作が異なるので、同じにする必要があります。
4秒コード
5秒コード
問題はここなんです。
この値は、4と5で丸め方が異なります。
当たり前だ、それが当たり前なんだ。
テストが中断された場合、MT5が注文履歴などを 保存しないのはなぜですか?MT4では保存されていました。
また、テストチャートからの注文履歴に位置決めがありません。チャートをクリックすることで、大きなドローダウンの領域の注文を見ることができ、便利でした。
こんばんは。
SLeep()メソッドがどのように機能するのか、教えてください。
Expert Advisor を一定時間、一時停止するはずですが、間違っていますか?
{for (int sleep=0;sleep<10000;sleep++)
if(BarsCalculated(Handle)>=o_bars_reoptimizate)
{ Print(BarsCalculated(Handle)); break; }.else Sleep(100);}.
このコードでは、ある指標について計算されたバーの数がある値よりも大きい場合、ループが解除され、そうでない場合、次のコードの実行に100msの遅延が発生するという結果を期待しています。可能な合計遅延時間は100*10000ms...インジケータの計算には十分な時間です。あるいは、テスターでは、私が想定しているように、この機能は動作していません。分かりやすく説明していただき、ありがとうございました。
こんばんは。
SLeep()メソッドがどのように機能するのか、教えてください。
Expert Advisor を一定時間、一時停止するはずですが、間違っていますか?
{for (int sleep=0;sleep<10000;sleep++)
if (BarsCalculated(Handle)>=o_bars_reoptimizate)
{ Print(BarsCalculated(Handle)); break; }.else Sleep(100);}.
このコードでは、ある指標について計算されたバーの数がある値よりも大きい場合、ループが解除され、そうでない場合、さらにコードの実行に100msの遅延が発生するという結果を期待しています。可能な合計遅延時間は100*10000ms...インジケータの計算には十分な時間です。あるいは、テスターでは、私が想定しているように、この機能は動作していません。分かりやすく説明していただき、ありがとうございました。
例えばCopyBufferの ドキュメントを見ると、「インジケータ値の一部を(インジケータバッファ ではない)別の配列にコピーしたい場合は、必要な値がコピーされている中間配列をこの目的に使用する必要があります」とあり、脳がガタガタになってしまうのだそうです。そして、すでにこの中間配列から、必要な数の値を要素ごとに受信配列の適切な位置にコピーしています。"
buffer_num が明示的に参照される場合、SetIndexBuffer を用いて、受信配列と指示バッファの間に一つまたは複数のシーケンス番号を事前バインドする必要があることを確実に示唆 する。しかし、「インジケータのいくつかの値を(インジケータバッファではない)別の配列にコピーしたい場合」、buffer_numは インジケータではないので、定義上、何も接続していないので、話に ならないのです。
矛盾?
曖昧さ?
それとも、完全にプログラムされているのだろうか?
インジケータ・バッファの明確な定義を探したのですが、失敗しました。SetIndexBufferで リンクされた任意のバッファなのか、それともそれだけでは不十分で、INDICATOR_DATA 識別子を持つ配列でなければならないのか?