[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 198

 
mmmmm.... Bueno, personalmente creo que está escrito correctamente - el único problema es la colocación de los fragmentos de código .... ¿podría colocarlo correctamente? no me queda claro cómo hacerlo.
 
splxgf:
Sinceramente, no sé si se puede describir una función dentro de otra, nunca me lo he encontrado.
No nos confundas a los morenos. A nivel de esta rama, basta con afirmar que todas las funciones de usuario deben situarse fuera de la función Inicio.
 
CLAIN:
mmmmm.... Bueno, personalmente, creo que todo está escrito correctamente - el único problema es la colocación de los fragmentos de código.... ¿podría colocarlo correctamente? no me queda claro cómo hacerlo

Bueno, no lo voy a publicar exactamente, pero como ya se ha escrito todas las funciones personalizadas más allá de empezar.

A nivel de concepto

Inicio (){}

MACD{}

AnalizarSeñal(){}

Retire la descripción de las funciones personalizadas a un archivo separado, asegúrese de que el resto del programa compila sin mensajes de error entre corchetes y acople cada función al final del código resultante.

 

Gracias, ha funcionado =) sólo que las ofertas no se abren, pero eso es una pequeña cosa =) no podría haberlo hecho sin ti )

//+------------------------------------------------------------------+
//|                                                     MACD ^^^.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern int TP = 100; 
extern int TS = 100;
extern double lots = 0.1;
int slip = 3;
int Magic = 1;

int total;
int ticket = 0; //объявил тотал и тикет



//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----


int signal = signal_MACD(); 
AnalyzeSignal(signal);




//----
   return(0);
  }
//+------------------------------------------------------------------+






int signal_MACD()
{
   int MACD[8] = {0,1,2,3,4,5,6,7};
MACD[0] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,7);
MACD[1] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,6);
MACD[2] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,5);
MACD[3] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,4);
MACD[4] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,3);
MACD[5] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,2);
MACD[6] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,1);
MACD[7] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,0);
   total = OrdersTotal();
   if(total<1)
   {
      if(MACD[0]<0)
      {
         if(MACD[1]>0)
         {
            if(MACD[2]>0)
            {
               if(MACD[3]>0)
               {
                  if(MACD[4]>0)
                  {
                     if(MACD[5]>0)
                     {
                        if(MACD[6]>0)
                        {
                           if(MACD[7]<0)
                           {
                              return(-100);
                           }
                        }
                     }
                  }
               }
            }
         }
      }
      if(MACD[0]>0)
      {
         if(MACD[1]<0)
         {
            if(MACD[2]<0)
            {
               if(MACD[3]<0)
               {
                  if(MACD[4]<0)
                  {
                     if(MACD[5]<0)
                     {
                        if(MACD[6]<0)
                        {
                           if(MACD[7]>0)
                           {
                              return(100);
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }
}

void AnalyzeSignal(int signal)
{
   if(signal == 100)
   {
      ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"покупаем",Magic,0,Green);
      if(ticket>0)
      {
         OrderSelect(ticket,SELECT_BY_TICKET);
         Print("открылись на покупку по цене:", OrderOpenPrice());
      }
      else
      {
         Print("открыться не удалось по причине:", GetLastError());
         return(0);
      }
   }
   if(signal == -100)
   {
      ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,"Продаем",Magic,0,Green);
      if(ticket>0)
      {
         OrderSelect(ticket,SELECT_BY_TICKET);
         Print("открылись на продажу по цене:", OrderOpenPrice());
      }
      else
      {
         Print("открыться не удалось по причине:", GetLastError());
         return(0);
      }
   }
}

 

pedir consejo a un programador


avatar
1
Metamql 20.09.2011 14:31
Estimados profesionales, por favor, den algún consejo. Hay dos medias móviles con períodos de 5 y 60. Al cruzar la MA rápida sobre la lenta de abajo hacia arriba + filtros, se abre una operación de compra. El problema es, ¿cómo hacer que una operación se abra una sola vez y cuando se cierre, no se abra una nueva operación, aunque haya condiciones adecuadas para abrirse, hasta que haya un cruce inverso?
 

Hola.

Por favor, ayúdenme, respondan a mi mensaje en la página 196. (pregunta sobre int MAGIC;)

Gracias de antemano.

 
nemo811:

Hola.

Por favor, ayúdenme - respondan a mi mensaje en la página 196. (pregunta sobre int MAGIC;)

Gracias de antemano.


¿Has probado a hacer funciones con parámetros? Para no utilizar variables globales externas (cada uno puede llamarlas por su nombre)
 
sergeev:

pedir consejo a un programador


1
Metamql 20.09.2011 14:31
Estimados profesionales, por favor, den algún consejo. Hay dos medias móviles con períodos de 5 y 60. Cuando se cruza una MA rápida sobre una lenta de abajo hacia arriba + filtros, se abre una operación de compra. El problema es, ¿cómo hacer que una operación se abra una sola vez y cuando se cierre, no abrir una nueva operación, aunque haya condiciones adecuadas para abrir, hasta que se produzca un cruce inverso?

establecer una bandera para prohibir que se siga abriendo y quitar la bandera cuando se cruce de nuevo, se puede retrasar un par de compases para evitar el rebote
 
Vinin:

¿Has probado a hacer funciones con parámetros? Para no utilizar variables globales externas (cada uno puede llamarlas a su manera)

Quiero decir, como:

int OrdTicket_b(int MAGIC)
 {
  string SMB=Symbol();
  int OrdTicket;
  int i;
  for(i=0;i<OrdersTotal();i++)
   {
    if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)
     {
      if(OrderSymbol()==SMB)
       {
        if(OrderMagicNumber()==MAGIC || OrderMagicNumber()==777)
         {
          if(OrderType()==OP_BUY || OrderType()==OP_SELL)
           {
            OrdTicket=OrderTicket();
           }  
         }  
       }          
     }
   }
  return(OrdTicket);
 }

???

...y la condición

    if(OrderMagicNumber()==MAGIC || OrderMagicNumber()==777)

¿se rastreará correctamente?

 
nemo811:

Quiero decir, como:

???

...y la condición

¿se rastreará correctamente?


int OrdTicket_b(int lMAGIC)
 {
  string SMB=Symbol();
  int OrdTicket=0;
  int i;
  for(i=0;i<OrdersTotal();i++)
   {
    if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)
     {
      if(OrderSymbol()==SMB)
       {
        if(OrderMagicNumber()==lMAGIC)
         {
          if(OrderType()==OP_BUY || OrderType()==OP_SELL)
           {
            OrdTicket=OrderTicket();
           }  
         }  
       }          
     }
   }
  return(OrdTicket);
 }
Así, a la variable OrdTicket se le debe asignar algún valor por defecto. En caso contrario, no hay posiciones abiertas y la función devolverá algo