[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 366

 
abolk:

você tem

mas você tem que (comparação)


Pegue o código de qualquer indicador OEM e veja como o código é formatado

Não vejo nenhuma diferença. por exemplo, é uma disciplina padrão. é apenas a complexidade que a torna assim. no entanto, além do suporte em si, pode ser uma questão de ";" por exemplo...

//+------------------------------------------------------------------+
//|                                                       Discipline |
//|                 Copyright © 1999-2008, MetaQuotes Software Corp. |
//|                                                         FX_FISH  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Kiko Segui"
#property link      "webtecnic@terra.es"
//----
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
//----
double buffer1[];
double buffer2[];
//----
extern int period=10;
extern int price=0; // 0 or other = (H+L)/2
                    // 1 = Open
                    // 2 = Close
                    // 3 = High
                    // 4 = Low
                    // 5 = (H+L+C)/3
                    // 6 = (O+C+H+L)/4
                    // 7 = (O+C)/2
extern bool Mode_Fast=false;
extern bool Signals  =true;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2,Lime);
   SetIndexBuffer(0,buffer1);
   SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2,Red);
   SetIndexBuffer(1,buffer2);
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   int i;
   double tmp;
//----
   for(i=0;i<Bars;i++)
     {
      ObjectDelete("Sel"+DoubleToStr(i,0));
      ObjectDelete("Buy"+DoubleToStr(i,0));
      ObjectDelete("Exit"+DoubleToStr(i,0));
     }
   return(0);
  }
double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0;
int buy=0,sell=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int i;
   int barras;
   double _price;
   double tmp;
   double MinL=0;
   double MaxH=0;
   double Threshold=1.2;
//----
   barras=Bars;
   if(Mode_Fast) barras=100;
   i=barras-period-1;
   while(i>=0)
     {
      MaxH=High[Highest(NULL,0,MODE_HIGH,period,i)];
      MinL= Low[ Lowest(NULL,0,MODE_LOW, period,i)];
      switch(price)
        {
         case 0:  _price=(High[i]+Low[i])/2;                   break;
         case 1:  _price= Open[i];                             break;
         case 2:  _price= Close[i];                            break;
         case 3:  _price= High[i];                             break;
         case 4:  _price= Low[i];                              break;
         case 5:  _price=(High[i]+Low[i]+Close[i])/3;          break;
         case 6:  _price=(Open[i]+High[i]+Low[i]+Close[i])/4;  break;
         case 7:  _price=(Open[i]+Close[i])/2;                 break;
         default: _price=(High[i]+Low[i])/2;                   break;
        }
      Value=0.33*2*((_price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1;
      Value=MathMin(MathMax(Value,-0.999),0.999);
      Fish =0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;
      buffer1[i]=0;
      buffer2[i]=0;
//----
      if((Fish<0) && (Fish1>0))
        {
         if(Signals)
           {
            ObjectCreate("Exit"+DoubleToStr(i,0),OBJ_ARROW,0,Time[i],_price);
            ObjectSet("Exit"+DoubleToStr(i,0),OBJPROP_ARROWCODE,251);
            ObjectSet("Exit"+DoubleToStr(i,0),OBJPROP_COLOR,Red);
           }
         buy=0;
        }
      if((Fish>0) && (Fish1<0))
        {
         if(Signals)
           {
            ObjectCreate("Exit"+DoubleToStr(i,0),OBJ_ARROW,0,Time[i],_price);
            ObjectSet("Exit"+DoubleToStr(i,0),OBJPROP_ARROWCODE,251);
            ObjectSet("Exit"+DoubleToStr(i,0),OBJPROP_COLOR,Red);
           }
         sell=0;
        }
      if(Fish>=0)
      { buffer1[i]=Fish; }
      else
      { buffer2[i]=Fish; }
      tmp=i;
      if((Fish<-Threshold) && (Fish>Fish1) && (Fish1<=Fish2))
        {
         if (Signals)
           {
            ObjectCreate("Sel"+DoubleToStr(i,0),OBJ_ARROW,0,Time[i],High[i]+5*Point);
            ObjectSet("Sel"+DoubleToStr(i,0),OBJPROP_ARROWCODE,226);
            ObjectSet("Sel"+DoubleToStr(i,0),OBJPROP_COLOR,Red);
           }
         sell=1;
        }
      if((Fish>Threshold) && (Fish<Fish1) && (Fish1>=Fish2))
        {
         if (Signals)
           {
            ObjectCreate("Buy"+DoubleToStr(i,0),OBJ_ARROW,0,Time[i],Low[i]-5*Point);
            ObjectSet("Buy"+DoubleToStr(i,0),OBJPROP_ARROWCODE,225);
            ObjectSet("Buy"+DoubleToStr(i,0),OBJPROP_COLOR,Aqua);
           }
         buy=1;
        }
      Value1=Value;
      Fish2=Fish1;
      Fish1=Fish;
      i--;
     }
   return(0);
  }
//+------------------------------------------------------------------+
 
KONDOR:
preste mais atenção aos parênteses ))))
Símbolo()

É isto que você quer dizer, por exemplo?

if(OrderSymbol()==Symbol())

O erro permaneceu.

 

é também se? ou o quê?

Vou refazê-lo então...

deve ser assim: if(OrderSymbol()==Symbol() ??

todos os símbolos estão definidos.

removeu o parênteses - nada mudou.

 
KONDOR:
o penúltimo escalão é desnecessário
tudo o mesmo =(
 
frxmax:

onde está o erro a, em termos de parênteses tudo parece estar em ordem?


//+------------------------------------------------------------------+
//|                                                        Beta2.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
extern int       StopLoss=100;
extern int       TakeProfit=20;
extern double    Lot=0.01;
extern int       cnt, ticket, total;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
      double LoCurent=iCustom(NULL, 0, "LO",0,0);
      double LoPrevious=iCustom(NULL, 0, "LO",1,1);
      double FtCurent=iCustom(NULL, 0, "FT",0,0);
      double FtPrevious=iCustom(NULL, 0, "FT",1,1);
//----
   if (total==0)
      {
         if (LoCurent>LoPrevious && FtCurent>FtPrevious)
            {
               ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Bid-StopLoss*Point,Bid+TakeProfit*Point,"Buy",1111,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); 
            }else 
            if(LoCurent<LoPrevious && FtCurent<FtPrevious)
               {
                  ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Ask+StopLoss*Point,Ask-TakeProfit*Point,"Sell",2222,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);
      }
      else 
      if(LoCurent<LoPrevious || FtCurent<FtPrevious || LoCurent<-30 || LoPrevious<-30)
         {
            if(OrderSelect(ticket,SELECT_BY_POS,MODE_TRADES)==false) //break;
               {
                  if(OrderSymbol()==Symbol())
                   {
                      if(OrderType()==OP_SELL)
                         {
                         OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
                         }
                     return(0);
                   }
               }
         }
         else
            if (LoCurent>LoPrevious || FtCurent>FtPrevious || LoCurent>30 || LoPrevious>30)
               {
                  if(OrderSelect(ticket,SELECT_BY_POS,MODE_TRADES)==false) //break;
                     {
                        if(OrderSymbol()==Symbol())
                           {
                              if(OrderType()==OP_SELL)
                                 {
                                    OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
                                 }
                               return(0);
                           }
                     }
               }
           //}
return(0);
      }
//+------------------------------------------------------------------+
 
frxmax:
sem erros.
 else 
      if(LoCurent<LoPrevious || FtCurent<FtPrevious || LoCurent<-30 || LoPrevious<-30)
         {
            if(OrderSelect(ticket,SELECT_BY_POS,MODE_TRADES)) //break ругается

               {
                  if(OrderSymbol()==Symbol())
                   {
                      if(OrderType()==OP_SELL)
                         {
                         OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
                         }
                     return(0);
                   }
               }
         }
         else
            if (LoCurent>LoPrevious || FtCurent>FtPrevious || LoCurent>30 || LoPrevious>30)
               {
                  if(OrderSelect(ticket,SELECT_BY_POS,MODE_TRADES)) //break ругается
                     {
                        if(OrderSymbol()==Symbol())
                           {
                              if(OrderType()==OP_SELL)
                                 {
                                    OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
                                 }
                               return(0);
                           }
                     }
               }
      
return(0);
      }
 
Muito obrigado por sua ajuda. KONDOR
 

O único problema é que os resultados não são tão bons.

Ajude-me a entender como fazer para que apenas uma ordem seja aberta na direção do sinal recebido anteriormente. feche-a quando um dos indicadores mostrar um sinal inverso. e todos levando em conta o par de moedas

 
verifica a função NumberOfBarOpenLastPos(), ele verifica o número de barra em que o pedido está aberto
 

Eu preferiria que fosse assim: (por exemplo, na tabela eurodólar, há um sinal de compra)

se total>1

se par de moedas = eurodólar

se a ordem é para vender

fechar o pedido

abrir uma ordem de compra


A visão geral deve se parecer com a seguinte

se (comprar sinal)

se total==0

compre

caso contrário (total >1)

verificar em que par de moedas foram abertos os negócios

se nosso

se à venda

fechá-lo e voltar a comprar

ou então (total = 0, abrir uma compra) ....

Razão: