Uma pequena ajuda? - página 2

 
WHRoeder:
  1. É claro que não. RTFM. Você só recebe um novo tique quando volta do início.
  2. RTFM & Tester limitações você NÃO pode dormir no testador
  3. O que são valores de retorno da função ? Como eu os utilizo ? - Fórum MQL4


Obrigado por sua ajuda, eu removi o loop while e quebrei para a função iniciar em cada execução de pedido, removi a função IsTesting (por enquanto) e meu OrderSend parece estar funcionando.


Executando-o agora não importa onde eu tenha uma função Print() nada está aparecendo no diário (ou no livro de registro) o pedido inicial abre bem e depois nada - mesmo que eu tenha meu pedido de impressão como a próxima linha no código?

 
j.w.msb:

Obrigado por sua ajuda, eu removi o loop while e quebrei para a função iniciar em cada execução de pedido, removi a função IsTesting (por enquanto) e meu OrderSend parece estar funcionando.


Executando-o agora não importa onde eu tenha uma função Print() nada está aparecendo no diário (ou no livro de registro) o pedido inicial abre bem e depois nada - mesmo que eu tenha meu pedido de impressão como a próxima linha no código?


como fica seu código agora ??
 
Desculpe por ser um pesadelo nisso! Tentei encontrar informações sobre erros no testador de estratégias, mas os googles não me ajudaram :s
//+------------------------------------------------------------------+
//|                                                   SMA scripy.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern int z=1234;
int total;
//---
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int init()
  {
//---- 
   int i;
   total=0;
   if (OrdersTotal()!=0)
      {
      for (i=OrdersTotal()-1; i>=0; i--)                                                     
         {
         if (OrderSelect(i,SELECT_BY_POS))
            {
            if ((OrderSymbol()==Symbol())&&(OrderMagicNumber()==z))
               {
               if ((OrderType()==OP_BUY)&&(iMA(Symbol(),0,6,0,MODE_SMA,PRICE_CLOSE,0)<iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0)))
                  { 
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);                  
               }
               if ((OrderType()==OP_SELL)&&(iMA(Symbol(),0,6,0,MODE_SMA,PRICE_CLOSE,0)>iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0)))
                  {
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);                  
               }
               else 
                  {
                  total++;                                                                 
               }
            }
         }
      }
   }
//----
   return;
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int start()
   {
//----
   int i,L;
   if (AccountBalance()>50)                                                                                     
   {
//-----
double SMA6=iMA(Symbol(),0,6,0,MODE_SMA,PRICE_CLOSE,0);
double SMA21=iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0);
double RSI70=iRSI(Symbol(),PERIOD_D1,14,PRICE_CLOSE,0)<70;
double RSI30=iRSI(Symbol(),PERIOD_D1,14,PRICE_CLOSE,0)>30;                                                                                                            
//----
   if (total==0)
      {
      if ((RSI70)&&(SMA6>SMA21))
         {                                                                                                                       
         OrderSend(Symbol(),OP_BUY,0.1,Ask,0,0,0,"",z,0,Red); 
         Print("WE ARE HERE");
         total+=1;                                                       
      }
      if ((RSI30)&&(SMA6<SMA21))
         {
         OrderSend(Symbol(),OP_SELL,0.1,Bid,0,0,0,"",z,0,Blue);
         total+=1;
      }  
   }
//---
   if (total!=0)
      {
      L=0;
      for (i=OrdersTotal()-1; i>=0; i--)                                                    
         {
         if (OrderSelect(i,SELECT_BY_POS))
            {
            if ((OrderSymbol()==Symbol())&&(OrderMagicNumber()==z))
               {
               if ((OrderType()==OP_BUY)&&(SMA6<SMA21))
                  { 
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);
                     total+=-1;
                     break;
               }
               if ((OrderType()==OP_SELL)&&(SMA6>SMA21))
                  {
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);                 
                     total+=-1;
                     break;
               }
               else 
                  {
                  L++;                                                                  
               }
            }
            total=L;
         }
      }
   }
//----
}
//----
return;
}
//-------------------------------------------
 

duplo, int, string, bool, datetime, cor, ........ o que tenho que usar ???....

//-----
double SMA6=iMA(Symbol(),0,6,0,MODE_SMA,PRICE_CLOSE,0);
Print("SMA6=  ",SMA6);
double SMA21=iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0);
Print("SMA21=  ",SMA21);
double RSI70=iRSI(Symbol(),PERIOD_D1,14,PRICE_CLOSE,0)<70;
Print("RSI70=  ",RSI70);
double RSI30=iRSI(Symbol(),PERIOD_D1,14,PRICE_CLOSE,0)>30;
Print("RSI30=  ",RSI30);                                                                                                            
//----

Eles são duplos ????

         OrderSend(Symbol(),OP_BUY,0.1,Ask,0,0,0,"",z,0,Red); 
         Print("WE ARE HERE");

VER O que são valores de retorno de funções ? Como eu os utilizo ? - Fórum MQL4

grande explicação

Quando uma função retorna uma int, como OrderSend(), podemos usar um código como este para verificar se a função funcionou e reportar um erro aos logs caso não tenha funcionado...

int TicketNumber;

TicketNumber = OrderSend( . . . . . . . . );

**(*******************)
   {
   Print(******************);
   }
else
   {
   Print(************************);
   }

. Veja o link que você deu pela WHRoeder e você encontra o que eu tenho escondido aqui com estrelas ......

utilize-o também verificando o fechamento dos negócios

Faça algo assim dentro de seu código.... dessa forma quando o pedido falhar você sabe de que tipo e de onde o erro está vindo

.

o que acontece se o fechamento do pedido falhar.......?????

 

Tanto o RSI quanto o MA são duplos, então as variáveis precisam ser também não?

https://docs.mql4.com/indicators/iRSI && https://docs.mql4.com/indicators/iMA

Eu codifiquei nos erros de impressão, mas nada está sendo impresso para a revista, então eu não posso trabalhar sobre quais erros estão ocorrendo? Ainda estou perdendo algo óbvio? Agora estou de volta para abrir uma venda e depois não poder fechar...

//+------------------------------------------------------------------+
//|                                                   SMA scripy.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern int z=1234;
int total;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int init()
  {
//---- 
   int i;
   total=0;
   if (OrdersTotal()!=0)
      {
      for (i=OrdersTotal()-1; i>=0; i--)                                                     
         {
         if (OrderSelect(i,SELECT_BY_POS))
            {
            if ((OrderSymbol()==Symbol())&&(OrderMagicNumber()==z))
               {
               if ((OrderType()==OP_BUY)&&(iMA(Symbol(),0,6,-3,MODE_SMA,PRICE_CLOSE,0)<iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0)))
                  { 
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);                  
               }
               if ((OrderType()==OP_SELL)&&(iMA(Symbol(),0,6,-3,MODE_SMA,PRICE_CLOSE,0)>iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0)))
                  {
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);                  
               }
               else 
                  {
                  total++;                                                                 
               }
            }
         }
      }
   }
//----
   return;
}
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int start()
   {
//----
   int ticket,i,L;
   bool x;
   if (AccountBalance()>50)                                                                                     
   {
//-----
double SMA6=iMA(Symbol(),0,6,-3,MODE_SMA,PRICE_CLOSE,0);
Print("SMA6 is ",SMA6);
double SMA21=iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0);
Print("SMA21 is ",SMA21);
double RSI70=iRSI(Symbol(),PERIOD_D1,14,PRICE_CLOSE,0)<70;
Print("RSI70 is ",RSI70);
double RSI30=iRSI(Symbol(),PERIOD_D1,14,PRICE_CLOSE,0)>30; 
Print("RSI30 is ",RSI30);                                                                                                           
//----
   if (total==0)
      {
      if ((RSI70)&&(SMA6>SMA21))
         {                                                                                                                       
         ticket=OrderSend(Symbol(),OP_BUY,v(AccountBalance()),Ask,0,0,0,"",z,0,Red); 
         total+=1;                                                       
         if (ticket<0)
            {
            Print("OrderSend Failed", GetLastError());
         }
      }
      if ((RSI30)&&(SMA6<SMA21))
         {
         ticket=OrderSend(Symbol(),OP_SELL,v(AccountBalance()),Bid,0,0,0,"",z,0,Blue);
         total+=1;
         if (ticket<0)
            {
            Print("OrderSend Failed", GetLastError());
         }
      }  
   }
//---
   if (total!=0)
      {
      L=0;
      for (i=OrdersTotal()-1; i>=0; i--)                                                    
         {
         if (OrderSelect(i,SELECT_BY_POS))
            {
            if ((OrderSymbol()==Symbol())&&(OrderMagicNumber()==z))
               {
               if ((OrderType()==OP_BUY)&&(SMA6<SMA21))
                  { 
                  x=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);
                     if (x==false)
                        {
                        Print("Error is ", GetLastError());
                     }
                     else total+=-1;
                     break;
               }
               if ((OrderType()==OP_SELL)&&(SMA6>SMA21))
                  {
                  x=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);   
                     if (x==false)
                        {
                        Print("Error is ", GetLastError());
                     }
                     else 
                        {
                        total+=-1;
                     }
                     break;
               }
               else 
                  {
                  L++;                                                                  
               }
            }
            total=L;
         }
      }
   }
//----
}
//----
return;
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
//----
   return(0);
}
//-------------------------------------------------------------------+
double v(double k)
{
   double v=((k*0.015)/1000);
   if (v<MarketInfo(Symbol(),MODE_MINLOT))
      {
      v=MarketInfo(Symbol(),MODE_MINLOT);
      return(v);
   }
   else
      {
      return(v);
   }
}
//-------------------------------------------------------------------+
 

duuuuhhhh iRSI é o dobro, mas a comparação resulta 1 - então eu substituí RSI30 e RSI70 por apenas RSI e tive uma comparação e tudo funciona HOORAY! EXCETO quando eu troco o SMA6 para mudar a saída SMA6=0 sempre? por quê?

Obrigado a todos pela ajuda! Espero não incomodar tanto na próxima vez!

 
j.w.msb:

Tanto o RSI quanto o MA são duplos, então as variáveis precisam ser também não?

https://docs.mql4.com/indicators/iRSI && https://docs.mql4.com/indicators/iMA

Eu codifiquei nos erros de impressão, mas nada está sendo impresso para a revista, então eu não posso trabalhar sobre quais erros estão ocorrendo? Ainda estou perdendo algo óbvio? Agora estou de volta para abrir uma venda e depois não poder fechar...

colocar a EA em um gráfico de uma conta de demonstração

não procure apenas em diário terminal ...
procure também em especialistas em terminais .....

o que você vê ali impresso

 
deVries:

colocar a EA em um gráfico de uma conta de demonstração

não procure apenas em diário terminal ...
procure também em especialistas em terminais .....

o que você vê ali impresso


Imprimir e executar agora :) obrigado por sua ajuda - eu estava definindo erroneamente iRSI<70 como um duplo (já que era uma comparação) e estava causando problemas. Ele imprime agora e funciona como esperado, exceto, se eu mudar o SMA mudar suas impressões SMA=0?
 
j.w.msb:

Imprimir e executar agora :) obrigado por sua ajuda - eu estava definindo erroneamente iRSI<70 como um duplo (já que era uma comparação) e estava causando problemas. Ele imprime agora e funciona como esperado, exceto, se eu mudar o SMA mudar suas impressões SMA=0?

Coloque um SMA com as mesmas configurações no gráfico de sua EA e veja o que você fez ...
 
   if (total==0)
      {
      if ((RSI70)&&(SMA6>SMA21))
         {                                                                                                                       
         ticket=OrderSend(Symbol(),OP_BUY,v(AccountBalance()),Ask,0,0,0,"",z,0,Red); 
         total+=1;                                                       
         if (ticket<0)
            {
            Print("OrderSend Failed", GetLastError());
         }
      }

Por que você totaliza += 1;

neste momento eu não sei se as encomendas são bem sucedidas

e se falhar, não vejo que tipo de ordem tentou abrir, pode ser também uma venda que você tentou abrir.

Razão: