ima関数のma_shiftとshiftについて

 
ima関数を使って、遅行移動平均線と現在の移動平均線のクロスで(遅行線が現在線を上抜いたら買い)としたいのですが、
どうすれば良いでしょうか?
移動平均線のインジケーターに表示位置があったので、表示位置を-21とした移動平均線とのクロスでのエントリーを考えています。

ma_shiftとshiftの数値を

  [0] = iMA(NULL,0,MA_period1,-21,0,0,21);
  [1] = iMA(NULL,0,MA_period1,-21,0,0,22);
  [2] = iMA(NULL,0,MA_period2,0,0,0,1);
  [3] = iMA(NULL,0,MA_period2,0,0,0,2);

とすると、思ったところではないところでエントリーされます。

以下の様に設定すると、エントリーされないです。

  [0] = iMA(NULL,0,MA_period1,-21,0,0,1);
  [1] = iMA(NULL,0,MA_period1,-21,0,0,2);
  [2] = iMA(NULL,0,MA_period2,0,0,0,1);
  [3] = iMA(NULL,0,MA_period2,0,0,0,2);
 
移動平均線を遅行させたいだけ(左寄せ)としたいだけなので、shift値を変更するのも違うような気もします。
それとも、以下の様にshift値だけ遅らせるのが良いのでしょうか?

  [0] = iMA(NULL,0,MA_period1,0,0,0,21);
  [1] = iMA(NULL,0,MA_period1,0,0,0,22);
  [2] = iMA(NULL,0,MA_period2,0,0,0,1);
  [3] = iMA(NULL,0,MA_period2,0,0,0,2);
 
 
  ちなみに、買いエントリー の記載は以下となっています。
 
          if( [1] <= [3] ){
            if( [0] > [2] ){


稚拙な質問で申し訳ありませんが、ご教授いただけますと幸いです。

よろしくお願いします。
 
ma0 = iMA(NULL, PERIOD_CURRENT, MA_period, 0, MA_method, aPrice, i);            //遅行線1
ma1 = iMA(NULL, PERIOD_CURRENT, MA_period, 0, MA_method, aPrice, i + 1);        //遅行線2
                
ma2 = iMA(NULL, PERIOD_CURRENT, MA_period, 0, MA_method, aPrice, i + 21);       //先行線1
ma3 = iMA(NULL, PERIOD_CURRENT, MA_period, 0, MA_method, aPrice, i + 21 + 1);   //先行線2
                
if (ma0 > ma2 && ma1 <= ma3)
{
        //買いオーダー
}

先行線の21本目の所に遅行線の0本目が来ているので、このようになります。

ma_shift を使っても画面上の表示が移動するだけですから、うまくいかないはずです。

 

Naguisa Unada 様

丁寧かつわかりやすい解説ありがとうございます。

いただいた内容で試してみます。

お手数お掛けしました。

よろしくお願いします。