// // 包み陰線+上ひげ // // 〜.efuncというファイルに関数としてまとめておくと、$FUNC文を利用して // スクリーニングとバックテストの両方で同じ手法を使うことが簡単になります。 //--------------------各パラメータの意味の説明 // 高値判定パラメータ //  5日移動平均乖離率が2以上を底値とする場合。 // int ma_days = 5; // 移動平均線の日数 // double maRate = 2; // 移動平均乖離率がこれ以上じゃないとだめ // 包み陰線判定パラメータ // 昨日と今日の終値と始値の差が今日の終値にたいして、この%以上ないと駄目。 // すなわちどれぐらい昨日を包んでいるかを決める。 // 1%というと、ちょっとだけ包んでいればOK。 // double tsutsumiRate = 1; // // 上ヒゲ判定パラメータ // 上ひげの長さが全体の長さの、この%以上を上ヒゲとみなす。 // double higeRate = 10; //-------------------------------------------------------- // 移動平均乖離率インジケータをMARateという名前で使う宣言 $INDICATOR MARate $MARate bool Uwahige_Tsutsumi(int ma_days,double maRate,double tsutsumiRate,double higeRate) { // 高値判定部分------------------------------- // 移動平均乖離率の移動平均日数をma_daysにする。 $MARate.MA.days = ma_days; // 今日の移動平均乖離率を求め、rに入れる。 double r = $MARate.MARate.Value(0); if( r < maRate ) return false; // 包み陰線の判定部分--------------------------- // 昨日、今日のいずれかで取引がないときはやめ。 if( Double.IsNaN(Close(-1)) ) return false; if( Double.IsNaN(Close(0)) ) return false; // 前日の始値と終値の小さいほうをl,大きいほうをhにする。 double l,h; if( Open(-1) > Close(-1) ) { l = Close(-1); h = Open(-1); } else { l = Open(-1); h = Close(-1); } if( Close(0) > Open(0) ) // 今日が陽線は違う。 return false; if( Close(0) >= l ) // 今日の終値が昨日の安値より高いとだめ。 return false; if( Open(0) <= h ) return false; double h1 = h-l; // 昨日の実幅 double h0 = Open(0)-Close(0); // 今日の実幅 double diff = h0-h1; r = diff/Close(0)*100; if( r < tsutsumiRate ) return false; //実幅差が 指定%以上ない。 // 上ひげ判定部分--------------------------------- //  すでにClose(0) hc ) return false; // 上ひげの長さが、全体の長さの5%以下はだめ if( hl*higeRate/100 > hc ) return false; return true; }