エラー、バグ、質問 - ページ 54 1...474849505152535455565758596061...3185 新しいコメント ddd06 2010.07.19 06:12 #531 チャート上でもテスター上でもうまく動くインジケーターの例をみんなに教えてくれるとうれしいです。 バージョンを変更したところ、チャート上のインジケータの 値は履歴と一致するようになりましたが、テスターの値は一致しません。 私は何か悪いことをしたのだろうか?#property indicator_separate_window#property indicator_buffers 2#property indicator_plots 2//--- plot Label1#property indicator_label1 "I1"#property indicator_type1 DRAW_LINE#property indicator_color1 Red#property indicator_style1 STYLE_SOLID#property indicator_width1 1//--- plot Label2#property indicator_label2 "I2"#property indicator_type2 DRAW_LINE#property indicator_color2 Green#property indicator_style2 STYLE_SOLID#property indicator_width2 1//--- indicator buffersdouble I1Buffer[];double I2Buffer[];int OnInit() { SetIndexBuffer(0,I1Buffer,INDICATOR_DATA); SetIndexBuffer(1,I2Buffer,INDICATOR_DATA); return(0); }int OnCalculate (const int rates_total, // размер входных таймсерий const int prev_calculated, // обработано баров на предыдущем вызове const datetime& time[], // Time const double& open[], // Open const double& high[], // High const double& low[], // Low const double& close[], // Close const long& tick_volume[], // Tick Volume const long& volume[], // Real Volume const int& spread[]) // Spread { string Symbol_1="EURUSD",Symbol_2="GBPUSD"; if(rates_total<1) return(0); double Arr1[],Arr2[]; int end,rez0,rez1,rez_0,rez_1; datetime ld1[],ld2[]; end=MathMin((int)SeriesInfoInteger(Symbol_1,0,SERIES_BARS_COUNT)-1,(int)SeriesInfoInteger(Symbol_2,0,SERIES_BARS_COUNT)-1); end=MathMin(end,rates_total-prev_calculated+1); rez0=CopyClose(Symbol_1,PERIOD_CURRENT, 0,end, Arr1); rez_0=CopyTime(Symbol_1,PERIOD_CURRENT, 0,end, ld1); if(rez0==-1){Print("Ошибка копирования ",Symbol_1," ",GetLastError()); return(0);} if(rez0!=rez_0){Print("Не сходятся цены с временем",Symbol_1," ",GetLastError()); return(0);} rez1=CopyClose(Symbol_2,PERIOD_CURRENT, 0,end, Arr2); rez_1=CopyTime(Symbol_2,PERIOD_CURRENT, 0,end, ld2); if(rez1==-1){Print("Ошибка копирования ",Symbol_2," ",GetLastError()); return(0);} if(rez1!=rez_1){Print("Не сходятся цены с временем",Symbol_2," ",GetLastError()); return(0);} if(rez1!=rez0){Print("Ошибка Синхронизации"); return(0);} ArraySetAsSeries(Arr1,true); ArraySetAsSeries(Arr2,true); ArraySetAsSeries(ld1,true); ArraySetAsSeries(ld2,true); int li=rates_total-1; I1Buffer[li]=Arr1[0]+0.26; I2Buffer[li]=Arr2[0]; li--; int shift1=0,shift2=0; for(int i=1;i<end-MathMax(shift2,shift1);i++) { if(time[li]==ld1[i+shift1])I1Buffer[li]=Arr1[i+shift1]+0.26; else if(time[li]>ld1[i+shift1]&&i!=0){shift1--;I1Buffer[li]=I1Buffer[li+1];} else if(time[li]<ld1[i+shift1]&&i!=0){shift1++;I1Buffer[li]=I1Buffer[li+1];} if(time[li]==ld2[i+shift2])I2Buffer[li]=Arr2[i+shift2]; else if(time[li]>ld2[i+shift2]&&i!=0){shift2--;I2Buffer[li]=I2Buffer[li+1];} else if(time[li]<ld2[i+shift2]&&i!=0){shift2++;I2Buffer[li]=I2Buffer[li+1];} li--; } return(rates_total); }//+------------------------------------------------------------------+ そして、Expert Advisorint Handle;int bars,i;void OnInit() { Handle=iCustom(NULL,0,"proverka"); }void OnTick() { double buf1[],buf2[]; datetime time[];//--- if(bars==Bars(_Symbol,_Period))return; bars=Bars(_Symbol,_Period); CopyTime(_Symbol,_Period,0,2,time); if(CopyBuffer(Handle,0,0,2,buf1)<0 || CopyBuffer(Handle,1,0,2,buf2)<0) Print("Ошибка копирования значений индикаторных буферов ",GetLastError(),"!!"); if(i>100)return; i++; Print("Время "+TimeToString(time[1],TIME_DATE|TIME_MINUTES)," буф1-",buf1[1]," буф2-",buf2[1]); return; } ファイル: proverka.mq5 4 kb prover__1.mq5 1 kb ddd06 2010.07.19 06:18 #532 だから、私は昔のように戻ってきたのです) テスターでインジケーターの値を取得した場合、インジケーターの値やヒストリカルデータとは異なる値になります。 これを確認するために、2010年7月1日からEURUSDのM1期間についてprover.mq5を 実行し、ログを見て、実際の価格を確認してみましょう。 Кирилл Иванович 2010.07.19 06:29 #533 こんにちは、SymbolInfoSessionTrade()関数というか、最後の2つのパラメータ、セッションの開始とセッションの終了が理解できません。ヘルプで読めます。 指定したシンボルと曜日のセッションの 開始時刻と終了時刻を取得します。取引セッションの開始時間と終了時間を調べるには、すでに取引セッションの開始時間と終了時間(秒単位)を知っていなければならないことがわかりました。これは一貫性がありません。 Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote www.mql5.com Получение рыночной информации / SymbolInfoSessionQuote - Документация по MQL5 ddd06 2010.07.19 07:37 #534 kirill190982: SymbolInfoSessionTrade() 関数、特に最後の2つのパラメータ、session startとsession endが理解できません。ヘルプで読んだことがあります。 これらのパラメータに、SymbolInfoSessionTrade() 関数は、開始時間と終了時間を記録する変数を渡します。void OnTick() { datetime ld_start, ld_end; SymbolInfoSessionTrade( _Symbol, // имя символа MONDAY, // день недели 0, // Порядковый номер сессии ld_start, // время начала сессии ld_end // время окончания сессии ); Print(ld_start," - ",ld_end); } ところで、helpに間違いがあります。 uintsession_index,// シンボル名 Кирилл Иванович 2010.07.19 08:59 #535 ddd06: SymbolInfoSessionTrade() 関数のこれらのパラメータには、開始時刻と終了時刻を書き込む変数が渡されます。 ありがとうございました。 ddd06 2010.07.19 09:48 #536 エラーが出るのを簡略化しました。 以下は、CLOSE価格の配列をコピーするExpert Advisorです。int bars,i;void OnTick() { if(bars==Bars(_Symbol,_Period))return; bars=Bars(_Symbol,_Period); if(i>100)return; i++; datetime time[]; double Arr1[],Arr2[]; CopyTime(_Symbol,_Period,0,2,time); CopyClose("EURUSD",PERIOD_CURRENT, 0, 2, Arr1); CopyClose("GBPUSD",PERIOD_CURRENT, 0, 2, Arr2); Print("Время "+TimeToString(time[1],TIME_DATE|TIME_MINUTES)," mas1(EURUSD)-",Arr1[1]," mas2(GBPUSD)-",Arr2[1]); return; } 2010年7月1日からM1期間のEURUSDでprover.mq5を 実行し、ログを見て、実際の価格を確認してみましょう。 時折、誤った値を目にすることがあります また、GBPUSDの価格は01.00まで1.49393で凍結しており、その後、実行を開始します。 多通貨のExpert Advisorをテストすることができず、1ヶ月間苦しんでいます。 Slava 2010.07.19 10:26 #537 ddd06: エラーが出るのを簡略化しました。 以下は、CLOSE価格の配列をコピーするExpert Advisorです。 2010年7月1日からM1期間のEURUSDでprover.mq5を 実行し、ログを見て、実際の価格を確認してみましょう。 そして、時折、誤った値を目にすることがあります。 また、GBPUSDの価格は01.00まで1.49393で凍結しており、その後、実行を開始します。 1ヶ月間、この症状に悩まされ、多通貨のExpert Advisorをテストすることができません。 未完成のバーの現在値で作業している。 お試しくださいPrint("Время "+TimeToString(time[0],TIME_DATE|TIME_MINUTES)," mas1(EURUSD)-",Arr1[0]," mas2(GBPUSD)-",Arr2[0]); または配列の時系列を設定する。 ddd06 2010.07.19 10:50 #538 stringo: 未完成のバーの現在値で作業していることになります。 このように試してみてください。 または配列の時系列を設定する。 続きint bars,i;void OnTick() { if(bars==Bars(_Symbol,_Period))return; bars=Bars(_Symbol,_Period); if(i>100)return; i++; datetime time[]; double Arr1[],Arr2[]; CopyTime(_Symbol,_Period,0,2,time); CopyClose("EURUSD",PERIOD_CURRENT, 0, 2, Arr1); CopyClose("GBPUSD",PERIOD_CURRENT, 0, 2, Arr2); Print("Время "+TimeToString(time[0],TIME_DATE|TIME_MINUTES)," mas1(EURUSD)-",Arr1[0]," mas2(GBPUSD)-",Arr2[0]); return; } そして、なぜ引用が冒頭にあるのか、頑なに答えようとしませんね。 EURUSDでは、一致し始めたようです) Slava 2010.07.19 11:31 #539 もしそうなら、2つの時間配列を保持する必要があります。ある時はEURUSDから、ある時はGBPUSDからコピーする ddd06 2010.07.19 11:42 #540 stringo: もしそうなら、2つの時間配列を保持する必要があります。ある時間はEURUSDから、他の時間はGBPUSDからコピーされるべきです。 まあね。int bars,i;void OnTick() { if(bars==Bars(_Symbol,_Period))return; bars=Bars(_Symbol,_Period); if(i>100)return; i++; datetime time1[],time2[]; double Arr1[],Arr2[]; CopyTime("EURUSD",_Period,0,2,time1); CopyTime("GBPUSD",_Period,0,2,time2); CopyClose("EURUSD",PERIOD_CURRENT, 0, 2, Arr1); CopyClose("GBPUSD",PERIOD_CURRENT, 0, 2, Arr2); Print("Время EURUSD"+TimeToString(time1[0],TIME_DATE|TIME_MINUTES), " Время GBPUSD"+TimeToString(time2[0],TIME_DATE|TIME_MINUTES)," mas1(EURUSD)-",Arr1[0]," mas2(GBPUSD)-",Arr2[0]); return; } そんなことではいけないと思うのですが、どうでしょう? 1...474849505152535455565758596061...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
チャート上でもテスター上でもうまく動くインジケーターの例をみんなに教えてくれるとうれしいです。
バージョンを変更したところ、チャート上のインジケータの 値は履歴と一致するようになりましたが、テスターの値は一致しません。
私は何か悪いことをしたのだろうか?
そして、Expert Advisor
だから、私は昔のように戻ってきたのです)
テスターでインジケーターの値を取得した場合、インジケーターの値やヒストリカルデータとは異なる値になります。
これを確認するために、2010年7月1日からEURUSDのM1期間についてprover.mq5を 実行し、ログを見て、実際の価格を確認してみましょう。
こんにちは、SymbolInfoSessionTrade()関数というか、最後の2つのパラメータ、セッションの開始とセッションの終了が理解できません。ヘルプで読めます。
指定したシンボルと曜日のセッションの 開始時刻と終了時刻を取得します。
取引セッションの開始時間と終了時間を調べるには、すでに取引セッションの開始時間と終了時間(秒単位)を知っていなければならないことがわかりました。これは一貫性がありません。
SymbolInfoSessionTrade() 関数、特に最後の2つのパラメータ、session startとsession endが理解できません。ヘルプで読んだことがあります。
これらのパラメータに、SymbolInfoSessionTrade() 関数は、開始時間と終了時間を記録する変数を渡します。
ところで、helpに間違いがあります。
uintsession_index,// シンボル名
SymbolInfoSessionTrade() 関数のこれらのパラメータには、開始時刻と終了時刻を書き込む変数が渡されます。
エラーが出るのを簡略化しました。
以下は、CLOSE価格の配列をコピーするExpert Advisorです。
2010年7月1日からM1期間のEURUSDでprover.mq5を 実行し、ログを見て、実際の価格を確認してみましょう。
時折、誤った値を目にすることがあります
また、GBPUSDの価格は01.00まで1.49393で凍結しており、その後、実行を開始します。
多通貨のExpert Advisorをテストすることができず、1ヶ月間苦しんでいます。
エラーが出るのを簡略化しました。
以下は、CLOSE価格の配列をコピーするExpert Advisorです。
2010年7月1日からM1期間のEURUSDでprover.mq5を 実行し、ログを見て、実際の価格を確認してみましょう。
そして、時折、誤った値を目にすることがあります。
また、GBPUSDの価格は01.00まで1.49393で凍結しており、その後、実行を開始します。
1ヶ月間、この症状に悩まされ、多通貨のExpert Advisorをテストすることができません。
未完成のバーの現在値で作業している。
お試しください
または配列の時系列を設定する。
未完成のバーの現在値で作業していることになります。
このように試してみてください。
または配列の時系列を設定する。
そして、なぜ引用が冒頭にあるのか、頑なに答えようとしませんね。
EURUSDでは、一致し始めたようです)
もしそうなら、2つの時間配列を保持する必要があります。ある時はEURUSDから、ある時はGBPUSDからコピーする
もしそうなら、2つの時間配列を保持する必要があります。ある時間はEURUSDから、他の時間はGBPUSDからコピーされるべきです。
まあね。
そんなことではいけないと思うのですが、どうでしょう?