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

 
¿Puede decirme cuál es? Sólo tengo dos. MACD y medias móviles.
 

Por favor, ayude a un principiante. Cómo escribir esta sección de código:

Comprobar las órdenes de mercado y si no hay órdenes de mercado para nuestro instrumento financiero, lo compramos?

Y también necesitamos una línea de código que reordene el Trailing Stop a 500 pips del precio real.

¡¡Ayuda!!

¿Y cuál es la distancia (desde dónde y hasta dónde exactamente)?

//+------------------------------------------------------------------+
//|                                                  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.

¡Bueno, esto es una tontería! Si hay alguna orden: pendiente o de mercado, y en eso para cualquier instrumento financiero, ninguna orden se abrirá en este código:

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

Podemos ver que si hay menos de una orden, se ejecutará. ¿O me equivoco?

 

De la media móvil, tome CalculateCurrentOrders(Symbol()), devuelve valores = número de órdenes abiertas, filtradas por símbolo y magia, con signo = dirección de la transacción: por ejemplo -1 significa 1 orden en venta. Si es necesario, utilice MathAbs() para ignorar el signo.

Del código anterior, toma el trailing stop:

// comprobar el trailing stop - aquí, incluso hay comentarios.

if(TrailingStop>0) { ... }, está en 2 lugares - para comprar y vender. Todo es sencillo. O bien, puedes utilizar las funciones ya hechas de Igor Kim. Son más universales y correctas para el comercio real, pero también un poco más difíciles de entender para un principiante. Si tienes fe en la nueva versión, obtendrás un mejor robot de trading.

p.d. Para la depuración, usa Print(), ayuda mucho.

 
rusa: Me gustaría pedirle que inserte usted mismo esta función en el Asesor Experto. En la imagen, se puede ver que se han abierto 3 órdenes en una barra. No sé cómo ordenar mis robots de forex y no quiero reescribirlos.

Comenzó a entender su código. Estoy sorprendido. Lo que has adjuntado no puede funcionar. Veo que está montado a partir de las piezas, pero al menos los soportes deberían estar correctamente colocados, las variables deberían estar definidas. Y la señal - no está claro, lo que significa, por ejemplo, "rsi>30" - valor del indicador RSI, o algo más? La función Trade_BUY() se adjunta dentro de la función start... etc.

O me da el código completo que funcionó (órdenes abiertas) o rellena el TOR para señales, trailing, etc. Será más fácil para mí escribir desde cero.

 
nuan:

¿Tienes instrucciones detalladas sobre cómo descargar las cotizaciones de MICEX para 2 años, por ejemplo para Lukoil.

como convertirlos correctamente y abrirlos en mt4, si hay enlaces dar enlaces como hacer esto.

P.D. Gracias por adelantado.


Aquí hay una mamba para algunos años
http://zalil.ru/31909547
 
kolyango:

Por favor, ayude a un principiante. Cómo escribir esta sección de código:

Comprobar las órdenes de mercado y si no hay órdenes de mercado para nuestro instrumento financiero, lo compramos?

Y también necesitamos una línea de código que reordene el Trailing Stop a 500 pips del precio real.

¡¡Ayuda!!

¿Y cuál es la distancia (desde dónde y hasta dónde exactamente)?

¡Bueno, esto es una tontería! Si hay alguna orden: pendiente o de mercado, y en eso para cualquier instrumento financiero, ninguna orden se abrirá en este código:

Podemos ver que si hay menos de una orden, se ejecutará. ¿O me equivoco?


¿O tal vez se equivoca?

for (int i = 0; i < OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == . pair)
{
if(OrderType() == OP_BUY | OrderType() == OP_SELL)
{
OrderSend(Symbol(),OP_BUY, .......

}
}
}

 

Necesito ayuda:

un indicador regular de Media Móvil cuando la línea se rompe aparece la señal de Compra (arriba) o Venta (abajo),

¿Alguien tiene un código terminado del objeto gráfico, puede publicarlo?

Gracias.

 
estos están en la base de datos
 
ZZZEROXXX:
Estos están en la base de datos.
Se agradecería un enlace.
 

Hola, ¿podríais decirme cómo hacer un bucle en la comprobación de la barra arriba/abajo? Es decir, ¿cómo puedo describir esta condición "más corta"?

Close[0]>Open[0]&& Close[1]>Open[1]&& Close[2]>Open[2]&& Close[3]>Open[3]&&& Close[4]>Open[4]&& Close[5]>Open[5]&& Close[6]>Open[6]&& Close[7]>Open[7]

Gracias de antemano.