エラー、バグ、質問 - ページ 936 1...929930931932933934935936937938939940941942943...3185 新しいコメント FinEngineer 2013.03.02 08:18 #9351 #property indicator_separate_window #property indicator_buffers 1 #property indicator_plots 1 //--- plot Label1 #property indicator_label1 "Label1" #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- input parameters input string symbol1="AUDUSD"; input string symbol2="NZDUSD"; input double mass_of_symbol1=1; input double mass_of_symbol2=1; int i,r1,r2,j; double S,prs,k1,k2,d1,d2; //--- indicator buffers double ind1[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,ind1,INDICATOR_DATA); //--- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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[]) { //--- ArraySetAsSeries(time,true);ArraySetAsSeries(open,true);ArraySetAsSeries(high,true);ArraySetAsSeries(low,true); ArraySetAsSeries(close,true);ArraySetAsSeries(tick_volume,true);ArraySetAsSeries(volume,true);ArraySetAsSeries(spread,true); ArraySetAsSeries(ind1,true); MqlRates rates1[]; ArraySetAsSeries(rates1,true); MqlRates rates2[]; ArraySetAsSeries(rates2,true); if(prev_calculated<rates_total) { for(i=0;i<rates_total;i++) // for(i=prev_calculated-1;i<rates_total;i++) { CopyRates(symbol1,0,time[i],1,rates1); CopyRates(symbol2,0,time[i],1,rates2); ind1[i]=mass_of_symbol1*rates1[0].close-mass_of_symbol2*rates2[0].close; } } //--- return value of prev_calculated for next call return(rates_total); FinEngineer 2013.03.02 08:25 #9352 インジケータSpread_of_symbolsの上記のコード...私はそれが速く動作するようにそれを書き換えることにしました...とコードが登場し、以下を参照してください...データがコピーされていない...あなたはコード内の1から0にデータをコピーする場合、指標は非常に高速ですが、範囲外のエラーが発生します...何がコードで間違っているか以下をご覧ください...?#property indicator_separate_window #property indicator_buffers 1 #property indicator_plots 1 //--- plot Label1 #property indicator_label1 "Label1" #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- input parameters input string symbol1="AUDUSD"; input string symbol2="NZDUSD"; input double mass_of_symbol1=1; input double mass_of_symbol2=1; int i,r1,r2,j; double S,prs,k1,k2,d1,d2; //--- indicator buffers double ind1[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,ind1,INDICATOR_DATA); //--- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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[]) { //--- ArraySetAsSeries(time,true);ArraySetAsSeries(open,true);ArraySetAsSeries(high,true);ArraySetAsSeries(low,true); ArraySetAsSeries(close,true);ArraySetAsSeries(tick_volume,true);ArraySetAsSeries(volume,true);ArraySetAsSeries(spread,true); ArraySetAsSeries(ind1,true); MqlRates rates1[]; ArraySetAsSeries(rates1,true); MqlRates rates2[]; ArraySetAsSeries(rates2,true); int to_copy; if(prev_calculated>rates_total || prev_calculated<0) to_copy=rates_total; else { to_copy=rates_total-prev_calculated; if(prev_calculated>0) to_copy++; } if(CopyRates(symbol1,0,0,to_copy,rates1)<=0) { Print("Данные по первому символу не скопированы, ошибка ",GetLastError()); return(0); } if(CopyRates(symbol2,0,0,to_copy,rates2)<=0) { Print("Данные по второму символу не скопированы, ошибка ",GetLastError()); return(0); } if(prev_calculated<rates_total) { int limit; if(prev_calculated==0) limit=0; else limit=prev_calculated-1; for(int i=limit;i<rates_total;i++) { ind1[i]=mass_of_symbol1*rates1[i].close-mass_of_symbol2*rates2[i].close; } } return(rates_total); } Yedelkin 2013.03.02 10:01 #9353 FinEngineer: MQL5 Reference Guide / タイムシリーズとインジケータへのアクセス / データアクセスの整理を参照してください。 Yedelkin 2013.03.02 10:15 #9354 FinEngineer: が、out of rangeのエラーが出てしまう...以下のコードのどこがおかしいのか...? to_copyとlimitの値が互いに一致するかどうかを確認する。 Konstantin Chernov 2013.03.03 11:28 #9355 可視化モードでは、2つのシンボルで取引している場合、同時に取引を終了すると、Expert Advisorを実行しているシンボルのデータのみが履歴に表示されます。もう一方のシンボルからのデータは、さらに取引を開始した後に履歴タブに表示されます。そのため、取引タブと 履歴タブの データが異なる時期があります。 sion 2013.03.05 16:07 #9356 JF 0 Trades 19:31:10 '***': キャンセルオーダー #3694236 buy stop 1.10 AUDJPY.m at 95.679<br / translate="no">DS 0 Trades 19:31:10 '***': キャンセルオーダー #3694238 buy limit 1.10 AUDJPY.m at 93.876をキャンセルしました。 DH 0 トレード 19:31:10 '***': キャンセルオーダー #3694237 買いストップ 0.36 AUDJPY.m at 95.679 FI 0 トレード 19:31:10 '***': キャンセルオーダー #3694239 買い指値 0.36 AUDJPY.m at 93.876 FP 0 トレード 19:31:10 '***': キャンセルオーダー #3694236 買いストップ 1.10 AUDJPY.m at 95.679 done QE 0トレード 19:31:11 '***': キャンセルオーダー #3694238 買い指値 1.10 AUDJPY.m at 93.876 完了しました。 CG 0 トレード 19:31:11 '***': キャンセルオーダー #3694237 買いストップ 0.36 AUDJPY.m at 95.679 done. OL 0 トレード 19:31:11 '***': キャンセルオーダー #3694239 買い指値 0.36 AUDJPY.m at 93.876 完了しました。ログによると、4つの保留中の注文が、すぐに削除されたようだ。しかし、onTradeTransactionでは、15秒程度で応答があり、この間にティックが来ていた。KH 0 prp5 (EURUSD.m,M1) 19:31:23 TS=6 cancel sl _ OnTrade PENDING id=84 m=3 b/s=SELL Err=Bidが完了しました。***JG 0 prp5 (EURUSD.m,M1) 19:31:26 TS=6 Delete tp _ OnTrade PENDING id=85 m=3 b/s=SELL Err=Bid completed*** RL 0 prp5 (EURUSD.m,M1) 19:31:26 TS=6 Delete sl _ OnTrade PENDING id=86 m=3 b/s=SELL Err=Bid completed***HK 0 prp5 (EURUSD.m,M1) 19:31:26 TS=6 Delete tp _ OnTrade PENDING id=87 m=3 b/s=SELL Err=注文が成立しました。しかし、ここにも不思議なことがある。IE 0 prp5 (EURUSD.m,M1) 19:31:26 TS=6 =O= Deal close/reverse price=95.648 m=3 b/s=SELL ...==>OrderSendAsyncの前の時間。 ES 0 prp5 (EURUSD.m,M1) 19:31:29 TS=6 case 8(real) m=3 b/s=SELL Err=Order placed ==>After OrderSendAsync、3秒は長すぎるようです。追伸:Expertの実行に遅れがあったようですが、OnTradeTransactionのパケットがどのくらいキューに残るのかが気になりますね。 Victor Kirillin 2013.03.06 02:26 #9357 fyords:参考文献よりMQL5リファレンス /標準ライブラリ/ パネルやダイアログを作成するためのクラス / CWnd / StateFlagsSetどのような特性ですか?StateFlagsプロパティではなく、状態を設定します。状態を変化させるグループ方式。個々の状態フラグを変更する上記の方法だけです。別途ご使用ください。 FinEngineer 2013.03.06 14:51 #9358 データアクセス組織」を見て、データを汲み上げるサンプルスクリプトを見て、すべてを理解した上で、次のような疑問が生まれました。1.なぜ、このコードをOnInit関数に書いて、開始時にインジケータが自分の履歴をダウンロードして時系列を準備するようにできないのでしょうか?Expert Advisorにそのようなチェックを書き込むことはできますか?2.このチェックはどれくらいの頻度で行えばよいのでしょうか。Expert Advisorに1、indicatorsに2?コピーする履歴や時系列を一度だけ用意すれば、今後、コピー時のエラーは発生しないのでしょうか?それとも、履歴や時系列の準備ができたかどうか、その都度、あるいは時々、確認しなければならないのでしょうか?3.このチェックは、複数のタイムフレームやシンボルを使用するインジケーターやExpert Advisorにのみ必要ですか、それとも全てに必要ですか? Документация по MQL5: Основы языка / Функции / Функции обработки событий www.mql5.com Основы языка / Функции / Функции обработки событий - Документация по MQL5 Renat Fatkhullin 2013.03.06 16:52 #9359 スワップ処理は非同期であり、インジケータはデータを待つことができない。そのため、initeで問い合わせを行い、待機やスローダウンは一切行わず、oncalculateで空き状況やカウントを確認することだけが可能である。 注意 - インジケータは待機やループの権利を持たず、そうでなければ後続のインジケータの計算を停止させます。 FinEngineer 2013.03.06 17:56 #9360 Renat: スワップ処理は非同期であり、インジケータはデータを待つことができない。そのため、initeで問い合わせを行い、決して待ったり遅くしたりせず、oncalculateでだけ空き状況やカウントを確認することができます。注意:インジケータは待機やループの権利を持たず、そうでなければ後続のインジケータの計算を停止させます。 1 では、どこにデータをページングすればいいのか?通貨ペアのバスケット、多くのシンボルでインジケータを作りたい場合...それぞれについて、データのチェックと入れ替えが必要なのですが、インジケータからスクリプトを実行すればいいのでしょうか。なぜ、ある指標が後続の指標の計算を殺してしまうのでしょうか?次の指標では、BarsCalculated(indicator1_Handle)で前の指標の計算のチェックを使い、計算させてデータをダウンロードすればいいのですが、間違っているでしょうか?2 別の種類の質問ですが、関数内でインジケータ・ハンドルを宣言すると、カウントが始まるのでしょうか?それとも、コピーするコマンドを出す前にカウントが始まってしまうのでしょうか? 1...929930931932933934935936937938939940941942943...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
インジケータSpread_of_symbolsの上記のコード...私はそれが速く動作するようにそれを書き換えることにしました...とコードが登場し、以下を参照してください...データがコピーされていない...あなたはコード内の1から0にデータをコピーする場合、指標は非常に高速ですが、範囲外のエラーが発生します...何がコードで間違っているか以下をご覧ください...?
DH 0 トレード 19:31:10 '***': キャンセルオーダー #3694237 買いストップ 0.36 AUDJPY.m at 95.679
FI 0 トレード 19:31:10 '***': キャンセルオーダー #3694239 買い指値 0.36 AUDJPY.m at 93.876
FP 0 トレード 19:31:10 '***': キャンセルオーダー #3694236 買いストップ 1.10 AUDJPY.m at 95.679 done
QE 0トレード 19:31:11 '***': キャンセルオーダー #3694238 買い指値 1.10 AUDJPY.m at 93.876 完了しました。
CG 0 トレード 19:31:11 '***': キャンセルオーダー #3694237 買いストップ 0.36 AUDJPY.m at 95.679 done.
OL 0 トレード 19:31:11 '***': キャンセルオーダー #3694239 買い指値 0.36 AUDJPY.m at 93.876 完了しました。
ログによると、4つの保留中の注文が、すぐに削除されたようだ。しかし、onTradeTransactionでは、15秒程度で応答があり、この間にティックが来ていた。
***
JG 0 prp5 (EURUSD.m,M1) 19:31:26 TS=6 Delete tp _ OnTrade PENDING id=85 m=3 b/s=SELL Err=Bid completed
***
RL 0 prp5 (EURUSD.m,M1) 19:31:26 TS=6 Delete sl _ OnTrade PENDING id=86 m=3 b/s=SELL Err=Bid completed
***
HK 0 prp5 (EURUSD.m,M1) 19:31:26 TS=6 Delete tp _ OnTrade PENDING id=87 m=3 b/s=SELL Err=注文が成立しました。
しかし、ここにも不思議なことがある。
ES 0 prp5 (EURUSD.m,M1) 19:31:29 TS=6 case 8(real) m=3 b/s=SELL Err=Order placed ==>After OrderSendAsync、3秒は長すぎるようです。
追伸:Expertの実行に遅れがあったようですが、OnTradeTransactionのパケットがどのくらいキューに残るのかが気になりますね。
参考文献より
MQL5リファレンス /標準ライブラリ/ パネルやダイアログを作成するためのクラス / CWnd / StateFlagsSet
どのような特性ですか?
StateFlagsプロパティではなく、状態を設定します。状態を変化させるグループ方式。個々の状態フラグを変更する上記の方法だけです。
別途ご使用ください。
データアクセス組織」を見て、データを汲み上げるサンプルスクリプトを見て、すべてを理解した上で、次のような疑問が生まれました。
1.なぜ、このコードをOnInit関数に書いて、開始時にインジケータが自分の履歴をダウンロードして時系列を準備するようにできないのでしょうか?Expert Advisorにそのようなチェックを書き込むことはできますか?
2.このチェックはどれくらいの頻度で行えばよいのでしょうか。Expert Advisorに1、indicatorsに2?コピーする履歴や時系列を一度だけ用意すれば、今後、コピー時のエラーは発生しないのでしょうか?それとも、履歴や時系列の準備ができたかどうか、その都度、あるいは時々、確認しなければならないのでしょうか?
3.このチェックは、複数のタイムフレームやシンボルを使用するインジケーターやExpert Advisorにのみ必要ですか、それとも全てに必要ですか?
注意 - インジケータは待機やループの権利を持たず、そうでなければ後続のインジケータの計算を停止させます。
スワップ処理は非同期であり、インジケータはデータを待つことができない。そのため、initeで問い合わせを行い、決して待ったり遅くしたりせず、oncalculateでだけ空き状況やカウントを確認することができます。注意:インジケータは待機やループの権利を持たず、そうでなければ後続のインジケータの計算を停止させます。
1 では、どこにデータをページングすればいいのか?通貨ペアのバスケット、多くのシンボルでインジケータを作りたい場合...それぞれについて、データのチェックと入れ替えが必要なのですが、インジケータからスクリプトを実行すればいいのでしょうか。なぜ、ある指標が後続の指標の計算を殺してしまうのでしょうか?次の指標では、BarsCalculated(indicator1_Handle)で前の指標の計算のチェックを使い、計算させてデータをダウンロードすればいいのですが、間違っているでしょうか?
2 別の種類の質問ですが、関数内でインジケータ・ハンドルを宣言すると、カウントが始まるのでしょうか?それとも、コピーするコマンドを出す前にカウントが始まってしまうのでしょうか?