[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 113

 
mukata >> :

¿Y qué hay de la pregunta?

Es más rápido almacenar en una variable que llamar a una función cada vez.

Por cierto, es fácil de comprobar en el probador.

 
StatBars >> :
¿Dónde has escondido tu código? Sólo quería retocarlo, y ya está...


//+------------------------------------------------------------------+
//| Copyright © 2009, ::: -- SAMER -- ::: |
//| E-MAIL: camep@inbox.ru icq: 422372555 |
//+------------------------------------------------------------------+

extern double TakeProfit = 500;
extern double Lots = 0.1;
extern double Stoploss = 30;
extern double TrailingStop = 30;
extern int iWPRperiod1 = 50;
extern int iWPRperiod2 = 60;
extern int iWPRperiod3 = 60;
extern int iWPRperiod4 = 50;
extern int slowing = 3;
extern int period = 3;
extern int period2 = 5;

int start()
{
double a;
int b;
int total;
int ticket;
int cnt;
int iWPRperiod1;
int iWPRperiod2;
int iWPRperiod3;
int iWPRperiod4;
int slowing;
int period;
int period2;

if(Bars<100)
{
Print("bars less than 100");
return(0);
}

if(TakeProfit<10)
{
Print("TakeProfit less than 10");
return(0);
}

total=OrdersTotal();
if(total<1)
{

if(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}

if((iWPR(NULL,0,iWPRperiod1,0)>iWPR(NULL,0, iWPRperiod2,0)) < iStochastic(NULL,0,period2,period,slowing,0,0,0,0) )

{
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-Stoploss*Point, Ask+TakeProfit*Point,"comment",16384,0,Green);

if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
{
else Print("Error opening BUY order : ",GetLastError());
return(0);
}

if((iWPR(NULL,0,iWPRperiod1,0)>iWPR(NULL,0, iWPRperiod2,0)) > iStochastic(NULL,0,period2,period,slowing,0,0,0,0) )
{
ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+Stoploss*Point,Bid-TakeProfit*Point,"macd sample",16384,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
return(0);
}
return(0);
}

for(cnt=0; cnt < total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL &&
OrderSymbol()==Symbol())

{
if(OrderType()==OP_BUY)
{
if(iWPR(NULL,0,iWPRperiod1,0)>iWPR(NULL,0, iWPRperiod2,0))
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet)
return(0);
}

if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else
{
if(iWPR(NULL,0,iWPRperiod3,0)<iWPR(NULL,0, iWPRperiod4,0))
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
return(0);
}
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}

 
TheXpert >> :

Es más rápido almacenar en una variable que llamar a una función cada vez.

Por cierto, se puede comprobar fácilmente en el probador.

Gracias, eso es lo que yo también pensaba.

Pero cuanto código he leído en este foro - nadie hace eso, todos llaman a la función siempre. Estoy en el mismo lugar.

Lo entiendo con la función, pero ¿qué pasa con el array?

P.D. recientemente aquí...

 
//+------------------------------------------------------------------+
//| Copyright © 2009, ::: -- SAMER -- ::: |
//| E-MAIL: camep@inbox.ru icq: 422372555 |
//+------------------------------------------------------------------+

extern double TakeProfit = 500;
extern double Lots = 0.1;
extern double Stoploss = 30;
extern double TrailingStop = 30;
extern int iWPRperiod1 = 50;
extern int iWPRperiod2 = 60;
extern int iWPRperiod3 = 60;
extern int iWPRperiod4 = 50;
extern int slowing = 3;
extern int period = 3;
extern int period2 = 5;

int start()
{
   double a;
   int b;
   int total;
   int ticket;
   int cnt;
   int iWPRperiod1;
   int iWPRperiod2;
   int iWPRperiod3;
   int iWPRperiod4;
   int slowing;
   int period;
   int period2;

   if(Bars<100)
   {
      Print("bars less than 100");
      return(0);
   }

   if( TakeProfit<10)
   {
      Print("TakeProfit less than 10");
      return(0);
   }

   total=OrdersTotal();
   if( total<1)
   {

      if(AccountFreeMargin()<(1000* Lots))
      {
         Print("We have no money. Free Margin = ", AccountFreeMargin());
         return(0);
      }

      if((iWPR(NULL,0, iWPRperiod1,0)>iWPR(NULL,0, iWPRperiod2,0)) < iStochastic(NULL,0, period2, period, slowing,0,0,0,0) )
      {
         ticket = OrderSend(Symbol(),OP_BUY, Lots,Ask,3,Ask- Stoploss*Point, Ask+ TakeProfit*Point,"comment",16384,0,Green);

         if( ticket>0)
         {
            if(OrderSelect( ticket, SELECT_BY_TICKET, MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
            else Print("Error opening BUY order : ",GetLastError());
            return(0);
         }
      }
      if((iWPR(NULL,0, iWPRperiod1,0)>iWPR(NULL,0, iWPRperiod2,0)) > iStochastic(NULL,0, period2, period, slowing,0,0,0,0) )
      {
         ticket = OrderSend(Symbol(),OP_SELL, Lots,Bid,3,Bid+ Stoploss*Point,Bid- TakeProfit*Point,"macd sample",16384,0,Red);
         if( ticket>0 && OrderSelect( ticket, SELECT_BY_TICKET, MODE_TRADES))Print("SELL order opened : ",OrderOpenPrice());
         else 
         {
            Print("Error opening SELL order : ",GetLastError());
            return(0);
         }
      }
      return(0);
   }  

   for( cnt=0; cnt < total; cnt++)
   {
      OrderSelect( cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()) 
      {
         if(OrderType()==OP_BUY)
         {
            if(iWPR(NULL,0, iWPRperiod1,0)>iWPR(NULL,0, iWPRperiod2,0))
            {
               OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
               return(0); 
            }
            if( TrailingStop>0)
            {
               if(Bid-OrderOpenPrice()>Point* TrailingStop)
               {
                  if(OrderStopLoss()<Bid-Point* TrailingStop)
                  {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point* TrailingStop,OrderTakeProfit(),0,Green);
                     return(0);
                  }
               }
            }
         }
         else
         {
            if(iWPR(NULL,0, iWPRperiod3,0)<iWPR(NULL,0, iWPRperiod4,0))
            {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
               return(0);
            }
            if( TrailingStop>0)
            {
               if((OrderOpenPrice()-Ask)>(Point* TrailingStop))
               {
                  if((OrderStopLoss()>(Ask+Point* TrailingStop)) || (OrderStopLoss()==0))
                  {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point* TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                  }
               }
            }
         }
      }
   }
return(0);
}

Los errores de sintaxis más fáciles los he corregido yo, te quedan los "fáciles", los lógicos. :)

 
if((iWPR(NULL,0, iWPRperiod1,0)>iWPR(NULL,0, iWPRperiod2,0)) < iStochastic(NULL,0, period2, period, slowing,0,0,0,0) )
if((iWPR(NULL,0, iWPRperiod1,0)>iWPR(NULL,0, iWPRperiod2,0)) > iStochastic(NULL,0, period2, period, slowing,0,0,0,0) )
Es un diseño extraño.
 
StatBars >> :

como copiarme todo ^^

cuando se copia en un programa, es todo una línea.

 
FOREXMASTER писал(а) >>

como copiarme todo ^^

copiarlo en un programa hace que todo sea una línea.

Archivos adjuntos:
 
StatBars >> :

>> gracias)

 
TheXpert >> :

Es más rápido almacenar en una variable que llamar a una función cada vez.

Por cierto, es fácil de comprobar en el probador.

Entiendo la función, pero ¿qué pasa con la matriz?

También tengo que reescribir mucho para ejecutarlo en el probador.

Es más rápido almacenar una variable que llamar a una función cada vez, y ¿es tan rápido leer un elemento de un array como una simple variable?

O más largo - ¿es un array donde hay que buscar el índice, o lo mismo que para una variable?

>> No entiendo muy bien estas sutilezas.

 
mukata >> :

La función está clara, pero ¿qué pasa con la matriz?

Realmente no entiendo estas cosas.

Es mejor mostrarlo con un ejemplo de código.


Hay ambigüedades con una matriz.


Creo que un EA no debería contener matrices relacionadas con la interpretación de datos. Pertenecen a los indicadores.

Muchas personas aquí piensan de manera diferente. Y tratan de meter todo en el Asesor Experto.