MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 372

 
PokrovMT5:

マキシム、良い一日!バリアントをありがとう、私のはほとんど同じですが、それはまた、動作しますが、Alekseu Fedotovは それを示唆し、私はそれを修正する方法のアイデアがあることを書いた?



再描画を気にしない場合(例えば、今のようにとにかく再計算する場合) -OnCalculate関数から、再計算したい場所(あなたの場合、前の時間のバー)を返します。

return rates_total-iBarShift(_Symbol,_Period,time[0]-TimeMinute(time[0])*60-TimeSeconds(time[0])-1 ); // これについて、「手探りで、確認しない」と書いて、アプローチの実証をしています。

 
MakarFX したのですが、それでは問題が解決しないので
// #property  copyright "Copyright © 2005, Yura Prokofiev"
// #property  link      "Yura.prokofiev@gmail.com"
#property  strict
#property  indicator_separate_window
#property  indicator_buffers 3
 
extern int      Barrs  = 10;     // Баров для расчета
extern string   simvol = "EURGBP";
double Buf_0[], Buf_1[], Buf_2[];

void OnInit()
{
   SetIndexStyle(0,DRAW_NONE);
   SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2,Yellow);
   SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,2,Red);
   IndicatorDigits((int)SymbolInfoInteger(simvol,SYMBOL_DIGITS));

   SetIndexBuffer(0,Buf_0);
   SetIndexBuffer(1,Buf_1);
   SetIndexBuffer(2,Buf_2);

   IndicatorShortName("Fisher "+simvol);
   SetIndexLabel(1,NULL);
   SetIndexLabel(2,NULL);
}

int start()
{
   int    i, limit, counted_bars=IndicatorCounted();
   double prev,current;
   double Value=0, Value1=0, Value2=0, Fish=0, Fish1=0, Fish2=0;
   double price, MinL=0, MaxH=0;

   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;

   for(i=0; i<limit; i++)
   {
      MaxH = iHigh(simvol,   0, iHighest(simvol,  0, MODE_HIGH,Barrs,i));
      MinL = iLow (simvol,   0, iLowest (simvol,  0, MODE_LOW, Barrs,i));
      price = (iHigh(simvol, 0, i) + iLow(simvol, 0, i))/2;
      if(MaxH != MinL)
      Value = 0.33*2*((price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1;     
      Value=MathMin(MathMax(Value,-0.999),0.999); 
      Buf_0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;
      Value1=Value;
      Fish1=Buf_0[i];
   }
   bool up=true;
   for(i=limit-2; i>=0; i--)
   {
      current=Buf_0[i];
      prev=Buf_0[i+1];
      if(((current<0)&&(prev>0))||(current<0))   up= false;    
      if(((current>0)&&(prev<0))||(current>0))   up= true;
      Buf_1[i]=0;  Buf_2[i]=0;
      if(!up) Buf_2[i]=current;
      else    Buf_1[i]=current;
   }
   return 0;
}

下は 古い、上は新しい

使用するチャートのタイムフレームは、インジケータ-ゼロが立っているもの

 
YarTrade:

新しいバーが表示されたときにバッファーをリセットする方法を教えてください。ただし、以前のデータは消去されずにチャートに表示されます。な ぜかバッファをゼロにリセット できず、新しいバーが表示さ れると、古い蓄積データの上に新しいデータが重なって 表示されます。私のコードのどこが間違っているのでしょうか?分かりやすい説明ありがとうございます。

新しいバーが 表示されると、端末は新しいNULL項目をバッファに追加します。3行目で ...6はまさにゼロにする ことです。それ以外はすべて保存
 
STARIJ:
新しいバーが 表示されると、端末は新しいNULL要素をバッファに追加します。3行目で ...... 6は正確にゼロに なります。その他の要素はすべて保持

ヒストグラムのバーは、新しいバーの 出現ですぐに伸び、その後も伸び続けるのに、次のバーが出現すると前のバーが伸びるのはなぜですか?

 
YarTrade:

新しいバーの 出現直後のヒストグラムのバーは、前のバーの伸びを持ち、その後も伸び続け、次のバーの出現時には、前のバーの伸びを持つのはなぜでしょうか。

和があるんですね
V2 = V1 + V2;
 
皆さんこんにちは、自分では解りません、不注意かもしれませんが、ポルターガイストのようなものです。
int ticket_order=0;
void OnTick()
{
  if(OrdersTotal()==0)
   {
    // километр кода
    ticket_order=OrderSend(Symbol(),up_down,lots,Ask,3,0,0);
    }
    if(OrdersTotal()==1)
   {
     OrderSelect(ticket_order,SELECT_BY_TICKET);
     bool Ans=OrderModify(ticket_order,Price,SL,TP,0);
    }
}
     
   
何を責めるべきかわからない、OrderModify()やOrderSelectでチケットを参照送信して、何とか変更した方がいいのでは?
 
ijonhson: エラーメッセージ 誤ったチケット(OrderModify())
似たようなものがありましたね。1つ目と2つ目の条件文をガッツリ並べ替える-というのが有効かもしれません。
 
STARIJ:

下は古い、上は新しい

使用するチャートのタイムフレームは、インジケータ-ゼロが立つもの

HUGEさんありがとうございました。それが私の望みでした。
 
ijonhson:
皆さんこんにちは、自分では解けません。

これにより、エラーの発見が容易になります。

if ( OrderSelect(ticket_order,SELECT_BY_TICKET) )
  if ( OrderModify(ticket_order,Price,SL,TP,0) ) {}
しかし、OrderSelect() の前に、tiket_order=(correct_ticket)とする必要があると思うのです。
 
ijonhson:
すべてこんにちは、私は自分自身を理解することはできません、私は不注意かもしれませんがポルターガイストのいくつかの種類、戦略テスターで このような接続では、エラー不正なチケット(OrderModify())、およびn番目の順序ではなく、最初または第二に、私は非難するのか分からない、多分OrderModify()、またはOrderSelectチケットで参照渡し、何とかそこに変更されますか。
チケットでオーダーを選択し、何キロものコードを経て、それを修正しようとするのです。しかし、その時にはすでに終了している可能性もあります。