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

 

助けてください - 以下のようなコードの一部があります。


   if(Bars<=RSIPeriod) return(0);
   if(TF!=0)
   {
      string name = WindowExpertName();
      for(i=0; i<Bars-counted_bars+1; i++)
      {
         int barIndex = iBarShift(NULL,TF,Time[i],false);
         RSIBuffer[i]=       iCustom(Symbol(),TF,name,Variant,RSIPeriod,Levl_Up,Levl_Down,0,0,barIndex);        
         PosBuffer[i]=       iCustom(Symbol(),TF,name,Variant,RSIPeriod,Levl_Up,Levl_Down,0,1,barIndex);
         NegBuffer[i]=       iCustom(Symbol(),TF,name,Variant,RSIPeriod,Levl_Up,Levl_Down,0,2,barIndex);
         RSI_Up_Buffer[i]=   iCustom(Symbol(),TF,name,Variant,RSIPeriod,Levl_Up,Levl_Down,0,3,barIndex);
         RSI_Down_Buffer[i]= iCustom(Symbol(),TF,name,Variant,RSIPeriod,Levl_Up,Levl_Down,0,4,barIndex);
         
         Worms_Up[i]=        iCustom(Symbol(),TF,name,Variant,RSIPeriod,Levl_Up,Levl_Down,0,5,barIndex);        
         Worms_Down[i]=      iCustom(Symbol(),TF,name,Variant,RSIPeriod,Levl_Up,Levl_Down,0,6,barIndex);
         Delta[i]=           iCustom(Symbol(),TF,name,Variant,RSIPeriod,Levl_Up,Levl_Down,0,7,barIndex);
         Calc[i]=            iCustom(Symbol(),TF,name,Variant,RSIPeriod,Levl_Up,Levl_Down,0,8,barIndex);         
      }
      return(0);
   }


正常に動作していたのですが、ここでエラーが発生し、再現できません。

2017.07.25 21:09:57.266 Worms_UpDn_RSI_OSC_Calc AUDCAD,M15: 'Worms_UpDn_RSI_OSC_Calc.mq4' (104,47) の配列が範囲外である。

エラーの原因と対処法を教えてください。
 
Aleksey Vyazmikin:

助けてください - 以下のようなコードの一部があります。



正常に動作していたのですが、ここでエラーが発生し、再現できません。

2017.07.25 21:09:57.266 Worms_UpDn_RSI_OSC_Calc AUDCAD,M15: 'Worms_UpDn_RSI_OSC_Calc.mq4' (104,47) の配列が範囲外である。

エラーの原因と対処法を教えてください。

BarsをBars(Symbol(), TF)に置き換えてみてください。

別のタイムフレームからデータを取得していますが、バーの 数は現在のものから取得されています。

 
Vitaly Muzichenko:

BarsをBars(Symbol(), TF)に置き換えてみてください。

別の時間枠からデータを取得し、現在の時間枠からバーの本数を 取りますが、取得するデータが少なくなる場合があり、そのためエラーが発生します


ありがとうございました。きっと役に立つと思います!

 
Andrey Sokolov:

注意、正解。

サポートチーム2017.07.20 13:37
メタエディタの最新ビルドでコンパイルされていない製品は、チャートにアタッチされない場合があります。

前回のアップデート後、テスターで非ビジュアルモードで私のEAが動かなくなりました。やり直したこともありました。

 
Andrey Sokolov:

ごあいさつ

スプレッドのある履歴でのテストは可能ですか?


テスターに設定されています。それとも、本物のフローティングスプレッドが 必要なのか?

 
Alexey Volchanskiy:

だから、テスターに設定されているのです。それとも、本物のフローティングスプレッドが 欲しいですか?

リアル
 
Andrey Sokolov:
リアル
テスターのリアル(ヒストリカル)は、MT5でのみ利用可能です
 

こんにちは!私は、フラクタルに保留中の注文を 置くためのEAを作成しています。ただし、買い注文のみ。どのように修正すればよいのでしょうか?EAとインジケータを添付します。

ファイル:
Fractal_1.mq4  13 kb
RFractals.ex4  10 kb
 
scomoroh:

こんにちは!私はフラクタルに保留中の注文を 置くためのEAを作成しています。しかし、買い注文しか開けない。どのように修正するのか?

全てはここに ある。

 

こんにちは。

2つの間違いの訂正をお願いします。

1.1つの注文は1つのバーで開くべき(現在はランダムに開く)

2.設定した数量で1つの注文を正しく開くには(現在は異なる数量で開いている)

このEAで1本のバーで保証金の10%の取引が開けるはず(そう期待していた)なのですが、そうはいきません。

このように、長い間取り組んできたので、結果が出るのは嬉しいことです。

//+------------------------------------------------------------------+
//|                                                      1237654.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             [url]https://www.mql5.com[/url] |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
extern int tf_bar = 0; //таймфрейм на котором будет браться значение бара
extern int magic = 123;
extern double stop = 0;
extern double StopLoss = 0;
extern double TakeProfit =0;
extern double Prots= 0.10;

int ticket,Symbol;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int mper[10]={0,1,5,15,30,60,240,1440,10080,43200};//массив таймфрейма
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void OnTick()
  {
      double Min_Lot=MarketInfo(Symbol(),MODE_MINLOT);// Мин. стоим. лотов
      double Step   =MarketInfo(Symbol(),MODE_LOTSTEP);//Шаг изменен лотов
      double Free   =AccountBalance();       // Свободн средства
      double One_Lot=MarketInfo(Symbol(),MODE_MARGINREQUIRED);//Стоим.лота
  
   double Lot=MathFloor(Free*Prots/One_Lot/Step)*Step;// Лоты
        
        
        
  
  if ( Close[0]>Close[1])
//if (! NumberOfBarOpenLastPos(NULL,mper[tf_bar],OP_BUY, magic) ==0) 



{//запрет неск. сделок на 1 баре
     stop = Ask - StopLoss * Point;
     ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,0,0,0,"Buy",magic,0,Lime);
     
     }//закрываем скобку NumberOfBarOpenLastPos
     
 if ( Close[0]<Close[1])   
     
//if (!NumberOfBarOpenLastPos(NULL,mper[tf_bar],OP_SELL, magic)  ==0) 
{//запрет неск. сделок на 1 баре
     ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,0,0,0,"Sell",magic,0,Red);
     
     }//закрываем скобку NumberOfBarOpenLastPos
     return;
   
  }
//+------------------------------------------------------------------+


//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  [url=http://www.kimiv.ru]Автоматизация торговли на финансовых рынках - Главная[/url]                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара открытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
 




int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t=0;
  
  int      i, k=OrdersTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++)                                    {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))      {
      if (OrderSymbol()==sy)                             {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op)                   {
            if (mn<0 || OrderMagicNumber()==mn)          {
              if (t<OrderOpenTime()) t=OrderOpenTime();
              }}}}}}
  return(iBarShift(sy, tf, t, True));}