[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 282

 
Você pode me dizer qual deles? Eu só tenho dois. MACD e Médias Móveis.
 

Por favor, ajude um iniciante. Como escrever esta seção de código:

Verifique as ordens de mercado e se não houver ordens de mercado para nosso instrumento financeiro, nós o compramos?

E também precisamos de uma linha de código que rearranje o Trailing Stop 500 pips para longe do preço real.

Socorro!!!

E qual é a distância (de onde e para onde exatamente)?

//+------------------------------------------------------------------+
//|                                                  MACD Sample.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+

extern double TakeProfit = 50;
extern double Lots = 0.1;
extern double TrailingStop = 30;
extern double MACDOpenLevel=3;
extern double MACDCloseLevel=2;
extern double MATrendPeriod=26;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double MacdCurrent, MacdPrevious, SignalCurrent;
   double SignalPrevious, MaCurrent, MaPrevious;
   int cnt, ticket, total;
// initial data checks
// it is important to make sure that the expert works with a normal
// chart and the user did not make any mistakes setting external 
// variables (Lots, StopLoss, TakeProfit, 
// TrailingStop) in our case, we check TakeProfit
// on a chart of less than 100 bars
   if(Bars<100)
     {
      Print("bars less than 100");
      return(0);  
     }
   if(TakeProfit<10)
     {
      Print("TakeProfit less than 10");
      return(0);  // check TakeProfit
     }
// to simplify the coding and speed up access
// data are put into internal variables
   MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
   MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
   SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
   SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
   MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
   MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);

   total=OrdersTotal();
   if(total<1) 
     {
      // no opened orders identified
      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("We have no money. Free Margin = ", AccountFreeMargin());
         return(0);  
        }
      // check for long position (BUY) possibility
      if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&
         MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious)
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"macd sample",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); 
        }
      // check for short position (SELL) possibility
      if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && 
         MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious)
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,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);
     }
   // it is important to enter the market correctly, 
   // but it is more important to exit it correctly...   
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol())  // check for symbol
        {
         if(OrderType()==OP_BUY)   // long position is opened
           {
            // should it be closed?
            if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
               MacdCurrent>(MACDCloseLevel*Point))
                {
                 OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
                 return(0); // exit
                }
            // check for trailing stop
            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 // go to short position
           {
            // should it be closed?
            if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
               MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*Point))
              {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
               return(0); // exit
              }
            // check for trailing stop
            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);
  }
// the end.

Bem, isso é um absurdo! Se houver qualquer ordem: pendente ou de mercado, e para qualquer instrumento financeiro, nenhuma ordem será aberta neste código:

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

Podemos ver que, se houver menos de uma ordem, ela será executada. Ou eu estou errado?

 

Da média móvel, pegue CalculateCurrentOrders(Symbol()), ele retorna valores = número de ordens abertas, filtrado por símbolo e magia, com sinal = direção da transação: por exemplo -1 significa 1 ordem em venda. Se necessário, use MathAbs() para ignorar o sinal.

A partir do código acima, pegue a parada de trilha:

// verificar a parada de trilha - aqui, há até mesmo comentários.

if(TrailingStop>0) { ... }, está em 2 lugares - para compra e venda. Tudo é simples. Ou, você pode usar as funções prontas do Igor Kim's. Há uma cor especial aqui. Eles são mais universais e corretos para o comércio real, mas também um pouco mais difíceis de entender para um iniciante. Se você tiver uma boa fé na nova versão, você terá um robô comercial melhor.

p.s. Para depuração, use Print(), isso ajuda muito.

 
rusa: Gostaria de pedir que você mesmo inserisse esta função no Expert Advisor. Na imagem, você pode ver que 3 pedidos foram abertos em um bar. Eu não sei como encomendar meus robôs forex e não tenho certeza de como corrigi-los.

Comecei a entender seu código. Estou surpreso. O que você tem anexado não pode funcionar. É óbvio que ele é montado a partir de peças, mas pelo menos os parênteses devem ser colocados corretamente, as variáveis devem ser definidas. E o sinal - não está claro, o que significa, por exemplo, "rsi>30" - valor RSI indicador, ou algo mais? A função Trade_BUY() é anexada dentro da função start... etc.

Ou me dão o código completo que funcionou (ordens abertas) ou preenchem os TOR para sinais, rastreamento, etc. Será mais fácil para mim escrever do zero.

 
nuan:

Você tem instruções detalhadas sobre como baixar as citações para MICEX por 2 anos, por exemplo, para Lukoil.

como convertê-los corretamente e abri-los em mt4, se houver algum link me dê links de como fazer isso.

P.S. Obrigado de antemão.


Aqui está uma mamba por alguns anos
http://zalil.ru/31909547
 
kolyango:

Por favor, ajude um iniciante. Como escrever a seguinte seção de código:

Verifique as ordens de mercado e se não houver ordens de mercado para nosso instrumento financeiro, nós o compramos?

E também precisamos de uma linha de código que rearranje o Trailing Stop 500 pips para longe do preço real.

Socorro!!!

E qual é a distância (de onde e para onde exatamente)?

Bem, isso é um absurdo! Se houver qualquer ordem: ou pendente ou de mercado, e a qualquer instrumento financeiro, nenhuma ordem será aberta por este código:

Podemos ver que, se houver menos de uma ordem, ela será executada. Ou eu estou errado?


Ou talvez você esteja errado?

para (int i = 0; i < OrderTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == . par)
{
if(OrderType() == OP_BUY || OrderType() == OP_SELL)
{
OrderSend(Symbol(),OP_BUY, .......

}
}
}

 

Preciso de alguma ajuda:

um indicador de Média Móvel regular quando a linha quebra o sinal de Compra (para cima) ou Venda (para baixo),

Alguém tem um código acabado do objeto gráfico, você pode postá-lo!

Obrigado.

 
estes estão no banco de dados
 
ZZZEROXXX:
Estes estão no banco de dados.
Um link seria apreciado.
 

Olá! Você pode me dizer como "loopar" a verificação da barra para cima/para baixo? Ou seja, como posso descrever esta condição "mais curta"?

Fechar[0]>Abrir[0]&& Fechar[1]>Abrir[1]&& Fechar[2]>Abrir[2]&& Fechar[3]>Abrir[3]&&& Fechar[4]>Abrir[4]&& Fechar[5]>Abrir[5]&& Fechar[6]>Abrir[6]&& Fechar[7]>Abrir[7]

Obrigado de antemão.