//+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ voidOnInit() { //--- indicator buffers mapping SetIndexBuffer(0,ExtLineBuffer,INDICATOR_DATA); //MA Buffer SetIndexBuffer(1,ExtLv1Buffer,INDICATOR_DATA); //MA lv1 Buffer SetIndexBuffer(2,ExtLv2Buffer,INDICATOR_DATA); //MA lv2 Buffer //--- set accuracy IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1); //--- sets first bar from what index will be drawn
//--- check for bars count if(rates_total<InpMAPeriod-1+begin) return(0);// not enough bars for calculation //--- first calculation or number of bars was changed if(prev_calculated==0) { ArrayInitialize(ExtLineBuffer,0); //MA ArrayInitialize(ExtLv1Buffer,1); //MA level1 ArrayInitialize(ExtLv2Buffer,2); //MA level2 } //--- sets first bar from what index will be draw PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpMAPeriod-1+begin); //MA PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,InpMAPeriod-1+begin); //MA lvl1 PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,InpMAPeriod-1+begin); //MA lvl2
特異スペクトル解析(SSA)は、エンドポイント版でない限り再計算されます。そのインジケータは「通常の」SSAを使用しているので、それも再計算されます。
申し訳ありませんが、このコードからは、あなたの意図が全く読み取れません。
もしあなたがレベル付き平均を作ろうとしているなら、私が投稿したものをテンプレートとして使ってください。
こんにちは。
はい、私はあなたのレベル付き高度なMAを使用します(それはより多くの価格、等々、色付きのMA、等々を持っています)。
しかし、私はカスタムインジケータの 作成方法を理解するために、自分で1つを作成しようとしました。
私のアイデアは、同じコンポーネント(基本的に2つのレベルを持つMA...)を作成することです。
私は中央のMAと、レベルと同じ効果を与えるために点線を使ってプロットされた別の2つのMAを使用しています...
それぞれのレベルについて、私は計算イベントを使用してバッファに入力しました。
レベルをシミュレートする2つのMAは、垂直方向にシフトされます...しかし、それは動作していません。
こんにちは。
はい、私はあなたの高度なMAを使用します、(それはより多くの価格を持っているなど...色のMA、等...)。
しかし、私はカスタムインジケータの作成方法を理解するために、自分で1つを作成しようとしました。
私のアイデアは、同じコンポーネント(基本的に2レベルのMA...)を作成することです。
私は中央のMAと、レベルと同じ効果を与えるために点線を使ってプロットされた別の2つのMAを使用しています...
それぞれのレベルについて、私は計算イベントを使用してバッファに入力しました。
レベルをシミュレートする2つのMAは、垂直方向にシフトされます...しかし、それは動作していません。
はい、それは私が言いたかったことです。
それはとてもシンプルです。
平均の計算や他の何かを変更する必要はありません: 中央の(MA)バッファから単純に加算または減算するだけです。
double pipLevel1 = -10;
double pipLevel2 = 10;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,ExtLineBuffer,INDICATOR_DATA); //MA Buffer
SetIndexBuffer(1,ExtLv1Buffer,INDICATOR_DATA); //MA lv1 Buffer
SetIndexBuffer(2,ExtLv2Buffer,INDICATOR_DATA); //MA lv2 Buffer
//--- set accuracy
IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//--- sets first bar from what index will be drawn
PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID); //MA Style
PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_DOT); //MA lvl1 Style
PlotIndexSetInteger(2,PLOT_LINE_STYLE,STYLE_DOT); //MA lvl2 Style
//IndicatorSetInteger(INDICATOR_LEVELS,1,InpLevel1); //MA lvl1 Value
//IndicatorSetInteger(INDICATOR_COLOR2,1,Cyan);
//IndicatorSetInteger(INDICATOR_STYLE2,1,STYLE_DOT);
//IndicatorSetInteger(INDICATOR_IDTH,1,1);
//IndicatorSetInteger(INDICATOR_LEVELS,2,InpLevel2); //MA lvl2 Value
//IndicatorSetInteger(INDICATOR_LEVELCOLOR,2,Cyan);
//IndicatorSetInteger(INDICATOR_LEVELSTYLE,2,STYLE_DOT);
//IndicatorSetInteger(INDICATOR_LEVELWIDTH,2,1);
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpMAPeriod); //MA
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,InpMAPeriod); //MA lvl1
PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,InpMAPeriod); //MA lvl2
//---- line shifts when drawing
PlotIndexSetInteger(0,PLOT_SHIFT,InpMAShift); //MA
PlotIndexSetInteger(1,PLOT_SHIFT,InpMAShift); //MA lvl1
PlotIndexSetInteger(2,PLOT_SHIFT,InpMAShift); //MA lvl2
//--- name for DataWindow
string short_name="unknown ma";
switch(InpMAMethod)
{
case MODE_EMA : short_name="EMA"; break;
case MODE_LWMA : short_name="LWMA"; break;
case MODE_SMA : short_name="SMA"; break;
case MODE_SMMA : short_name="SMMA"; break;
}
IndicatorSetString(INDICATOR_SHORTNAME,short_name+"("+string(InpMAPeriod)+")");
//---- sets drawing line empty value--
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0); //MA
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0); //MA lvl1
PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0.0); //MA lvl2
//---- initialization done
}
//+------------------------------------------------------------------+
//| Moving Average |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const int begin,
const double &price[])
{
double pipMultiplier=_Point*MathPow(10,MathMod(_Digits,2));
pipLevel1 = InpLevel1 * pipMultiplier;
pipLevel2 = InpLevel2 * pipMultiplier;
//Print("point:"+_Point+" Digits:"+_Digits+ "pipMul:"+pipMultiplier);
//pipLevel1 = InpLevel1 / 10;
//pipLevel2 = InpLevel2 / 10;
//--- check for bars count
if(rates_total<InpMAPeriod-1+begin)
return(0);// not enough bars for calculation
//--- first calculation or number of bars was changed
if(prev_calculated==0)
{
ArrayInitialize(ExtLineBuffer,0); //MA
ArrayInitialize(ExtLv1Buffer,1); //MA level1
ArrayInitialize(ExtLv2Buffer,2); //MA level2
}
//--- sets first bar from what index will be draw
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpMAPeriod-1+begin); //MA
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,InpMAPeriod-1+begin); //MA lvl1
PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,InpMAPeriod-1+begin); //MA lvl2
//--- calculation
switch(InpMAMethod)
{
case MODE_EMA:
CalculateEMA(rates_total,prev_calculated,begin,price);
ExtLv1Buffer[rates_total-1]=price[rates_total-1]+pipLevel1;
ExtLv2Buffer[rates_total-1]=price[rates_total-1]+pipLevel2;
//Print ("rates_total:"+rates_total+" prev:"+prev_calculated+" begin:"+begin+" price:"+price[rates_total-1]);
break;
case MODE_LWMA:
CalculateLWMA(rates_total,prev_calculated,begin,price);
ExtLv1Buffer[rates_total-1]=price[rates_total-1]+pipLevel1;
ExtLv2Buffer[rates_total-1]=price[rates_total-1]+pipLevel2;
break;
case MODE_SMMA:
CalculateSmoothedMA(rates_total,prev_calculated,begin,price);
ExtLv1Buffer[rates_total-1]=price[rates_total-1]+pipLevel1;
ExtLv2Buffer[rates_total-1]=price[rates_total-1]+pipLevel2;
break;
case MODE_SMA:
CalculateSimpleMA(rates_total,prev_calculated,begin,price);
ExtLv1Buffer[rates_total-1]=price[rates_total-1]+pipLevel1;
ExtLv2Buffer[rates_total-1]=price[rates_total-1]+pipLevel2;
break;
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
そうです、そういうことです
これはとても簡単なことです。
平均値の計算や他の何かを変更する必要はありません : 中央の (ma) バッファから単純に加算または減算するだけです。
ma を加算/減算(垂直方向)するサンプルコードを示してもらえますか? 試してみましたが、私のコードは失敗しました。
このような場合、どのようにすればいいのでしょうか?
このインジケータはセンターリングされたTMAを使用しています - それは再計算されます。アラートは意味がない
OK 色が変わったときの矢印の意味
OK 色が変わるときの矢印は?
シグナル(矢印)は再計算・再描画のため意味がないのでは?
mladenさんへ。
Ecnに対応していないエキスパートでも、Ecnタイプのブローカーで問題なく使用できるのでしょうか?
一部のエキスパートでは、Ecnタイプのブローカー用のオプションがあります。
そのため、Ecnタイプのブローカー用に最適化するか、いくつかのコードを追加した方が良いのではないかと思いました。
mladenさんへ。
Ecnに対応していないエキスパートでも、Ecnタイプのブローカーで問題なく使用できるのでしょうか?
一部のエキスパートでは、Ecnタイプのブローカー用のオプションがあります。
そのため、Ecnタイプのブローカー用に最適化するか、いくつかのコードを追加した方が良いのではないかと思いました。
ストップロスやテイクプロフィットを 使用せずに注文を出す場合は可能です。
逆にecn/stp用に作られたものであれば、どのブローカーでも全く問題なく動きます。唯一の違いは、注文を開始する時点です - 他の変更(または最適化)は全く必要ありません。
詳しくご回答いただきありがとうございます。
私の知る限り、添付のEaはEcnタイプのブローカーをサポートしていません。
このEaをEcnタイプのブローカーでSLとTPを使用して使用したいのです。
Ecnタイプのブローカーサポートを提供していただけると非常にうれしいです。
そのeaは、誰もが理解できるように書き直す必要があります。
しかし、私はそのeaで使用されている言語を話すことができないので、助けることができません。申し訳ありません。