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

 

Boa tarde, senhores!)

Tentando preparar dados para o treinamento de uma rede neural. A tarefa é.

Ter uma matriz, onde por exemplo cada linha (momento de tempo - barra) é um vetor de entrada, e colunas por exemplo 10000. O que fazer se houver dados dinâmicos (número de linhas1, linhas2), e mudança no número em diferentes pontos no tempo.

Por exemplo, uma matriz é carregada em uma rede, cada fila é um vetor de aprendizagem, mas para cada fila, há n número n de filas mudando dinamicamente no tempo.

Uma possível conjectura de solução é adicionar colunas adicionais à matriz igual ao número de colunas na fila dinâmica, acontece que cada vetor terá colunas da denâmica, mas como se fosse de uma fila, apenas prosumed.

por exemplo

1º vetor

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ... "linha1 dinâmica" 1 1 1 1 1 1

ssssssssssssssssssssssssssssssss "linha2 dinâmica" 1 1 1 1

solução

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ... "linha1 dinâmica" 2 2 2 2 2 2

 
Top2n:

Boa tarde, senhores!)

Tentando preparar dados para o treinamento de uma rede neural. A tarefa é.

Ter uma matriz, onde por exemplo cada linha (momento de tempo - barra) é um vetor de entrada, e colunas por exemplo 10000. O que fazer se houver dados dinâmicos (número de linhas1, linhas2), e mudança no número em diferentes pontos no tempo.

Por exemplo, uma matriz é carregada em uma rede, cada fila é um vetor de aprendizagem, mas para cada fila, há n número n de filas mudando dinamicamente no tempo.

Uma possível conjectura de solução é adicionar colunas adicionais à matriz igual ao número de colunas na fila dinâmica, acontece que cada vetor terá colunas da denâmica, mas como se fosse de uma fila, apenas prosumed.

por exemplo

1º vetor

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ... "linha1 dinâmica" 1 1 1 1 1 1

ssssssssssssssssssssssssssssssss "linha2 dinâmica" 1 1 1 1 1

solução

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ... "linha1 dinâmica" 2 2 2 2 2 2

E como se aprende uma língua que dinamicamente (uma vez por hora, digamos) muda seu vocabulário? É assim que uma rede neural o faz.
 
Portanto, há a MQL5, como eu a entendo. Ou é idêntico?
 
Andrey Sokolov:
Portanto, há a MQL5, como eu a entendo. Ou é idêntico?
Exatamente o mesmo.
 
Boa tarde. Eu criei um EA, ele funciona bem, mas se eu desligar o terminal com o EA funcionando e voltar a ligar o terminal, o EA começa a contar tudo de novo. Portanto, tenho uma pergunta a fazer. O que eu preciso escrever no meu EA, para que ele reinicialize os parâmetros de entrada na inicialização?
 
XFaost:
Boa tarde. Eu criei um EA, ele funciona bem, mas se eu desligar o terminal com o EA funcionando e voltar a ligar o terminal, o EA começa a contar tudo de novo. Portanto, tenho uma pergunta a fazer. O que eu preciso prescrever no EA, para que ele reinicialize os parâmetros de entrada quando começar?
Quero que meu consultor especializado não reinicialize os parâmetros de entrada, mas colete informações sobre as ordens que foram abertas antes de serem fechadas.
 
XFaost:
Boa tarde. Eu criei um EA, ele funciona bem, mas se eu desligar o terminal com o EA funcionando e voltar a ligar o terminal, o EA começa a contar tudo de novo. Portanto, tenho uma pergunta a fazer. O que eu preciso escrever no meu EA, para que ele reinicialize os parâmetros de Entrada quando eu o iniciar?
Por favor, descreva a forma como a EA funciona. Talvez você precise usar um princípio diferente. E se você ainda precisar reinicializar, então deve primeiro definir o que se entende por "no início". E em geral, um reset é uma transição para a posição inicial. Anote os ajustes iniciais e os defina no momento certo.
 

Saudações. Você pode me dizer o que está errado?

A EA faz pedidos com paradas acima e abaixo do preço. Se um deles aciona, a parada é ajustada se o preço se afastar da parada mais do que o estabelecido, se o preço se mover para a parada então nenhuma mudança.

No início eu escrevi apenas Buy order e funcionou como esperado. Se eu adicionar uma imagem de espelho para venda, as paradas serão corrigidas pelo valor estabelecido, seja qual for o movimento do preço.

Em geral, se separadamente, ou para comprar ou vender - tudo funciona como deveria, mas as duas partes juntas - há um bug.

#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double Lot             = 0.01;
extern int    StopLoss        = 50;
extern int    Slippage        = 5;
extern int    Delta           = 60;
extern int    Delta2          = 170;
extern int    Magic           = 321;

int ticket;
double price, sl, sl2;
datetime counted_bar = 0;

int OnInit()
  {
    if (Digits == 3 || Digits == 5)
   {

       StopLoss      *= 10;
       Delta         *= 10;
       Delta2        *= 10;
      
   }

  
   return(INIT_SUCCEEDED);
  }


void OnTick() {
//////        ПРОДАЖА  ///////////////////////////////////////////////////////
if (SellLimitCount()==0 && SellCount()==0)
{    
  price = NormalizeDouble(Bid - Delta*Point, Digits);
  sl = NormalizeDouble(price + StopLoss*Point, Digits);
  ticket = OrderSend (Symbol(), OP_SELLSTOP, Lot, price, Slippage, sl, 0, "", Magic, 0, Red);
}

if (SellCount()!=0)
  {
   if (Bid < (OrderStopLoss() - NormalizeDouble (StopLoss*Point, Digits)))
     {
     sl = NormalizeDouble (Bid + StopLoss*Point, Digits);
     if (OrderModify(ticket, price, sl, 0, 0, Red)) Print ("Sell_Order_Modify_Ok");
     else Print ("ERROR_Sell_Order_Modify");
     }  
  }
if (SellLimitCount()!=0)
{
  if(Bid > (OrderOpenPrice() + NormalizeDouble (Delta2*Point, Digits)))
   {    
    if (OrderDelete(ticket, Red)) Print ("BuyLimit_Order_Delete_Ok");
    else Print ("ERROR_BuyLimit_Odrer_Delete");
   }  
}
/////////////////////////////////////////////////////////////////////////////////
///////       ПОКУПКА ////////////////////////////////////////////////////////
if (BuyLimitCount()==0 && BuyCount()==0)
{
  price = NormalizeDouble(Ask + Delta*Point, Digits);
  sl = NormalizeDouble(price - StopLoss*Point, Digits);
  ticket = OrderSend (Symbol(), OP_BUYSTOP, Lot, price, Slippage, sl, 0, "", Magic, 0, Blue);
}

if (BuyCount()!=0)
  {
    if (Ask > (OrderStopLoss() + NormalizeDouble (StopLoss*Point, Digits)))
     {
     sl = NormalizeDouble (Ask - StopLoss*Point, Digits);
     if (OrderModify(ticket, price, sl, 0, 0, Blue)) Print ("Buy_Order_Modify_Ok");
     else Print ("ERROR_Buy_Order_Modify");
     }  
  }
if (BuyLimitCount()!=0)
{
  if(Ask < (OrderOpenPrice() - NormalizeDouble (Delta2*Point, Digits)))
   {
    if (OrderDelete(ticket, Blue)) Print ("BuyLimit_Order_Delete_Ok");
    else Print ("ERROR_BuyLimit_Orde_Delete");
   }  
}
///////////////////////////////////////////////////////////////////////////////

}
//+------------------------------------------------------------------+
int BuyLimitCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_BUYSTOP)
count++;}}}return(count);}

int BuyCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_BUY)
count++;}}}return(count);}

int SellLimitCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_SELLSTOP)
count++;}}}return(count);}

int SellCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_SELL)
count++;}}}return(count);}
 
Andrey Sokolov:

Saudações. Você pode me dizer o que está errado?

A EA faz pedidos com paradas acima e abaixo do preço. Se um deles aciona, a parada é ajustada se o preço se afastar da parada mais do que o estabelecido, se o preço se mover para a parada então nenhuma mudança.

No início eu escrevi apenas Buy order e funcionou como esperado. Se eu adicionar uma imagem de espelho para venda, as paradas serão corrigidas pelo valor estabelecido, seja qual for o movimento do preço.

Geralmente, se separadamente, ou para comprar ou vender, tudo está funcionando como deveria, mas as duas partes juntas - há um bug.

...

O código inteiro que você nos mostrou é um bug, não é? Pelo menos, a função OnTick é quase inteiramente um bug...

 
Vitalie Postolache:

Um bug, você quer dizer todo o código mostrado?

Quando há ambas as partes do código, tanto para compra quanto para venda, então, após o acionamento da ordem pendente, sua parada é corrigida em qualquer direção de preço por algum motivo. E quando há apenas uma parte de Compra ou Venda do código, a parada é corrigida como pretendido, apenas quando o preço se afasta dele.
Razão: