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

 
por favor, indíquenos por qué las transacciones no se abren.... El código parece tener sentido, pero no se abre.
 
//+------------------------------------------------------------------+ 
  //| 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 int TF = 1; 
  extern double lots = 0.1; 
  int fast_ema = 5; 
  int slow_ema = 34; 
  int signal_period = 5; 
  int slip = 3; 
  int Magic = 1; 

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

 //+------------------------------------------------------------------+ 
  //| expert initialization function | 
  //+------------------------------------------------------------------+ 
  int init() 
    { 
  //---- 

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

 //---- 
     return(0); 
    } 
  //+------------------------------------------------------------------+ 
  //| expert start function | 
  //+------------------------------------------------------------------+ 
  int start() 
    { 
  //---- 
  
 CheckTicket();
 bool signal = signal_MACD(); 
 AnalyzeSignal(signal); 

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

 bool signal_MACD() 
  { 
    bool signal_MACD = false; 
    double tmp = iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0); 
    for(int i=1;i<=5;i++) 
    { 
       if(NormalizeDouble(iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0)*tmp,4)<0.0) 
       { 
          signal_MACD = true; 
          break; 
       } 
    } 
  } 

 void AnalyzeSignal(bool signal) 
  { 
    double MACD = iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0);
    total = OrdersTotal();
    if(total < 0)
    {
      if(signal == true)
      {
         if(MACD > 0)
         {
                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(MACD < 0)
         {
               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); 
               } 
         }
         else
            return(0);
      }
    }
  }
  
void CheckTicket()
{
   if(OrderSelect(ticket,SELECT_BY_TICKET))
   {
      if(OrderCloseTime()>0)
      {
         ticket = 0;
      }
   }   
}
 

Este es un punto que no puedo juntar, ayúdame a crear:

Necesito definir un punto cero en el beneficio de dos o más órdenes abiertas en una dirección, por ejemplo para comprar.

y añadir el take profit a este punto y asignarlo a todas las órdenes de compra abiertas.

Y el take profit debe mostrarse en el gráfico, es decir, debe ser visible.

Por ejemplo, al precio de 1500 abrimos la primera orden de compra

a las 1600 abrimos la segunda orden de compra.

su punto cero está en 1550 + (Take Profit = 20)

y aquí la primera y la segunda orden tienen un take profit de 1570, cuando el precio alcance este nivel, ambas órdenes se cerrarán,

y si el precio pasa (salta) este nivel, seguirá y cerrará las órdenes.

Es muy importante llevar un registro de las órdenes de compra y de venta simultáneamente y no interferir entre ellas. Debe establecer el take profit por separado para la compra y el take profit por separado para la venta, y sólo cuando se abran dos o más órdenes en una dirección al mismo tiempo.

 
CLAIN:
por favor, indíquenos por qué las transacciones no se abren.... El código parece tener sentido, pero no se abre.
Porque OrdesTotal() nunca devuelve un valor negativo.
 
Gracias, buen punto.... corregido... pero las operaciones siguen sin abrirse.... ¿qué hacer?
 
CLAIN:
Gracias, buen punto.... corregido... pero las operaciones siguen sin abrirse.... ¿qué hacer?


Probablemente corregir la función signal_MACD().

Bueno, que todavía estaría dando algo a cambio.

 

Hola.

¿Puede decirme si he escrito las condiciones correctamente? (Los parámetros Fractal_point_up_buy y Fractal_point_down_buy están normalizados).

Gracias de antemano.

      Fractal_point_up_buy=TF1B;
      Flow_differential_buy=Fractal_point_up_buy-Bid;
      if (timf1s>timf2b && timf2s>timf2b && timf3s>timf2b && timf3s<timf1b)
       {
        Fractal_point_down_buy=TF3S;   
       }
      else
       {
        if (timf1s>timf2b && timf2s>timf2b && timf3s<timf2b && timf2s<timf1b)
         {
          Fractal_point_down_buy=TF2S;   
         }
        else
         {
          if (timf1s>timf2b && timf2s<timf2b && timf3s<timf2b && timf1s<timf1b)
          Fractal_point_down_buy=TF1S; 
         }     
       }
      Fractal_fibo_buy=100*Flow_differential_buy/(Fractal_point_up_buy-Fractal_point_down_buy);
 
belck:

Este es un punto que no puedo juntar, ayúdame a crear:

Necesito definir un punto de beneficio cero para dos o más órdenes abiertas en una dirección, por ejemplo, de compra.

y añadir el take profit a este punto y asignarlo a todas las órdenes de compra abiertas.

Y el take profit debe mostrarse en el gráfico, es decir, debe ser visible.

Por ejemplo, al precio de 1500 abrimos la primera orden de compra

a las 1600 abrimos la segunda orden de compra.

su punto cero está en 1550 + (Take Profit = 20)

y aquí la primera y la segunda orden tienen un take profit de 1570, cuando el precio alcance este nivel, ambas órdenes se cerrarán,

y si el precio pasa (salta) este nivel, seguirá y cerrará las órdenes.

Es muy importante llevar un registro de las órdenes de compra y de venta simultáneamente y no interferir entre ellas. Debe establecer el take profit por separado para la compra y el take profit por separado para la venta, y sólo cuando se abran dos o más órdenes en una dirección al mismo tiempo.


Para una posición abierta a 1500, una Toma a 1570 estaría bien (si no se tiene en cuenta el StopLevel), pero para una posición abierta a 1600, una Toma a 1570 causaría un Error 130 - paradas equivocadas. Al fin y al cabo, una Toma no puede ser inferior al precio de apertura de una Compra. Esto ya es un StopLoss.
Para dos posiciones has definido tu punto de equilibrio, pero ¿para tres-cuatro-cinco?
Primero debe definir la fórmula de equilibrio para las posiciones unidireccionales, y luego puede crear una lógica.
 
nemo811:

Hola.

¿Puede decirme si he escrito las condiciones correctamente? (Los parámetros Fractal_point_up_buy y Fractal_point_down_buy están normalizados).

Gracias de antemano.

Hola.

Si se declaran todas las variables, no veo errores en la sintaxis de MQL4...

¿Cuál es el problema?

 
,
artmedia70:
Para una posición abierta a 1500, una toma a 1570 estaría bien (si no se tiene en cuenta el StopLevel), pero para una posición abierta a 1600, una toma a 1570 causaría un error 130 - paradas equivocadas. Al fin y al cabo, una Toma no puede ser inferior al precio de apertura de una Compra. Esto ya es un StopLoss.
Para dos posiciones has definido tu punto de equilibrio, pero ¿para tres-cuatro-cinco?
Primero hay que definir la fórmula del punto de equilibrio para las posiciones unidireccionales, y luego se puede elaborar la lógica.

Todo depende de cuándo fijemos o cambiemos el Take Profit. Se basa en el precio actual.
Razón de la queja: