Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 1157

 

Por favor, ajude - há uma peça de código como esta


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


tudo funciona bem normalmente, mas tem um erro aqui - não pode reproduzir - o erro no código começa com parênteses de Tempo[I].

2017.07.25 21:09:57.266 Worms_UpDn_RSI_OSC_Calc AUDCAD,M15: array fora do alcance em 'Worms_UpDn_RSI_OSC_Calc.mq4' (104,47)

Qual é a razão do erro e como corrigi-lo?
 
Aleksey Vyazmikin:

Por favor, ajude - há uma peça de código como esta



tudo funciona bem normalmente, mas tem um erro aqui - não pode reproduzir - o erro no código começa com parênteses de Tempo[I].

2017.07.25 21:09:57.266 Worms_UpDn_RSI_OSC_Calc AUDCAD,M15: array fora do alcance em 'Worms_UpDn_RSI_OSC_Calc.mq4' (104,47)

Quais são as causas do erro e como corrigi-lo?

Tente substituir asBarras porBarras(Symbol(), TF);

Você está recebendo dados de outro período de tempo, mas o número de barras é tirado do atual.

 
Vitaly Muzichenko:

Tente substituir asBarras porBarras(Symbol(), TF);

Você obtém dados de outro período de tempo e tira o número de barras do atual, mas os dados que você obtém podem ser menores, daí o erro


Obrigado! Acho que isso vai ajudar!

 
Andrey Sokolov:

Atenção, resposta correta:

Equipe de apoio2017.07.20 13:37
Os produtos não compilados na última construção do meta-editor não podem ser anexados ao gráfico.

Meu EA parou de trabalhar no modo de teste em modo não-visual após a última atualização. Eu tinha que refazer algumas coisas.

 
Andrey Sokolov:

Saudações.

É possível testar na história com um spread?


É colocado no testador. Ou você precisa de um verdadeiro spread flutuante?

 
Alexey Volchanskiy:

Por isso, é colocado no testador. Ou você quer um verdadeiro spread flutuante?

Real
 
Andrey Sokolov:
Real
Real no testador (histórico) só estará disponível para você em MT5
 

Olá! Estou escrevendo um EA para fazer pedidos pendentes sobre fractais. Mas só são feitos pedidos de compra. Como devo corrigi-lo? Estou anexando a EA e o indicador.

Arquivos anexados:
Fractal_1.mq4  13 kb
RFractals.ex4  10 kb
 
scomoroh:

Olá! Estou escrevendo um EA para fazer pedidos pendentes sobre fractais. Mas apenas as ordens de compra são abertas. Como corrigi-lo?

Está tudoaqui.

 

Olá.

Você poderia ajudar a corrigir dois erros.

1. 1 ordem deve abrir em uma barra (agora abre aleatoriamente)

2. Para abrir corretamente 1 ordem com um volume definido (agora está abrindo com volumes diferentes)

A idéia é que esta EA abra um acordo de 10% do depósito em um bar (eu esperava), mas isso não está acontecendo.

Trabalho nisto há muito tempo e estou feliz em ver os resultados.

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