どのような指標かにもよるのですが、既存の指標の組み合わせ程度でしたらそれほど難しくはありませんし、あえてソフトを使うほどでもありません。
以下に私が使っている自作テンプレを貼っておきますので、このあたりでいけるかどうか試すところからスタートしてみてはいかがでしょう。
//+------------------------------------------------------------------+
//| Boll_Envelope.mq4 //指標名メモ |
//| Copyright J.Bollinger/Yamanaka //作者名メモ |
//+------------------------------------------------------------------+
// 標準指標の組み合わせで誰でも簡単にカスタム指標が作成できるテンプレートです
// MQL4、MQL5に対応しています。
// 当ファイルはアセンダント社が提供していますが、内容の正確さや完全さを保証するものではありません。
// アセンダントは、当ファイルの利用により生ずるいかなる損害の責任を負うものではありません。
// 当ファイル利用する際は、リスクを熟知した上、完全なる自己責任においてご利用ください。
//著作権表示(無くても良い)
#property copyright "Copyright J.Bollinger/Yamanaka"
//メインチャート、サブチャートのどちらに表示するか
//メインチャート表示は上を有効に、サブチャート表示は下を有効に
#property indicator_chart_window
//#property indicator_separate_window
//何本の線を何色で表示するか(最大512本)
#property indicator_buffers 3 //何本のラインを表示するか(ここでは3本)
#property indicator_color1 Red //ライン1の色指定
#property indicator_color2 Green //ライン2の色指定
#property indicator_color3 Blue //ライン3の色指定
//#property indicator_color4 Magenta //ライン4の色指定
//#property indicator_color5 Cyan //ライン5の色指定
//以下同じように増やしていけば良い
//---- パラメータ
//外部入力するパラメータはここで指定
extern int BandsPeriod=21; //バンドの計算期間
extern double BandsDeviations=1.75; //バンドの標準偏差(実数)
//---- バッファ
string indName="Bollinger_Envelope"; //指標名
double ExtMapBuffer0[]; //ライン1のバッファ宣言
double ExtMapBuffer1[]; //ライン2のバッファ宣言
double ExtMapBuffer2[]; //ライン3のバッファ宣言
//double ExtMapBuffer3[]; //ライン4のバッファ宣言
//double ExtMapBuffer4[]; //ライン5のバッファ宣言
//以下同じように増やしていけば良い
int FixZeroD=0; //変更しない
//カスタム指標の初期化
int init()
{
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1); //ライン1の線種
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1); //ライン2の線種
SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,1); //ライン3の線種
//SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,1); //ライン4の線種
//SetIndexStyle(4,DRAW_LINE,STYLE_SOLID,1); //ライン5の線種
//以下同じように増やしていけば良い
SetIndexBuffer(0,ExtMapBuffer0); //ライン1のバッファ設定
SetIndexBuffer(1,ExtMapBuffer1); //ライン2のバッファ設定
SetIndexBuffer(2,ExtMapBuffer2); //ライン3のバッファ設定
//SetIndexBuffer(3,ExtMapBuffer2); //ライン4のバッファ設定
//SetIndexBuffer(4,ExtMapBuffer2); //ライン5のバッファ設定
//以下同じように増やしていけば良い
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
return(0);
}
//カスタム指標の表示
int start()
{
int i,Counted_bars;
Counted_bars=IndicatorCounted();
i=Bars-Counted_bars-1;
if(Counted_bars == 0)
i = Bars -1 -FixZeroD;
double sum=0;
while(i>=0) //各ラインの計算
{
ExtMapBuffer0[i]=iBands(NULL,0,BandsPeriod,BandsDeviations,0,PRICE_HIGH,MODE_UPPER,i); //ライン1の計算
ExtMapBuffer1[i]=iBands(NULL,0,BandsPeriod,BandsDeviations,0,PRICE_LOW,MODE_LOWER,i); //ライン2の計算
ExtMapBuffer2[i]=(ExtMapBuffer0[i]+ExtMapBuffer1[i])/2; //ライン3の計算
//ExtMapBuffer3[i]= //ライン4の計算
//ExtMapBuffer4[i]= //ライン5の計算
i--;
}
return(0);
}