コーディングのヘルプ - ページ 743

 
mladen:
特異スペクトル解析(SSA)は、エンドポイント版でない限り再計算されます。そのインジケータは「通常の」SSAを使用しているので、それも再計算されます。
ありがとうございました。
 
mladen:

申し訳ありませんが、このコードからは、あなたの意図が全く読み取れません。

もしあなたがレベル付き平均を作ろうとしているなら、私が投稿したものをテンプレートとして使ってください。

こんにちは。

はい、私はあなたのレベル付き高度なMAを使用します(それはより多くの価格、等々、色付きのMA、等々を持っています)。

しかし、私はカスタムインジケータの 作成方法を理解するために、自分で1つを作成しようとしました。

私のアイデアは、同じコンポーネント(基本的に2つのレベルを持つMA...)を作成することです。

私は中央のMAと、レベルと同じ効果を与えるために点線を使ってプロットされた別の2つのMAを使用しています...
それぞれのレベルについて、私は計算イベントを使用してバッファに入力しました。
レベルをシミュレートする2つのMAは、垂直方向にシフトされます...しかし、それは動作していません。

 
baraozemo:

こんにちは。

はい、私はあなたの高度なMAを使用します、(それはより多くの価格を持っているなど...色のMA、等...)。

しかし、私はカスタムインジケータの作成方法を理解するために、自分で1つを作成しようとしました。

私のアイデアは、同じコンポーネント(基本的に2レベルのMA...)を作成することです。

私は中央のMAと、レベルと同じ効果を与えるために点線を使ってプロットされた別の2つのMAを使用しています...
それぞれのレベルについて、私は計算イベントを使用してバッファに入力しました。
レベルをシミュレートする2つのMAは、垂直方向にシフトされます...しかし、それは動作していません。

はい、それは私が言いたかったことです。

それはとてもシンプルです。

  • MAを作る (平均)
  • レベル1に対して上下に差をつける(さらに2つのバッファを作る)
  • レベル 2 のために上下にいくつかの違いを追加 (さらに 2 つのバッファを作成)

平均の計算や他の何かを変更する必要はありません: 中央の(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);
  }
//+------------------------------------------------------------------+
mladen
:

そうです、そういうことです

これはとても簡単なことです。

  • ma (平均) を作成する
  • レベル 1 のために上下にいくつかの差を加える (さらに 2 つのバッファを作成)
  • レベル 2 に対して上下に差をつける (さらに 2 つのバッファを作成する)

平均値の計算や他の何かを変更する必要はありません : 中央の (ma) バッファから単純に加算または減算するだけです。

ma を加算/減算(垂直方向)するサンプルコードを示してもらえますか? 試してみましたが、私のコードは失敗しました。

 
baraozemo:

このような場合、どのようにすればいいのでしょうか?

私が投稿したバージョンでは、そのようになっています。もう一度コードを確認して ください。
 
mladen:
このインジケータはセンターリングされたTMAを使用しています - それは再計算されます。アラートは意味がない

OK 色が変わったときの矢印の意味

 
dotmund:

OK 色が変わるときの矢印は?

信号(矢印)は再計算・再塗装のため意味がない
 
mladen:
シグナル(矢印)は再計算・再描画のため意味がないのでは?

mladenさんへ。

Ecnに対応していないエキスパートでも、Ecnタイプのブローカーで問題なく使用できるのでしょうか?

一部のエキスパートでは、Ecnタイプのブローカー用のオプションがあります。

そのため、Ecnタイプのブローカー用に最適化するか、いくつかのコードを追加した方が良いのではないかと思いました。

 
oguz:

mladenさんへ。

Ecnに対応していないエキスパートでも、Ecnタイプのブローカーで問題なく使用できるのでしょうか?

一部のエキスパートでは、Ecnタイプのブローカー用のオプションがあります。

そのため、Ecnタイプのブローカー用に最適化するか、いくつかのコードを追加した方が良いのではないかと思いました。

ストップロスやテイクプロフィットを 使用せずに注文を出す場合は可能です。

逆にecn/stp用に作られたものであれば、どのブローカーでも全く問題なく動きます。唯一の違いは、注文を開始する時点です - 他の変更(または最適化)は全く必要ありません。

 
oguz:

詳しくご回答いただきありがとうございます。

私の知る限り、添付のEaはEcnタイプのブローカーをサポートしていません。

このEaをEcnタイプのブローカーでSLとTPを使用して使用したいのです。

Ecnタイプのブローカーサポートを提供していただけると非常にうれしいです。

そのeaは、誰もが理解できるように書き直す必要があります。

しかし、私はそのeaで使用されている言語を話すことができないので、助けることができません。申し訳ありません。