Un piccolo aiuto? - pagina 2

 
WHRoeder:
  1. Certo che no. RTFM. Si ottiene un nuovo tick solo quando si ritorna dall'inizio.
  2. RTFM & limitazioni del tester NON si può dormire nel tester
  3. Cosa sono i valori di ritorno della funzione ? Come posso usarli? - MQL4 forum


grazie per il tuo aiuto, ho rimosso il ciclo while e la pausa alla funzione start su ogni esecuzione dell'ordine, ho rimosso la funzione IsTesting (per ora) e il mio OrderSend sembra funzionare.


Eseguendolo ora, non importa dove ho una funzione Print() non appare nulla nel diario (o nel registro) l'ordine iniziale si apre bene e poi niente - anche se ho il mio ordine di stampa come prossima linea nel codice?

 
j.w.msb:

grazie per il vostro aiuto, ho rimosso il ciclo while e la pausa alla funzione start su ogni esecuzione dell'ordine, ho rimosso la funzione IsTesting (per ora) e il mio OrderSend sembra funzionare.


Eseguendolo ora, non importa dove ho una funzione Print(), nulla appare nel giornale (o nel registro), l'ordine iniziale si apre bene e poi niente - anche se ho il mio ordine di stampa come prossima linea nel codice?


come appare ora il tuo codice?
 
Mi dispiace di essere un incubo in questo! Ho provato a trovare informazioni sugli errori nel tester di strategia ma googles non è stato d'aiuto :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;
}
//-------------------------------------------
 

double, int, string, bool, datetime, color, ........ cosa devo usare???....

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

Sono double ???

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

SEEEEEE Cosa sono i valori di ritorno delle funzioni? Come posso usarli? - MQL4 forum

grande spiegazione

Quando una funzione restituisce un int, come OrderSend(), possiamo usare un codice come questo per controllare che la funzione abbia funzionato e riportare un errore nei log se non ha funzionato.

int TicketNumber;

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

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

. Guardate il link che avete dato da WHRoeder e trovate quello che ho nascosto qui con le stelle ......

usatelo anche per controllare la chiusura delle operazioni

Fate qualcosa del genere all'interno del vostro codice.... in questo modo quando ordersend fallisce sapete che tipo e da dove viene l'errore

.

cosa succede se orderclose fallisce.......?????

 

Sia l'RSI che la MA sono doppie, quindi anche le variabili devono esserlo, no?

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

Ho codificato gli errori di stampa, ma non viene stampato nulla sul giornale, quindi non riesco a capire quali errori si stanno verificando? Mi manca ancora qualcosa di ovvio? Ora sono tornato ad aprire una vendita e poi non essere in grado di chiudere...

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

duuuhhhh iRSI è doppio ma il confronto esce 1 - così ho sostituito RSI30 e RSI70 con solo RSI e ho fatto un confronto e tutto funziona ORO! A parte il fatto che quando cambio lo SMA6 in shift esce sempre SMA6=0? perché?

Grazie a tutti per l'aiuto! Spero di non infastidire così tanto la prossima volta!

 
j.w.msb:

Sia l'RSI che la MA sono doppie, quindi anche le variabili devono esserlo, no?

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

Ho codificato gli errori di stampa, ma nulla viene stampato sul diario, quindi non riesco a capire quali errori si stanno verificando? Mi manca ancora qualcosa di ovvio? Ora sono tornato ad aprire una vendita e poi non essere in grado di chiudere...

metti l'EA su un grafico di un conto demo

non guardare solo nel diario del terminale ...
guardate anche negli esperti del terminale .....

cosa vedi lì stampato

 
deVries:

mettere l'EA su un grafico di un conto demo

non guardare solo nel diario del terminale ...
guarda anche nel terminale esperti .....

cosa vedi lì stampato


Stampa ed esegue ora :) grazie per il tuo aiuto - stavo sbagliando a definire iRSI<70 come un doppio (dato che era un confronto) e stava causando problemi. Ora stampa e funziona come previsto, tranne che, se cambio lo spostamento SMA, stampa SMA=0?
 
j.w.msb:

Stampa ed esegue ora :) grazie per il tuo aiuto - ho sbagliato a definire iRSI<70 come un doppio (dato che era un confronto) e stava causando problemi. Ora stampa e funziona come previsto, tranne che, se cambio lo spostamento SMA, stampa SMA=0?

Metti una SMA con le stesse impostazioni sul grafico del tuo EA e vedi cosa hai fatto ...
 
   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());
         }
      }

Perché il totale += 1;

in questo momento non so se ordersend ha successo

e se fallisce non vedo quale tipo di ordine ha cercato di aprire, potrebbe essere anche un'operazione di vendita che hai cercato di aprire