begin screening 0 baseDate 2006 7 5 nLowHigh 200 200 begin condition 0 and 1 begin customExpSrc 1 0 1 // ASSEMBLY文は、利用したいDLLを宣言します。 // (.NET専用のDLLはアセンブリと呼ばれます。) // DLLファイルは、KabuTanken.exeと同じフォルダに存在しなければなりません。 $ASSEMBLY TA-Lib-Core.dll // ■BEGIN_DECLARE〜END_DECLAREの中で宣言された変数は、 // 銘柄が切り替わってもデータを記憶しています。 // ■とくに配列領域を毎回確保するのは遅くなるため、 // この領域で変数宣言をしておき、一度確保した領域は使い廻します。 // ■宣言の前に public をつけてください。 $BEGIN_DECLARE public int nCloseBuf = 0; public double [] closeBuf; // 終値を記憶する配列変数 public double [] res; // 結果を記憶する配列変数 $END_DECLARE int n = 25; if( closeBuf == null || n > nCloseBuf ) { // 配列領域がまだ確保されていないときか、 // すでに確保されている領域以上必要なときだけ確保。 // 配列領域確保は遅いので、計算する銘柄が変わるたびに確保しない工夫が必要。 closeBuf = new double[n]; // doubleの配列を確保。 nCloseBuf = n; // 現在の確保数を記憶。 } if( res == null ) res = new double[1]; for( int i = 0 ; i < n ; i++ ) closeBuf[i] = Close(i-n+1); //----- TA-LIB関数です。 // EMAなどの計算を正確にするには、本来はデータの最初から積み上げ計算 // する必要があるのですが、約100日前から計算を積み上げるとほぼ正確に // なります。その100日を設定します。 TicTacTec.TA.Lib.Core.SetUnstablePeriod( TicTacTec.TA.Lib.Core.TA_FuncUnstId.TA_FUNC_UNST_ALL,100); //----- TA-LIB関数で移動平均を求めています。 int outBeg,outNb; TicTacTec.TA.Lib.Core.SMA( n-1,n-1,closeBuf,n,out outBeg,out outNb,res ); double kairi = (Close(0)-res[0])/res[0]*100; if( kairi < 5 ) return false; // 移動平均乖離率が5%以下を排除 $RANKING r_kairi Dbl "移動平均乖離25" $RANKING r_ma Dbl "移動平均25" r_kairi = kairi; r_ma = res[0]; return true; end condition end screening