Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 1157

 

Per favore aiutatemi - c'è un pezzo di codice come questo


   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);
   }


tutto funziona bene normalmente, ma ha un errore qui - non può riprodurre - l'errore nel codice inizia con le parentesi Time[I]

2017.07.25 21:09:57.266 Worms_UpDn_RSI_OSC_Calc AUDCAD,M15: array fuori portata in 'Worms_UpDn_RSI_OSC_Calc.mq4' (104,47)

Qual è la ragione dell'errore e come risolverlo?
 
Aleksey Vyazmikin:

Per favore aiutatemi - c'è un pezzo di codice come questo



tutto funziona bene normalmente, ma ha un errore qui - non può riprodurre - l'errore nel codice inizia con le parentesi Time[I]

2017.07.25 21:09:57.266 Worms_UpDn_RSI_OSC_Calc AUDCAD,M15: array fuori portata in 'Worms_UpDn_RSI_OSC_Calc.mq4' (104,47)

Quali sono le cause dell'errore e come risolverlo?

Provate a sostituireBars conBars(Symbol(), TF);

Stai ricevendo dati da un altro timeframe, ma il numero di barre è preso da quello corrente.

 
Vitaly Muzichenko:

Provate a sostituireBars conBars(Symbol(), TF);

Si ottengono dati da un altro timeframe e si prende il numero di barre da quello corrente, ma i dati che si ottengono possono essere meno, da qui l'errore


Grazie! Penso che aiuterà!

 
Andrey Sokolov:

Attenzione, risposta corretta:

Squadra di supporto2017.07.20 13:37
I prodotti non compilati nell'ultima build del meta-editor non possono essere collegati al grafico.

Il mio EA ha smesso di funzionare nel tester in modalità non visiva dopo l'ultimo aggiornamento. Ho dovuto rifare alcune cose.

 
Andrey Sokolov:

Saluti.

È possibile fare dei test sulla storia con uno spread?


È impostato nel tester. O avete bisogno di un vero spread galleggiante?

 
Alexey Volchanskiy:

Quindi è impostato nel tester. O volete un vero spread fluttuante?

Real
 
Andrey Sokolov:
Real
Reale nel tester (storico) sarà disponibile solo in MT5
 

Salve, sto scrivendo un EA per piazzare ordini pendenti su frattali. Ma vengono piazzati solo ordini di acquisto. Come posso correggerlo? Allego l'EA e l'indicatore.

File:
Fractal_1.mq4  13 kb
RFractals.ex4  10 kb
 
scomoroh:

Salve, sto scrivendo un EA per piazzare ordini pendenti su frattali. Ma solo gli ordini di acquisto sono aperti. Come correggerlo?

È tuttoqui.

 

Salve.

Potreste aiutarmi a correggere due errori.

1. 1 ordine dovrebbe aprirsi su una barra (ora si apre in modo casuale)

2. Per aprire correttamente 1 ordine con un volume impostato (ora si apre con diversi volumi)

L'idea è che questo EA dovrebbe aprire un affare del 10% del deposito su una barra (avevo sperato così), ma non sta accadendo.

Ho lavorato su questo per molto tempo e sono felice di vedere i risultati.

//+------------------------------------------------------------------+
//|                                                      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));}
Motivazione: