エラーがあります あなたのコードをコンパイルし、それをテストしました。
2014.05.22 22:39:43.936 カスタム指標 テスト指標3 XAUUSD,M1: 削除されました。
2014.05.22 22:39:43.905 テスト指標3 XAUUSD,M1:グローバル初期化に失敗
2014.05.22 22:39:43.905 テスト指標3 XAUUSD,M5: uninit reason 3 //----------------------- チャートを変更する
2014.05.22 22:39:17.323 「テスト指標3.mq4」の配列が範囲外 です (117,32)
2014.05.22 22:39:15.591 テスト指標3 XAUUSD,M5: 初期化されました。
2014.05.22 22:39:09.570 カスタムインジケータ テストインジケータ3 XAUUSD,M5: ロード成功
最初にインジケータを起動したときに : prev_calculated == 0 という行を追加する必要があります。
みたいな感じで。
int limit = -100; if( prev_calculated == 0 ) limit = 3000;// will calculate 3000 Bars else limit = rates_total-prev_calculated;
私のPCではエラーは出ませんでした ;-)
ffoorrさん、こんにちは。
あなたの解決策は本当に素晴らしいです。
実を言うと、私は昨晩それを修正するために誰かを雇いました。しかし、そのコードは非効率的で、以下のようにfor(i)をもう一つ追加しています。
prev_calculated==0の意味を説明していただけるとありがたいです。
//+------------------------------------------------------------------+ //| hf1.mq4 | //| Copyright 2013, MetaQuotes Software Corp. | //| httakeprofit://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "httakeprofit://www.mql5.com" #property version "1.00" #property strict //--- indicator settings //#property indicator_chart_window #property indicator_separate_window #property indicator_buffers 5 #property indicator_width1 2 #property indicator_width2 2 #property indicator_width3 1 #property indicator_width4 1 #property indicator_width5 1 #property indicator_color1 Yellow #property indicator_color2 Red #property indicator_color3 Red #property indicator_color4 Orange #property indicator_color5 Orange //--- input parameter input int kperiod=30; input int dperiod=9; input int slow=9; input int sample_roc_quartile=100; //--- buffers double buy[]; double sell[]; double stoploss[]; double takeprofit1[]; double takeprofit2[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit(void) //*/*/*/*/*/ { //--- indicator buffers mapping //--- 1 additional buffer used for counting. //IndicatorBuffers(6); IndicatorDigits(Digits); //--- indicator line SetIndexStyle(0,DRAW_ARROW); SetIndexBuffer(0,buy); SetIndexArrow(0,241); SetIndexStyle(1,DRAW_ARROW); SetIndexBuffer(1,sell); SetIndexArrow(1,242); SetIndexStyle(2,DRAW_ARROW); SetIndexBuffer(2,stoploss); SetIndexStyle(3,DRAW_ARROW); SetIndexBuffer(3,takeprofit2); SetIndexStyle(4,DRAW_ARROW); SetIndexBuffer(4,takeprofit1); //--- name for DataWindow and indicator subwindow label //--- 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<=0)limit =2; double roc_s[]; ArrayResize(roc_s,sample_roc_quartile+1); //--- //------------------------------------------ for(int i=1; i<limit; i++) { //FIRST PSART if(iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i)>iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i) && iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i+1)<iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i+1)) { buy[i]=Close[i]; stoploss[i]=Low[i]-0.005; takeprofit1[i]=Close[i]+0.005; takeprofit2[i]=Close[i]+0.01; } if(iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i)<iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i) && iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i+1)>iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i+1)) { sell[i]=Close[i]; stoploss[i]=High[i]; takeprofit1[i]=Close[i]-0.0050; takeprofit2[i]=Close[i]-0.01; } } //SECOND PART //--------------------------------------- HERE IS THE WHAT HE DID int mid = (sample_roc_quartile +1)/2; for(int i=1; i<limit&&(i+1)<rates_total; i++) { //--------------------------------------------- for(int j=0;j<=sample_roc_quartile&&(i+j+1)<rates_total;j++) { roc_s[j]=Close[i+j]-Close[i+j+1]; ArraySort(roc_s); } if( (Close[i]-Close[i+1])<roc_s[mid] ) { buy[i]=0; stoploss[i]=0; takeprofit1[i]=0; takeprofit2[i]=0; } } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
皆さん、こんにちは・・・。
IBFX MACD traditional indicatorと他のテンプレートをMT4にインストールするのに問題があります。
以前のバージョンでは、「expert」フォルダの中にある「indicator」フォルダにファイルをコピー&ペーストするだけでよかったのですが、現在のバージョンでは、「MQL4」フォルダだけがあり、「expert」と「indicator」の2つのフォルダから構成されています。
現在のものは「MQL4」フォルダのみで、「expert」フォルダと「indicator」フォルダが別々に構成されています。
両方のフォルダにペーストし、プラットフォームを再起動しようとしましたが、うまくいきません。
ということです。
また、2本のEMAラインを持つ伝統的なMACDインディケータを 取得するための他の方法があれば教えてください。
ありがとうございます。
Douglasdouglas_heng: IBFXのMACDトラディショナルインジケーターなどのテンプレートをMT4にインストールするのに苦労しています。 | Don'tDon't multiple (6) posts.他の人の投稿をハイジャックしないでください。 |
ffoorrさん、こんにちは。
あなたの解決策は本当に素晴らしいです。
実を言うと、私は昨晩それを修正するために誰かを雇いました。しかし、そのコードは非効率的で、以下のようにfor(i)をもう一つ追加しています。
prev_calculated==0の意味を説明していただけるとありがたいです。
まあscfxさん、あなたのインジケータの2番目の部分が理解できないので、わからないのですが。
インジケータを初めて起動するとき(チャートに置くとき)、prev_calculatedは構造上ゼロに等しいので、インジケータが計算を開始する起点を固定することができます。
if( prev_calculated == 0) limit = 100;
もしくは
if( prev_calculated < 50) limit = 500:
または、次のようにします。
if( prev_calculated < 500) limit = 3000: (すべて同じ、チャートの始まりは使われない)
int limit = -100; if( prev_calculated == 0 ) limit = 3000;// will calculate 3000 Bars else limit = rates_total-prev_calculated; at the first lauch of the indicator limit = 3000; for(int i=1; i<3000; i++) // draw 3000 bars at the second lauch limit = 0; // ( because rates_total-prev_calculated = 0) ; for(int i=1; i<0; i++) // draw the last bars only, faster
とても良いアイデアです。
![MQL5 - MetaTrader 5クライアントターミナルにビルトインされたトレードストラテジーの言語](https://c.mql5.com/i/registerlandings/logo-2.png)
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
こんにちは。
私はあるインジケータ(最初の部分)から始めています。時間枠を変えても問題なく動作します。
次に、2番目の部分を追加します。Close[i]-Close[i+1]が過去100バーの差の中央値より小さい場合、すべてのバッファに値0を割り当てます。
このインジケータは1つのチャートでは正常に動作しますが、タイムフレームを変更すると、このインジケータは消えてしまいます。そのため、このインジケータをチャートに再接続する必要があります。
この問題はArrayが原因だと思うのですが、どうすれば解決できるのかわかりません。
どなたかこのエラーについて教えていただけませんか?
本当にありがとうございました。
SCFX