MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1501 1...149414951496149714981499150015011502150315041505150615071508...1953 新しいコメント Tretyakov Rostyslav 2021.06.16 13:51 #15001 Николай К: エラー 4806 - requested data not found を解決する方法を教えてください。ボリンジャーの平均化期間の異なるデータをインジケータから取得したい。OnInitでHandleを受け取っていますが、私の目的ではOnCalculateで 受け取るべきで、そのためエラーになっています。例によって理解できるように助けてください。 コード pips 2021.06.16 14:12 #15002 //+------------------------------------------------------------------+ //| вап.mq5 | //| Copyright 2021, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #property indicator_separate_window //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| 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[]) { //--- int limit=rates_total-prev_calculated; if(limit>1) { limit=rates_total-1; } for(int i=limit; i>=0 && !IsStopped(); i--) { if(i>=rates_total-10) continue; ArrayInitialize(middle1,0); ArrayInitialize(middle2,0); for(BandsPeriod=2; BandsPeriod<=5; BandsPeriod++) { int T=3; Handle1=iMA(Symbol(),PERIOD_CURRENT,BandsPeriod,InpBandsShift,MODE_SMA,PRICE_HIGH); Handle2=iMA(Symbol(),PERIOD_CURRENT,BandsPeriod,InpBandsShift,MODE_SMA,PRICE_LOW); count=Bars(Symbol(),PERIOD_CURRENT)-10; if(!iGetArray(Handle1,BASE_LINE,start_pos,count,middle1) || !iGetArray(Handle2,BASE_LINE,start_pos,count,middle2))// || //CopyRates(Symbol(),PERIOD_CURRENT,start_pos,count,rates)!=count) { return(false); } } //--- return value of prev_calculated for next call return(rates_total); } } //+------------------------------------------------------------------+ bool iGetArray(const int handle,const int buffer,const int start_pos, const int count,double &arr_buffer[]) { bool result=true; if(!ArrayIsDynamic(arr_buffer)) { if(1==1) PrintFormat("ERROR! EA: %s, FUNCTION: %s, this a no dynamic array!",__FILE__,__FUNCTION__); return(false); } ArrayFree(arr_buffer); //--- reset error code ResetLastError(); //--- fill a part of the iBands array with values from the indicator buffer int copied=CopyBuffer(handle,buffer,start_pos,count,arr_buffer); if(copied!=count) { //--- if the copying fails, tell the error code if(1==1) PrintFormat("ERROR! EA: %s, FUNCTION: %s, amount to copy: %d, copied: %d, error code %d", __FILE__,__FUNCTION__,count,copied,GetLastError()); //--- quit with zero result - it means that the indicator is considered as not calculated return(false); } return(result); } //+------------------------------------------------------------------+ こんな感じで大雑把に整理、整合性が取れなくてすみません。 Vladimir Karputov 2021.06.16 14:14 #15003 Николай К: このように整理すると、整合性が取れなくて申し訳ないです。 MQL5のインジケータ・ハンドルはOnInit()で作成する必要があります! pips 2021.06.16 14:30 #15004 Vladimir Karputov:MQL5のインジケータ・ハンドルはOnInit()で作成する必要があります! そうすると、平均化期間ごとに別々のハンドルになるのでしょうか? Maxim Kuznetsov 2021.06.16 15:07 #15005 Николай К: このような構成になっています。一貫性がなくて申し訳ありません。 リソースが解放されない...効率は悪いが正解 iMA(...)を使って操作した後、不要になったらIndicatorReleaseを 呼び出す必要があります。 IndicatorRelease()関数は、このインジケータ・ハンドルが渡されたコンピュータ・メモリからインジケータを解放する役割を果たします。 また、インジケータハンドルはOnDeinit以外ならどこでも作成可能です。ただ、「作成ミスがあった場合の対処法」については心配です。 pips 2021.06.16 15:20 #15006 Vladimir Karputov @Maxim Kuznetsov 接着剤か釘か?))単純な作業-複雑な準備、mql4では1、2回で完了しました。では、異なるタイムフレームや平均期間のボリンジャーデータをエラーなく1つの配列に集めるにはどうすればよいのでしょうか? Maxim Kuznetsov 2021.06.16 15:30 #15007 Николай К: ウラジーミル・カルプトフ @マキシム・クズネツォフ 釘を打つか、それとも釘を打つか?))単純な作業-複雑な準備、mql4ではワンツーで完了しました。では、異なるタイムフレームや平均期間のボリンジャーデータをエラーなく1つの配列に集めるにはどうすればよいのでしょうか? さすがにハンドルは全部食っただろ、枯渇資源だ...解放してやれよ。 hdl=iMA(....) if (hdl!=INVALID_HANDLE) { /// do something IndicatorRelease(hdl); } 4から5への移行を容易にするために、fxsaberがライブラリで行った方法を見る。 Fast235 2021.06.17 11:52 #15008 MakarFX: インジケーターの動作を確認してから、EAを見るのが一番です。 インジケータでは、-outputs if...のような行はなく、すべてのティックが 処理され、ロボットでは、すべてのティックが来るのです。 バーが変更され、新しい信号まで、全体のM1は信号がありません、すべてのティックが見ている信号を思い出して、新しいバーを処理することはありません。 しかも、一度に3つの端子でテストしなければならないので、3つの端子を手にしたまま埋もれてしまうのです。 Tretyakov Rostyslav 2021.06.17 12:58 #15009 Fast235:インジケータでは、-outputs if...のような行はなく、すべてのティックが 処理され、ロボットでは、すべてのティックが来るのです。バーが変更され、新しい信号まで、全体のM1は信号がありません、すべてのティックが見ている信号をリコール、新しいバーを処理することはありません。ロボットはあらゆる面で無信号。 もしかしたら、インジケータではバーが変化したときだけシグナルが出るのかもしれませんね...。 もちろんコードを見たほうがいい。 Mikhail Tkachev 2021.06.17 15:50 #15010 アルテムさん、こんにちは。 私は諸事情によりMQL4でコーディングすることになり、不格好な構造を自分で考えなければならなくなりました。 もしかしたら、MQL4にはすでにそのようなクラス群があるのでしょうか? ありがとうございました。) 1...149414951496149714981499150015011502150315041505150615071508...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
エラー 4806 - requested data not found を解決する方法を教えてください。ボリンジャーの平均化期間の異なるデータをインジケータから取得したい。OnInitでHandleを受け取っていますが、私の目的ではOnCalculateで 受け取るべきで、そのためエラーになっています。例によって理解できるように助けてください。
このように整理すると、整合性が取れなくて申し訳ないです。
MQL5のインジケータ・ハンドルはOnInit()で作成する必要があります!
MQL5のインジケータ・ハンドルはOnInit()で作成する必要があります!
そうすると、平均化期間ごとに別々のハンドルになるのでしょうか?
このような構成になっています。一貫性がなくて申し訳ありません。
リソースが解放されない...効率は悪いが正解
iMA(...)を使って操作した後、不要になったらIndicatorReleaseを 呼び出す必要があります。
IndicatorRelease()関数は、このインジケータ・ハンドルが渡されたコンピュータ・メモリからインジケータを解放する役割を果たします。
また、インジケータハンドルはOnDeinit以外ならどこでも作成可能です。ただ、「作成ミスがあった場合の対処法」については心配です。
ウラジーミル・カルプトフ @マキシム・クズネツォフ 釘を打つか、それとも釘を打つか?))単純な作業-複雑な準備、mql4ではワンツーで完了しました。では、異なるタイムフレームや平均期間のボリンジャーデータをエラーなく1つの配列に集めるにはどうすればよいのでしょうか?
さすがにハンドルは全部食っただろ、枯渇資源だ...解放してやれよ。
hdl=iMA(....)
if (hdl!=INVALID_HANDLE) {
/// do something
IndicatorRelease(hdl);
}
4から5への移行を容易にするために、fxsaberがライブラリで行った方法を見る。
インジケーターの動作を確認してから、EAを見るのが一番です。
インジケータでは、-outputs if...のような行はなく、すべてのティックが 処理され、ロボットでは、すべてのティックが来るのです。
バーが変更され、新しい信号まで、全体のM1は信号がありません、すべてのティックが見ている信号を思い出して、新しいバーを処理することはありません。
しかも、一度に3つの端子でテストしなければならないので、3つの端子を手にしたまま埋もれてしまうのです。
インジケータでは、-outputs if...のような行はなく、すべてのティックが 処理され、ロボットでは、すべてのティックが来るのです。
バーが変更され、新しい信号まで、全体のM1は信号がありません、すべてのティックが見ている信号をリコール、新しいバーを処理することはありません。
ロボットはあらゆる面で無信号。
もしかしたら、インジケータではバーが変化したときだけシグナルが出るのかもしれませんね...。
もちろんコードを見たほうがいい。
私は諸事情によりMQL4でコーディングすることになり、不格好な構造を自分で考えなければならなくなりました。
もしかしたら、MQL4にはすでにそのようなクラス群があるのでしょうか?
ありがとうございました。)