MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1445 1...143814391440144114421443144414451446144714481449145014511452...1953 新しいコメント Artyom Trishkin 2021.04.14 23:02 #14441 Vitaly Muzichenko:ありがとうございました。試してみたらエラーになった、何か間違っている。 buffer[]は分散されているか?宣言は見えるが、サイズ設定が見えない Vitaly Muzichenko 2021.04.15 01:08 #14442 Artyom Trishkin:buffer[]は分散されているか?宣言は見えるが、設定されたサイズが見えない サイズを設定しても、どこかでエラーになり、うまくいかない。 Artyom Trishkin 2021.04.15 05:29 #14443 Vitaly Muzichenko:サイズを設定しても、どこかでエラーになり、うまくいかない。 何を送信しているのですか? Vitaly Muzichenko 2021.04.15 08:40 #14444 Artyom Trishkin:何を受け継いでいるのか? double Array_1[]; double Array_2[]; ArraySetAsSeries(close, true); int count = rates_total-1; if(count < 0) return (-1); int i = 1; int period = (int)MathFloor(MathSqrt(a)); int val_1 = (int)MathFloor(a / 1.9); int counter = Bars(_Symbol,_Period) - count + a + 1; if(counter > Bars(_Symbol,_Period)) counter = Bars(_Symbol,_Period); // ArraySetAsSeries(Array_1, true); ArrayResize(Array_1, counter); // ArraySetAsSeries(Array_2, true); ArrayResize(Array_2, counter); double d_close = close[1]; double buff[]; ArrayResize(buff, counter); for(i = 0; i < counter; i++) Array_1[i] = 2.0 * ma_1(i, val_1) - ma_1(i, a); for(i = 0; i < counter - a; i++) { // buf_3[i] = iMAOnArray(Array_1, 0, period, 0, MODE_SMMA, i); // buf_3[i] = iMA(NULL, 0, period, 0, MODE_SMMA, PRICE_LOW); // CopyBuffer(10,0,i,1,buff); SmoothedMAOnBuffer(counter, prev_calculated, i, period, Array_1, buff); buf_3[i] = buff[0]; } ..... //+------------------------------------------------------------------+ int SmoothedMAOnBuffer(const int rates_total,const int prev_calculated,const int begin,const int period,const double& price[],double& buffer[]) { //--- check period if(period<=1 || period>(rates_total-begin)) return(0); //--- save as_series flags bool as_series_price=ArrayGetAsSeries(price); bool as_series_buffer=ArrayGetAsSeries(buffer); ArraySetAsSeries(price,false); ArraySetAsSeries(buffer,false); //--- calculate start position int start_position; if(prev_calculated==0) { // first calculation or number of bars was changed //--- set empty value for first bars start_position=period+begin; for(int i=0; i<start_position-1; i++) buffer[i]=0.0; //--- calculate first visible value double first_value=0; for(int i=begin; i<start_position; i++) first_value+=price[i]; buffer[start_position-1]=first_value/period; } else start_position=prev_calculated-1; //--- main loop for(int i=start_position; i<rates_total; i++) buffer[i]=(buffer[i-1]*(period-1)+price[i])/period; //--- restore as_series flags ArraySetAsSeries(price,as_series_price); ArraySetAsSeries(buffer,as_series_buffer); //--- return(rates_total); } Alexey Viktorov 2021.04.15 08:52 #14445 Vitaly Muzichenko: Vitaly なぜ、インルーダーから機能をコピーするのですか?ライブラリーを差し込んだ方が楽なのでは? #include <MovingAverages.mqh> Artyom Trishkin 2021.04.15 09:09 #14446 Vitaly Muzichenko: 一般的には、ループからこの関数の呼び出しを削除します。この関数には、すでに完全なループがあります。beginでは、配列の中の重要なデータの先頭を渡す必要があり、それに基づいてスムージングを行います。スムージングの種類によっては、事前計算が必要です。SMMAの場合、約2回の計算期間です。 Alexey Viktorov 2021.04.15 09:23 #14447 Artyom Trishkin:一般的には、ループから この関数の呼び出しを削除 します。この関数には、すでに完全なループがあります。beginでは、配列の中の重要なデータの先頭を渡す必要があり、それに基づいてスムージングを行います。スムージングの種類によっては、事前計算が必要です。SMMAの場合、約2回の計算期間です。 しかし、新しいバーが追加されると、配列全体が再計算されるのではないでしょうか?また、配列の現在値が変わると、バッファも再計算する必要がある。この場合、どうすればループを回避できるのでしょうか? インジケータの開始時に一度、バッファ全体を通して、その後、各ティックで最後のインデックスのみ?これは即席のものです。まだやってません・・・確認しないと。 Artyom Trishkin 2021.04.15 09:38 #14448 Alexey Viktorov:また、この場合、新しいバーが追加されると、配列全体が再計算されるのではないでしょうか?また、バッファ配列の現在値が変化したときに再計算しても問題ないでしょう。では、ループがなければどうでしょう? インジケータの開始時に一度、バッファ全体を通して、その後、各ティックで最後のインデックスのみ?これは即席のものです。まだやってません・・・確認しないと。 Vitalyが直接書き出したコードを見てください。 Vitaly Muzichenko 2021.04.15 10:12 #14449 Artyom Trishkin:Vitalyが直接投稿したコードを見てください。 mt4の "SmoothedMAOnBuffer() "構造をデバッグすることになった。 どうしたんだろう、全然わからないんだけど 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[]) { double Array_1[]; double Array_2[]; int count = IndicatorCounted(); if(count < 0) return (-1); int i = 1; int period = (int)MathFloor(MathSqrt(a)); int val_1 = (int)MathFloor(a / 1.9); int counter = Bars - count + a + 1; if(counter > Bars) counter = Bars; ArraySetAsSeries(Array_1, TRUE); ArrayResize(Array_1, counter); ArraySetAsSeries(Array_2, TRUE); ArrayResize(Array_2, counter); double d_close = close[1]; double buff[]; ArrayResize(buff, counter); for(i = 0; i < counter; i++) Array_1[i] = 2.0 * ma_1(i, val_1) - ma_1(i, a); for(i = 0; i < counter - a; i++) { // buf_3[i] = iMAOnArray(Array_1, 0, period, 0, MODE_SMMA, i); // Так индикатор работает SmoothedMAOnBuffer(counter, prev_calculated, i, period, Array_1, buff); Совсем не работает, но и ошибок в журнале нет buf_3[i] = buff[0]; ??? } for(i = counter - a; i > 0; i--) { Array_2[i] = Array_2[i + 1]; if(buf_3[i] > buf_3[i + 1]) Array_2[i] = 1; if(buf_3[i] < buf_3[i + 1]) Array_2[i] = -1; if(Array_2[i] > 0.0) { buf_1[i] = buf_3[i]; if(Array_2[i + 1] < 0.0) buf_1[i + 1] = buf_3[i + 1]; if(Array_2[i + 1] < 0.0) { } buf_2[i] = EMPTY_VALUE; } else { if(Array_2[i] < 0.0) { buf_2[i] = buf_3[i]; if(Array_2[i + 1] > 0.0) buf_2[i + 1] = buf_3[i + 1]; if(Array_2[i + 1] > 0.0) { } buf_1[i] = EMPTY_VALUE; } } } for(i = 0; i < counter-1; i++) { if(buf_2[i + 1] == EMPTY_VALUE && buf_2[i] != EMPTY_VALUE) buf_4[i] = buf_2[i]; if(buf_1[i + 1] == EMPTY_VALUE && buf_1[i] != EMPTY_VALUE) buf_5[i] = buf_1[i]; } return(rates_total); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ int SmoothedMAOnBuffer(const int rates_total,const int prev_calculated,const int begin,const int period,const double& price[],double& buffer[]) { //--- check period if(period<=1 || period>(rates_total-begin)) return(0); //--- save as_series flags bool as_series_price=ArrayGetAsSeries(price); bool as_series_buffer=ArrayGetAsSeries(buffer); ArraySetAsSeries(price,false); ArraySetAsSeries(buffer,false); //--- calculate start position int start_position; int i=0; if(prev_calculated==0) { // first calculation or number of bars was changed //--- set empty value for first bars start_position=period+begin; for(i=0; i<start_position-1; i++) buffer[i]=0.0; //--- calculate first visible value double first_value=0; for(i=begin; i<start_position; i++) first_value+=price[i]; buffer[start_position-1]=first_value/period; } else start_position=prev_calculated-1; //--- main loop for(i=start_position; i<rates_total; i++) buffer[i]=(buffer[i-1]*(period-1)+price[i])/period; //--- restore as_series flags ArraySetAsSeries(price,as_series_price); ArraySetAsSeries(buffer,as_series_buffer); //--- return(rates_total); } Artyom Trishkin 2021.04.15 10:14 #14450 Vitaly Muzichenko:さて、mt4の "SmoothedMAOnBuffer() "コンストラクトのデバッグにやってきました。どうしたんだろう、全然わからないんだけど ループから外す 1...143814391440144114421443144414451446144714481449145014511452...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ありがとうございました。
試してみたらエラーになった、何か間違っている。
buffer[]は分散されているか?宣言は見えるが、サイズ設定が見えない
buffer[]は分散されているか?宣言は見えるが、設定されたサイズが見えない
サイズを設定しても、どこかでエラーになり、うまくいかない。
サイズを設定しても、どこかでエラーになり、うまくいかない。
何を送信しているのですか?
何を受け継いでいるのか?
Vitaly なぜ、インルーダーから機能をコピーするのですか?ライブラリーを差し込んだ方が楽なのでは?
#include <MovingAverages.mqh>
一般的には、ループからこの関数の呼び出しを削除します。この関数には、すでに完全なループがあります。beginでは、配列の中の重要なデータの先頭を渡す必要があり、それに基づいてスムージングを行います。スムージングの種類によっては、事前計算が必要です。SMMAの場合、約2回の計算期間です。
一般的には、ループから この関数の呼び出しを削除 します。この関数には、すでに完全なループがあります。beginでは、配列の中の重要なデータの先頭を渡す必要があり、それに基づいてスムージングを行います。スムージングの種類によっては、事前計算が必要です。SMMAの場合、約2回の計算期間です。
しかし、新しいバーが追加されると、配列全体が再計算されるのではないでしょうか?また、配列の現在値が変わると、バッファも再計算する必要がある。この場合、どうすればループを回避できるのでしょうか?
インジケータの開始時に一度、バッファ全体を通して、その後、各ティックで最後のインデックスのみ?これは即席のものです。まだやってません・・・確認しないと。
また、この場合、新しいバーが追加されると、配列全体が再計算されるのではないでしょうか?また、バッファ配列の現在値が変化したときに再計算しても問題ないでしょう。では、ループがなければどうでしょう?
インジケータの開始時に一度、バッファ全体を通して、その後、各ティックで最後のインデックスのみ?これは即席のものです。まだやってません・・・確認しないと。
Vitalyが直接書き出したコードを見てください。
Vitalyが直接投稿したコードを見てください。
mt4の "SmoothedMAOnBuffer() "構造をデバッグすることになった。
どうしたんだろう、全然わからないんだけど
さて、mt4の "SmoothedMAOnBuffer() "コンストラクトのデバッグにやってきました。
どうしたんだろう、全然わからないんだけど