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

 
ModRed:
MAインジケーターがあります。そして、それに似たHMAのインジケーターがあります。どのようにEAに挿入するのですか?コードを完全にコピーする?それとも、もっと短いバリエーションがあるのでしょうか?

スタディーアイカスタム
 
Mitruha:

アイデアは非常に良いですが、あなたは他のterminal.Wouldに転送またはコピー取引は、ブローカーのサービスなしでそれをうまく行うことが可能であるようなプログラムをここで見たことがありますか?

そんなプログラム
 
ModRed:
MAインジケーターがあります。そして、それに似たHMAのインジケーターがあります。どのようにEAに挿入するのですか?コードを完全にコピーする?それとも、もっと短いバリエーションがあるのでしょうか?
どうすればいい のか
 

このインジケータは平滑化されたCCIの一種で、周期と倍率の2つのパラメータを変更することができます。

 
alsu:

しかし、一般的には、もちろんコンストラクタをオーバーロードして、Init()の代わりに使うことができます、何しろ同じ関数ですから。どんな変種に頼るかは人それぞれ、好みの問題で、ご存知のようにアドバイザーはいない)


また、初期化に失敗した場合、例えばInit()などのメソッドを使用した場合、対応する型の値を返し、エラー時には適切な値を返すと表現することができる。このため、呼び出し元のコードは、初期化に失敗し、そのオブジェクトが使用できないことを知ることができます。コンストラクタを使用したときに、呼び出し側のコードが初期化の失敗を知るにはどうしたらよいでしょうか?

 

ヘルプみんな、どのようにフクロウは、信号によって開かれた位置と同じバーで注文を開かないようにし、新しいバーを待って、再び信号をチェックし、私はそうでした - バーによってバー

を追加しました。

datetime   BARflag  = 0; 
и -
int start()
{
 datetime now = Time[0];
  if(BARflag >= now) return(0);
   BARflag = now;
 
bergkamp.:

ヘルプみんな、どのようにフクロウは、信号によって開かれた位置と同じバーで注文を開かないようにし、新しいバーを待って、再び信号をチェックし、私はそうでした - バーによってバー

を追加しました。

и -

こんな感じ。

   //---
   if(iBarShift(OrderSymbol(),Period(),OrderOpenTime())==0) {
      // выбранный ордер открыт на нулевом (текущем) баре, значит ещё рано открывать следующий
      }
   else {
      // выбранный ордер открыт не на нулевом (текущем) баре, значит можно открывать следующий
      }
 
artmedia70:

こんな感じ。

ありがとうございます、例のために所定の行を解読するのは簡単でしょうか? --// 選択した注文はゼロ(現在の)バーで開いているので、次のものを開くには早すぎます

//選択された 注文はゼロ(現在の)バーでオープンされていないため、次の注文をオープンしてもよいことを意味します ......???

 
bergkamp.:

ありがとうございました。例の規定行を解読することは可能でしょうか? --//選択された注文はゼロ(現在の)バーで開かれたので、次のバーを開くには早すぎます

//選択された注文はゼロ(現在の)バーでオープンされていないため、次の注文をオープンしてもよいことを意味します ......???

最後に開いた ポジションを開くためのバーを返す関数です。

//+------------------------------------------------------------------+
   int BarOpenLastPos(string sy, int timeframe, int op, int mn) {
      datetime t=0;
      int      i, j=-1, k=OrdersTotal()-1;
      for (i=k; i>=0; i--) {
         if (OrderSelect(i, SELECT_BY_POS)) {
            if (OrderSymbol()!=sy)        continue;
            if (OrderType()!=op)          continue;
            if (OrderMagicNumber()!=mn)   continue;
            if (t<OrderOpenTime()) {
               t=OrderOpenTime();
               j=i;
               }
            }
         }
      if (OrderSelect(j, SELECT_BY_POS)) return(iBarShift(sy,timeframe,OrderOpenTime()));
      return(-1);
   }
//+------------------------------------------------------------------+

もし、この関数が-1を返したら、その関数にデータが渡されたオープンポジションは存在しないことになります。

使用例

if(BarOpenLastPos(Symbol(), Period(), OP_BUY, magic)>0) {
   // бар открытия последней открытой позиции Buy на текущем символе, текущем таймфрейме, 
   // с магиком magic больше нулевого --> можно открывать следующую позицию
   }

または

if(BarOpenLastPos(USDCAD, PERIOD_M15, OP_SELL, magic0)<0) {
   // нет позиций Sell на USDCAD с магиком magic0 --> можно открывать позицию на USDCAD
   }
 

目利きの方、よろしくお願いします...。

アルゴリズムテスト01

//+------------------------------------------------------------------+
//test                                                                    
//+------------------------------------------------------------------+

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1  clrGold
#property indicator_color2  clrBlue

#property indicator_level1    0

//--- indicator buffers
double Buf0[];
double Buf1[];

double t1[];
double t2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(4);
   SetIndexBuffer(0,Buf0); SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(1,Buf1); SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(2,t1); 
   SetIndexBuffer(3,t2); 
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
   
   {
   int i,counted_bars;
   counted_bars=IndicatorCounted();
   i=Bars-counted_bars-1;
   
int sr=24,n;
double sum,sum2;
double m1,m2;

  
   while(i>=0)
   {
   sum=0;
   sum2=0;
   
   for(n=i; n<=i+sr-1; n++) 
   {
   if(Open[i]>Open[i+1]) m1=sum=sum+Close[i]-Close[n];
   if(Open[i]<Open[i+1]) m2=sum=sum+Close[i]-Close[n];
   
   if(Open[i]>Open[i+1]) t1[i]=sum2=sum2+Close[i]-Close[n];
   if(Open[i]<Open[i+1]) t2[i]=sum2=sum2+Close[i]-Close[n];
   }
     
   Buf0[i]=(m1+m2)/sr;
   Buf1[i]=(t1[i]+t2[i])/sr;
   
   i--;
   }
return(0);
  }
//+------------------------------------------------------------------+

なぜBuf1とBuf0では値が違うのでしょうか?

ある値には変数を使い、別の値にはバッファ(データ配列)>(さらなる計算のために配列が必要です)を使うことができるのはなぜですか? 変数m1とm2だけでなく、配列を使うにはどうしたらいいですか?

ファイル:
test01.mq4  2 kb