どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 253

 
lottamer:

与えられたバー数に対して、MACD指標の最小値(図のように)と最大値を決定する必要があるのですが。(この場合は20)。

価格に対してこれを行うコードを見つけ、愚かにもHIGH LOWをMACDに置き換えてみたのですが、何の効果もありませんでした...。


必要な MACD データを配列 massMACD[20] にコピーし、その配列の中から最小値ArrayMinimum(massMACD); と最大値
ArrayMaximum(massMACD); を求めます。
 
ALXIMIKS:
カスタムmacdacの末尾に挿入する。

追伸:より正しくて良いですが。


だとしたら、うまくいかない......。

double MACDBuffer[];
double SignalBuffer[];

 
 int start()
  {
   int limit;
   int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//---- macd counted in the 1-st buffer
   for(int i=0; i<limit; i++)
      MACDBuffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line counted in the 2-nd buffer
   for(i=0; i<limit; i++)
      SignalBuffer[i]=iMAOnArray(MACDBuffer,Bars,9,0,MODE_SMA,i);
        //t=MACDBuffer[0];
        //Print(t*10000);
//---- done
  
  
int max,min;
   static double maxlast,minlast;
   max = ArrayMaximum(MACDBuffer,20,1);
   min = ArrayMinimum(MACDBuffer,20,1);
   if (MACDBuffer[max]!=maxlast){
      maxlast=MACDBuffer[max];
      ObjectDelete  ("highline");   
      ObjectCreate ("highline",1,WindowOnDropped( ) ,0,MACDBuffer[max],0,0);
   }
   if (MACDBuffer[min]!=minlast){
      minlast=MACDBuffer[min];
      ObjectDelete  ("lowline");   
      ObjectCreate ("lowline",1,WindowOnDropped( ) ,0,MACDBuffer[min],0,0);
      Print(min,max);
   }
    return(0);
  }
 
artmedia70:
必要な MACD データを配列 massMACD[20] にコピーし、この配列の中で検索します。
最小値 ArrayMinimum(massMACD); および
最大値 ArrayMaximum(massMACD); values.


をご覧ください。

問題は、どのようにしてデータをアレイにコピーするかということです。

for(int i=1; i<20; i++)
      MACDBuffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);

とか、こんな感じ?

   MACDLineBuffer[i] = iMACD(NULL, 0, 12,26,9,PRICE_CLOSE,MODE_MAIN,i);
 
lottamer:


だとしたら、うまくいかない......。

カスタム MACDの最後に。

ナビゲーター ==>カスタムインディケータ==> MACD ==> PCM (マウス右ボタン) ==> 編集=>

 
lottamer:


は素晴らしい。

問題は、どのようにしてデータをアレイにコピーするかということです。

とか、こんな感じ?


man, それは同じことです。ただ、iMACDを呼び出すと そのソースコードと同じだけのリソースを消費する、という事実がないだけです。

iMACDとすべてのiCostumは配列メンバの値を返すので、ループしてバッファに集め、さらにopする必要があります。

  MACDLineBuffer[i] = iMACD(NULL, 0, 12,26,9,PRICE_CLOSE,MODE_MAIN,i);

というのは、1つの値しか得られず、20個必要なので、ループを使用します。

for(int i=1; i<20; i++)
      MACDLineBuffer[i] = iMACD(NULL, 0, 12,26,9,PRICE_CLOSE,MODE_MAIN,i);

 
ALXIMIKS:

カスタム MACDの最後に。

ナビゲーター ==> カスタムインディケータ ==> MACD ==> PCM (マウス右ボタン) ==> 編集=>

ということです。)

ただ、確かに私が必要としていることはできませんが、一例として活用してみようと思います。

しゃい

 

を始めましょう。

int start()
  {
  
    
for(int i=0; i<20; i++)
MACDBuffer[i] = iMACD(NULL, 0, 12,26,9,PRICE_CLOSE,MODE_MAIN,i);

20(19でも可)個のインジケータ値を配列にコピーするには、これだけで良いのでしょうか?

 
lottamer:

を始めましょう。

20(19でも可)個のインジケータ値を配列にコピーするだけで良いのでしょうか?

はっきり言って、誰かが何かを必要としていて、私が何かを知っているならば、私は喜んでその人を助けようとします。

でも、屁の後にいちいち尻を拭かないよ。

そうです、静的配列 doubleMACDBuffer[20] を宣言すれば十分で、動的配列 doubleMACDBuffer[] を宣言すれば十分ではありません。

artmedia70が教えて くれましたね。

 
ALXIMIKS:

はっきり言って、誰かが何かを必要としていて、私が何かを知っているならば、私は喜んでその人を助けようとします。

でも、屁の後にいちいち尻を拭かないよ。

そうです、静的配列 doubleMACDBuffer[20] を宣言すれば十分で、動的配列 doubleMACDBuffer[] を宣言すれば十分ではありません。

artmedia70が教えて くれましたね。


よし、静止画にしよう。

double MACDBuffer[20];

double min,max;
 
  
 int start()
  {
 
   for(int i=0; i<20; i++)
      MACDBuffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);

   min=ArrayMinimum(MACDBuffer);
   max=ArrayMaximum(MACDBuffer);
  
  Print(min,"____",max);

なぜ19__0と表示されるのですか?

 
lottamer:


OK、静止画にしましょう。

なぜ19__0と表示されるのですか?


なぜなら、正しく機能するからです。他に何か?