EAラボラトリーフォーラム::FXシステムトレード情報満載のコミュニティサイト http://forum.ea-labo.com/ | |
配列へ代入する http://forum.ea-labo.com/viewtopic.php?f=3&t=1641 |
ページ 1 / 1 |
作成者: | tractor [ 2010年12月28日(火) 12:34 ] |
記事の件名: | 配列へ代入する |
初めて投稿します。よろしくお願いします。 MACDとその9日EMAの乖離だけを表示させようと考えています。 コードは下のように記述しています。 指標バッファの配列ではない、ただ単の配列vMACD[]にMACDの値を挿入しようとしたのですが、できませんでした。指標バッファに指定すると、できます。 コード: #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 LightSeaGreen //指標バッファ double BufJudge[]; //パラメーター extern int FastEMA = 12; extern int SlowEMA = 26; extern int SignalEMA = 9; //+------------------------------------------------------------------+ //| 初期化関数 | //+------------------------------------------------------------------+ int init() { //指標バッファの割り当て SetIndexBuffer(0,BufJudge); //指標スタイルの設定 SetIndexStyle(0,DRAW_HISTOGRAM, STYLE_SOLID, 3); return(0); } //+------------------------------------------------------------------+ //| 指標処理関数 | //+------------------------------------------------------------------+ int start() { double vMACD[]; double vSignal; int limit = Bars-IndicatorCounted(); for(int i=limit-1; i>=0; i--) { if(i == Bars-1) { vMACD[i] = 0; } else { vMACD[i] = iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i) -iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i); //MACDの計算 } } if(limit == Bars) limit -= SignalEMA-1; for(i=limit-1; i>=0; i--) { vSignal = iMAOnArray(vMACD,0,SignalEMA,0,MODE_EMA,i); //シグナルの計算 BufJudge[i] = vMACD[i] - vSignal; } return(0); } //+------------------------------------------------------------------+ 配列の宣言をするときに、vMACD[100]というように数値を指定するとその数の分はうまくいきます。またvMACD[Bars]とするとコンパイルエラーとなります。 何か間違いか勘違いをしているような気がするのですが、先週からここでストップし頓挫しています。 どこが間違いか指摘していただけると、うれしいです。 |
作成者: | Brian [ 2011年1月12日(水) 00:51 ] |
記事の件名: | Re: 配列へ代入する |
tractor様 ざっくり読みですいません。 指標バッファにすると成功すると言うことですし、 見た感じ、特別な処理をしていないので、 時系列配列と、通常の配列の違いに依る物だと思います。 指標の配列は、自動的に時系列配列になります。 また、時系列配列は小さい物ほど新しくなり、 かつ、新しいバーが生成されると、自動的に値がシフトします。 インジケータの計算に用いるならば素直に指標バッファにした方が楽です。 SetIndexStyleにて、(チャートの背景が黒ならば)CLR_NONEに指定して、 表示させない。(正確には背景色と同じにして見えなくする) という方法が良いかと思います。 詳しくはfai様が良い記事を書いてくださってます。 また、指標バッファにせずに、同じ事を実現させるコードも書いてくださっています。 一度読んでおくと良いと思います。 http://d.hatena.ne.jp/fai_fx/20101125 http://d.hatena.ne.jp/fai_fx/20090825/1251126096 |
作成者: | tractor [ 2011年1月14日(金) 18:38 ] |
記事の件名: | Re: 配列へ代入する |
Brian 様 ありがとうございます。おかげ様で解決することができました。 時系列配列と通常の配列の違いということで、その認識がなかったことに原因がありました。 リンク先の記事にも書かれていましたが「初心者が必ず引っ掛かる問題」まさにそうでした。 通常配列を時系列配列に設定して、以下のようなコードにしてみました。 コード: #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 LightSeaGreen //指標バッファ double BufJudge[]; //パラメーター extern int FastEMA = 12; extern int SlowEMA = 26; extern int SignalEMA = 9; //+------------------------------------------------------------------+ //| 初期化関数 | //+------------------------------------------------------------------+ int init() { //指標バッファの割り当て SetIndexBuffer(0,BufJudge); //指標スタイルの設定 SetIndexStyle(0,DRAW_HISTOGRAM, STYLE_SOLID, 3); return(0); } //+------------------------------------------------------------------+ //| 指標処理関数 | //+------------------------------------------------------------------+ int start() { double vMACD[]; double vSignal[]; ArrayResize(vMACD,Bars); ArrayResize(vSignal,Bars); ArraySetAsSeries(vMACD,true); ArraySetAsSeries(vSignal,true); int limit = Bars-IndicatorCounted(); for(int i=limit-1; i>=0; i--) { if(i == Bars-1) { vMACD[i] = 0; } else { vMACD[i] = iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i) -iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i); //MACDの計算 } } if(limit == Bars) limit -= SignalEMA-1; for(i=limit-1; i>=0; i--) { vSignal[i] = iMAOnArray(vMACD,0,SignalEMA,0,MODE_EMA,i); //シグナルの計算 BufJudge[i] = vMACD[i] - vSignal[i]; } return(0); } //+------------------------------------------------------------------+ 一つ山を越えることができて、ほっとしています。 ありがとうござました。 |
作成者: | Brian [ 2011年1月14日(金) 23:38 ] |
記事の件名: | Re: 配列へ代入する |
tractor様 おめでとうございます。 バグとかで悩んでたのが解決した時ってうれしいですよね。 もっと早く書き込めればよかったんですが。。orz fai様のブログは本当に色々詳しく検証してあって、もはや私の聖典です^^ googleの "site:"検索を活用して、私も相当悩み解決してもらいました。 |
作成者: | tractor [ 2011年1月16日(日) 12:42 ] |
記事の件名: | Re: 配列へ代入する |
Brian 様 ありがとうございます。本当にうれしかったです。 こちらこそ、返事が遅くなってしまってすいません。 fai様のブログ、検索、の件も重ねてありがとうございます。 これからも活用させていただきます。m( )m |
ページ 1 / 1 | All times are UTC + 9 hours |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |