Uma pequena ajuda? - página 2

[Excluído]  
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 ??
[Excluído]  
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.......?????

[Excluído]  

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);
   }
}
//-------------------------------------------------------------------+
[Excluído]  

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

[Excluído]  
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.