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

 
Artyom Trishkin #:

みんな、どう考えても、最後にチェックしたときのループインデックスの値を覚えていなければ、利用可能なすべての履歴をループしていることになる。そして、その数が多ければ多いほど、ループが長くなる。

よくわからない

私は、収益性をチェックする同様の設計のEAを他に2つ持っていますが、どちらも15~20分以内にテスターで全履歴をパスしています。

 
законопослушный гражданин #:

よくわからないのです。

同じデザインのロットチェックのEAを他に2つ持っていますが、どちらもテスターで15~20分で全編パスします

まあ、あなた次第なんですけどね。反論するつもりはない。

 
MakarFX #:

順序を変更する オーバーライド

同様に

 
законопослушный гражданин #:

ええ、どんなペアでも。

AUD/USDはM15を使用しています。

御社のインジケータ(添付)でも同じ問題が発生しました。

このことが処理を遅くしていることが消去法でわかりました。

結果をキャッシュする(変数で)。また、注文のリストが変更された場合は、キャッシュを更新する必要があります。そして、何も変化がなければ、キャッシュの値を返すだけでよい。

 
Artyom Trishkin #:

みんな、どう考えても、最後にチェックしたときのループインデックスの値を覚えていなければ、利用可能なすべての履歴をループしていることになる。そして、数が多ければ多いほど、ループに時間がかかる。

常に停電などがあることを想定しておく必要があります。

履歴にあるEAがいつでも設定され、実行できること。

 
Volodymyr Zubov #:

常に停電などのことを考えなければならない...。

話に出てきたアドバイザーは、いつでも設定し、働けるようにしておく必要があります。

VPSがあるので、明かりをつけることができます。

 
はい、順序を見つけるためにローカル 変数は必要ありません
 

なぜ問題があるのか、おおよそ理解できました。

さて、次のようにしたいと思います。

クリーンアップ void OnTick

void OnTick()
{
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
   if(CountOrders()==0)
   {
  
// Если появился сигнал на покупку, то откроем ордер на покупку
      if(bSignalBuy() == true)
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
   }
}

という信号で、このようになります。

bool bSignalBuy()
  {
   if (openPrice > Open[1] && openPrice < Close[1]) //Open[1] и Close[1]- цены открытия и закрытия каждого бара текущего графика.
   
  return(true);
   
  return(false);
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                             Функция поиска сигнала на продажу |
//+-----------------------------------------------------------------------------------------------+
bool bSignalSell()
  {
   if(openPrice< Open[1] && openPrice > Close[1])

   return(true);

   return(false);
  }

ここでopenPriceがこのように表現しようと すると、エラーが出ます。

型変換によるデータ消失の可能

void関数を正しく使用していますか?

  void openPrice()
  {
  int OP=0;
  
  if (GetLotSize()>LotControl) OP = dMA + Deviation * _Point;
  else OP = dMA;
  }
 

drawとdeleteでボタンを押した後、マウスカーソルに線が追従するようにしました。

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
  {    
    if(ObjectGetInteger(0,"button_bs",OBJPROP_STATE)){
      int      x     =(int)lparam;
      int      y     =(int)dparam;
      datetime dt    =0;
      double   price =0;
      int      window=0;
     
      if(id == CHARTEVENT_MOUSE_MOVE){
        if(ChartXYToTimePrice(0,x,y,window,dt,price)){
            ObjectDelete(0,"H Line");
            ObjectCreate(0,"H Line",OBJ_HLINE,window,dt,price);
            ChartRedraw(0);
        }
      }
    }
    else{
      ObjectDelete(0,"H Line");
    }
  }

もしかして、別の方法があるのでは?CPUクーラーがうるさくなってきた :)

 
Volodymyr Zubov #:

常に停電などのことを考えなければならない...。

歴史に残るアドバイザーが、いつでも設定され、働いているはずです。

そのはずです。では、ループインデックスを記憶することで、再起動後に履歴が残ることをどのように防ぐのでしょうか。