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

 

こんにちは、アドバイスお願いします。

履歴の最初のバーの高値に等しい高値を探し、見つかったバーのインデックスをHigh_iという変数に格納します。

私はこのように行って います

 highr=High[i];
      High_i=0;
      for(j=i+3;j<=i+m;j++)
         {
         if(j>Bars-1) break;
         
         if(!ok1)
            {
            if(MathAbs(High[j]-highr)  <= n*Point)
               {
               
               High_i = j;


ここで、3本のバーの前後の高値が、最初のバーの高値より低くなっているかどうかをチェックします。

これをループに組み込む必要がある。

if(High[High_i]>High[High_i-3]&&High[High_i]>High[High_i-2]&&High[High_i]>High[High_i-1]
   && High[High_i]>High[High_i+3]&&High[High_i]>High[High_i+2]&&High[High_i]>High[High_i+1])

一方ではこのように確認するようにしています。

 for(jl=High_i;jl<=High_i+3;jl++) 
    {
    // if (High_i!=0);
       
      if ( High[High_i]>High[jl])
          {
               cnt1++;
               if(cnt1>=3)
                  {
                  ok1=true;
                 BuyBuffer[i]=highr+5*Point;
                  }
               }
            }

よろしくお願いします。




	          
 
tatianati:
今確認すると、前後の3本のバーの俳諧は、見つかったバーの俳諧より小さいはずです。

こんな感じかもしれませんね。

bool Status_Successful = true;

for(int x=(High_i-3); x<=(High_i+3); x++) {
   if(x==High_i) {
      continue;
   }
   if(High[x]>=High[High_i]) {
      Status_Successful = false;
      break;
   }
}


if(Status_Successful==true) {
   ....
}
 
atztek:
おそらくこんな感じでしょう。



ありがとうございます、うまく いきました。

しかし、バーの数を増やした後は、このように。

for(int x=(High_i-7); x<=(High_i+7); x++)

が発生します。

ta_v1_05.mq4' の配列が範囲外 です (174,11)

174行目、これ です

   if(High[x]>=High[High_i])

どう すれば直るのか、教えてください。

 
そして、x が自然数か 0 であることは確かですか? もし high_i = 例えば 6 なら、x = -1 であり、high[-1] はすでに問題です。おそらく 173 行目に if (x < 0) continue というチェックを追加してください。
 
tatianati

Danik: x が自然数か 0 かは確かですか? もし high_i = 例えば 6 なら、x = -1、そして high[-1] はすでに問題です。おそらく 173 行目で if (x < 0) continue というチェックを追加するのでしょう。
3本のバーでは、このような「チェック」が行われています。
      for(j=i+3;j<=i+m;j++)

他の値については、あちこち変更する必要があります。
まずはこれで問題が解決するのか、それとも他に直すべきところがあるのかを確認してみてはいかがでしょうか。
 
注文をクローズする機能があるのですが、なぜか注文がクローズされないのです。
void CloseOrders(int otype)
    {
      int ClosePrice;
      
      if (otype == OP_BUY) ClosePrice=Bid;
      if (otype == OP_SELL) ClosePrice=Ask;
    
       
      int total = OrdersTotal();
      for(int i = total-1; i >= 0; i--)
      {    
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         { 
           if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
           OrderClose(OrderTicket(),OrderLots(),ClosePrice,Slippage,Yellow);
         }
      }
 
lufer:
注文をクローズする機能があるのですが、なぜか注文がクローズされないのです。

この価格はintではありえない

int ClosePrice;
 
TarasBY:

この価格はintではありえない

おうありがとうございます!!!
 
Help me to find a bug in the code, it seems to draw two lines based on ZeroLag MACD indicator data for EUR 001USD and GBP 001USD, but nothing happens, but it's help me to find a bug in the code.以下はそのコードです。
#property indicator_separate_window
#property indicator_buffers 2
#property  indicator_color1 Red
#property  indicator_color2 DarkBlue
#property  indicator_width1 1
#property  indicator_width2 1
//+------------------------------------------------------------------+

extern string ExtParam1="EURUSD";
extern string ExtParam2="GBPUSD";
extern int FastEMA=12;
extern int SlowEMA=24;
extern int SignalEMA=9;

//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexLabel(0,ExtParam1); 

SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexLabel(1,ExtParam2); 
//----
return(0);
}
//+------------------------------------------------------------------+
int start()
{
int counted_bars = IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars --; 
int limit=Bars-IndicatorCounted();
int bar;
for(bar=0; bar<limit; bar++)
ExtMapBuffer1[bar]=iCustom(ExtParam1,Period(),"ZeroLag MACD",FastEMA,SlowEMA,SignalEMA,iBarShift(ExtParam1,0,Time[bar],false));
ExtMapBuffer2[bar]=iCustom(ExtParam2,Period(),"ZeroLag MACD",FastEMA,SlowEMA,SignalEMA,iBarShift(ExtParam2,0,Time[bar],false));
return(0);
}  
 
ASZmyrov:
ZeroLag MACDはEURUSDとGBPUSDに2本の線を引くべきですが、何も起こらないようです。以下はそのコードです。

噂ではIndicatorCounted()が動作しないとか、インジケータの再計算は過去から現在へのカウントの方が正しいとか、他にもコードに間違いがあるようです。

追伸:ZeroLag MACD自体も新しい仮想マシ ンに合わせて「調整」する必要があります。

ファイル: