[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 198

 
mmmmm.... bem pessoalmente eu acho que está escrito corretamente - o único problema é a colocação do código snippets.... Você poderia colocá-lo corretamente? não está claro para mim como fazer isso.
 
splxgf:
Sinceramente, não sei se você pode descrever uma função dentro de outra, eu nunca me deparei com ela.
Não nos confunda com os escuros. No nível deste ramo, basta dizer que todas as funções do usuário devem estar localizadas fora da função Iniciar.
 
CLAIN:
mmmmm.... bem pessoalmente, acho que está tudo escrito corretamente - o único problema é a colocação do código snippets.... você poderia colocá-lo corretamente? não está claro para mim como fazer isso

Bem, não vou postar exatamente, mas como já foi escrito, todas as funções personalizadas estão além do início.

Em nível de conceito

Iniciar (){}

MACD{}

AnalyzeSignal(){}

Remova a descrição das funções personalizadas para um arquivo separado, certifique-se de que o resto do programa compila mensagens sem colchetes de erro e encaixe cada função até o final do código resultante.

 

Obrigado, funcionou =) apenas os negócios não se abrem, mas isso é uma coisa pequena =) não poderia ter feito sem você )

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

 

procurar conselho de um programador


avatar
1
Metamql 20.09.2011 14:31
Caros profissionais, por favor, dêem alguns conselhos. Há duas médias móveis com períodos de 5 e 60. Ao cruzar o MA rápido sobre o lento de baixo para cima + filtros, abre um comércio de compra. O problema é, como fazer um comércio abrir apenas uma vez e quando ele fecha, não abrir um novo comércio, mesmo que haja condições adequadas para abrir, até que haja um crossover inverso?
 

Olá.

Por favor, ajude - por favor, responda ao meu post na página 196. (pergunta sobre int MAGIC;)

Agradecemos antecipadamente.

 
nemo811:

Olá.

Por favor, ajude - por favor, responda ao meu post na página 196. (pergunta sobre int MAGIC;)

Agradecemos antecipadamente.


Você já tentou fazer funções com parâmetros? Para não utilizar variáveis globais externas (todos podem chamá-las por seu próprio nome)
 
sergeev:

procurar conselho de um programador


1
Metamql 20.09.2011 14:31
Caros profissionais, por favor, dêem alguns conselhos. Há duas médias móveis com períodos de 5 e 60. Ao cruzar um MA rápido sobre um MA lento de baixo para cima + filtros, abre um comércio na Buy. O problema é, como abrir um comércio apenas uma vez e quando ele fecha, não abrir um novo comércio, mesmo que haja condições adequadas para abrir, até que ocorra um crossover inverso?

colocar uma bandeira para proibir uma maior abertura e remover a bandeira ao cruzar para trás, um par de barras pode ser atrasado para evitar saltar
 
Vinin:

Você já tentou fazer funções com parâmetros? Para não utilizar variáveis globais externas (todos podem chamá-las de seu próprio jeito)

Quero dizer, 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);
 }

???

...e a condição

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

será rastreado corretamente?

 
nemo811:

Quero dizer, como:

???

...e a condição

será rastreado corretamente?


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);
 }
Assim, à variável OrdTicket deve ser atribuído algum valor padrão. Caso contrário, não há posições em aberto e a função retornará algo