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

[Deleted]  
por favor, indíquenos por qué las transacciones no se abren.... El código parece tener sentido, pero no se abre.
[Deleted]  
//+------------------------------------------------------------------+ 
  //| 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;
      }
   }   
}
[Eliminado]  

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.
[Deleted]  
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.

[Deleted]  

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.