Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1268

 
Rapazes, esta é uma pergunta para a qual não encontrei resposta em nenhum lugar. Que função escrever no indicador para que novas barras não se abram e façam tic-tac na barra zero, até que funcione minha condição, por favor me respondam em particular))
 

Olá!

Estou confuso em três pinheiros:

Eu defino números externos int a =2; extern int b =3; extern int c =4; como agora eu defino o número abcpara mudar seu valor ao mudar a, ou b, ou c para compará-lo com algum dado d (por exemplo,d=344)?

Obrigado!

 
novichok2018:

Olá!

Estou confuso em três pinheiros:

Eu defino números externos int a =2; extern int b =3; extern int c =4; como agora eu defino o número abcpara mudar seu valor ao mudar a, ou b, ou c para compará-lo com algum dado d (por exemplo,d=344)?

Obrigado!

x = c + b*10 + a*100

 
Сергей Таболин:

x = c + b*10 + a*100

Oh, meu Deus! Estou me arrasando! Obrigado!

 
Alô, 2020.10.03_13:33 GMT+3. Tomei o padrão Moving Average EA para o MetaTrader 4. E começou a mudá-lo para que se tornasse rentável. Ao tentar descrever as condições de fechamento usando a função OrderProfit() no testador de estratégia, o Expert Advisor parou de fechar negócios nessa condição. Não vai tão longe quanto fechar um negócio. No entanto, duvido que tenha escrito corretamente as condições de fechamento. O Consultor Especialista fecharia as negociações de outra forma. Provavelmente vou tentar escrever o preço de abertura do negócio e os últimos preços. Uma vez alcançada a diferença máxima entre o preço de abertura e o último preço e esta diferença é reduzida - feche o comércio. Estou anexando o arquivo do Expert Advisor. 13:50 GMT+3.
Arquivos anexados:
 
Николай Никитюк:
Alô, 2020.10.03_13:33 GMT+3. Eu tomei o padrão Moving Average Expert Advisor para MetaTrader 4. E começou a mudá-lo para que se tornasse rentável. Ao tentar descrever as condições de fechamento usando a função OrderProfit() no testador de estratégia, o Expert Advisor parou de fechar negócios nessa condição. Não vai tão longe quanto fechar um negócio. No entanto, duvido que tenha escrito corretamente as condições de fechamento. O Consultor Especialista fecharia as negociações de outra forma. Provavelmente vou tentar escrever o preço de abertura do negócio e os últimos preços. Uma vez alcançada a diferença máxima entre o preço de abertura e o último preço e esta diferença é reduzida - feche o comércio. Estou anexando o arquivo do Expert Advisor. 13:50 GMT+3.
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
   //--- check order type
      // 
      if(OrderType()==OP_BUY)
        {
        /*
         if(OrderProfit()>0.0)  
           {ProfitMax=OrderProfit(); break;} // Здесь у вас прерывается цикл, если сделка в плюсе
         if(OrderProfit()>ProfitMax)
           {ProfitMax=OrderProfit(); break;}
         if((ProfitMax-DiffProfit)<0.0) break;    
         if((ProfitMax-DiffProfit)>OrderProfit())
         */
         if(DiffProfit<OrderProfit())     // Исходя из ваших условий, то вот            
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }  
         else break;     
         break;
        }
      if(OrderType()==OP_SELL)
        {
        /*
         if(OrderProfit()>0.0)  
           {ProfitMax=OrderProfit(); break;} // Здесь у вас прерывается цикл, если сделка в плюсе
         if(OrderProfit()>ProfitMax)
           {ProfitMax=OrderProfit(); break;}
         if((ProfitMax-DiffProfit)<0.0) break;     
         if((ProfitMax-DiffProfit)>OrderProfit())
         */
         if(DiffProfit<OrderProfit())        // Исходя из ваших условий, то вот
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         else break;  
         break;
        }
     }      

//+------------------------------------------------------------------+
 

Olá!

Comecei a escrever uma função para normalizar os dados de entrada. Mas eu não posso "substituir" os valores originais pelos normalizados. Isto é, não posso atualizar valores no buffer Open timeseries com novos valores da matriz Temp. Qual é o meu erro? Tenho a sensação de que estou tentando cruzar o OOP e o não OOP)).

Open=new CiOpen();
   if(CheckPointer(Open)==POINTER_INVALID || !Open.Create(Symb.Name(),PERIOD_CURRENT))
      return;
//---
   int bars=10;
   double Temp[];                //Создаем массив для временного хранения входных данных
   ArraySetAsSeries(Temp,true);  //Устанавливает флаг AS_SERIES
   Open.GetData(0,bars,Temp);    //Копируем необходимые данные в массив Temp
   InputNormalize(Temp,bars);    //Нормализуем данные в массиве
 
//---Как заменить значения в Open значениями из Temp?---

  }
//+------------------------------------------------------------------+
//| функция нормализации входных данных                              |
//+------------------------------------------------------------------+
void InputNormalize(double &buffer[],int bars)
  {
   double d1=-1;
   double d2=1;
   double x_min=buffer[ArrayMinimum(buffer,0,bars)];
   double x_max=buffer[ArrayMaximum(buffer,0,bars)];
   for(int i=0; i<bars; i++)
     {
      buffer[i]=(((buffer[i]-x_min)*(d2-d1))/(x_max-x_min))+d1;
     }
   return;
  }

Tenho certeza de que isso pode ser feito de uma maneira mais simples! Neste caso, por favor, me ensine)

 
Aleksei Lesnikov:

Olá!

Comecei a escrever uma função para normalizar os dados de entrada. Mas eu não posso "substituir" os valores originais pelos normalizados. Isto é, não posso atualizar valores no buffer Open timeseries com novos valores da matriz Temp. Qual é o meu erro? Tenho a sensação de que estou tentando cruzar o OOP e o não OOP)).

Tenho certeza de que isso pode ser feito de uma maneira mais simples! Neste caso, por favor, me ensine)

Leia a documentação lingüística

O valor das variáveis predefinidas é definido pelo terminal do cliente antes de iniciar um programa de mql4 para execução. As variáveis pré-definidas são constantes e não podem ser alteradas a partir do programa mql4.


Предопределенные переменные - Справочник MQL4
Предопределенные переменные - Справочник MQL4
  • docs.mql4.com
Для каждой выполняющейся mql4-программы поддерживается ряд предопределенных переменных, которые отражают состояние текущего ценового графика на момент запуска программы - эксперта, скрипта или пользовательского индикатора. Значение предопределенным переменным устанавливает клиентский терминал перед запуском mql4-программы на выполнение...
 
Alexey Viktorov:

Leia a documentação lingüística

Alexey, obrigado! Agora está claro que não é possível.

É verdade, eu não sou exatamente mql4. Estou tentando mudar os dados através da classe CiOpen. Estou confuso com o método Update, que deveria mudar o elemento em uma posição especificada da matriz.

Документация по MQL5: Стандартная библиотека / Индикаторы / Таймсерии / CiOpen
Документация по MQL5: Стандартная библиотека / Индикаторы / Таймсерии / CiOpen
  • www.mql5.com
CiOpen - Таймсерии - Индикаторы - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Aleksei Lesnikov:

Alexei, obrigado! Está claro agora que isso não é possível.

É verdade, eu não tenho exatamente mql4. Estou tentando mudar os dados através da classe CiOpen. Estou confuso com o método Update, que deveria mudar o elemento em uma posição especificada da matriz.

Como a pergunta é feita na seção mql4, eu respondi a respeito do mql4. Não há pistas para mql5 em sua pergunta. Mas o resultado é o mesmo.

Razão: