Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 254

 
Aleksei Stepanenko #:
Bueno, ahí lo tienes, preciosa.

Nadie se peleaba. Si no te gusta la respuesta, adelante... ¿Por qué hay que ofenderse? Las personas son todas diferentes. Y en un post anterior dije esto sobre todos los programadores. Yo mismo a veces hago preguntas en temas para novatos. ¿Qué sentido tiene crear todo un hilo por una pregunta que se puede responder con un solo post?

 

escribió un robot... El probador da un error OrderSend 148. ¿Cuál es el problema?


//+------------------------------------------------------------------+
//|                                               эксперт пустой.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
int pu;
 
   
//делаем сделку один раз при октрытии бара
int i=1;//номер ордера
int posup=0,possell=0;
int pos_sum=0;
int posa_close=0;
double posa_close_summ=0.03;//объем закрытой позиции
 
datetime bar_otkr=Time[0];
if (Time[0]>bar_otkr)

 while ( i<OrdersTotal())
 {
 OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
 
 pu=pu+OrderProfit();
 if (OrderType()== OP_BUY) posup++;
 if (OrderType()== OP_SELL) possell++;
 if (posup>0)pos_sum=1;//направление бай
 if (possell>0)pos_sum=0;//направление селл
 i++;
 }
 ;
 
 printf(posup,possell);
   if    (Close[0]>Open[0]&&pu==0) OrderSend(Symbol(),OP_BUY,0.03,Bid,2,Ask+15,0,0,0,0,0);//свеча бай при начале работы
   if (Close[0]<Open[0]&&pu==0) OrderSend(Symbol(),OP_SELL,0.03,Bid,2,Ask+15,0,0,0,0,0);//свеча селл при начале работы
      
   if(Close[0]>Open[0]&&pu>0&&pos_sum==1) OrderSend(Symbol(),OP_BUY,0.03,Bid,2,Ask+15,0,0,0,0,0);//свеча бай при прибыли при покупках - покупаем 0.03
   if (Close[0]<Open[0]&&pu>0&&pos_sum==1)//свеча селл при прибыли при покупках- кроем 0.01
   while (i<OrdersTotal())
 {
 OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
 if (OrderLots()>=0.01&&posa_close==0) OrderClose(i,0.01,Bid,3);posa_close=1 ;
 if (posa_close==1)break ; else posa_close=0;
 

 
 i++;
   
  }
   
   
;
 
 
 
  if (Close[0]<Open[0]&&pu<0&&pos_sum==1)//свеча селл при убытках при покупках- кроем 0.03
   while (i<OrdersTotal())
 {
 OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
 if (OrderLots()==0.03&&posa_close==0) OrderClose(i,0.03,Bid,3);posa_close=1 ;
 if (posa_close==1)break ; else posa_close=0;
 
 if (posa_close==0&&OrderLots()==0.02)OrderClose(i,OrderLots(),Bid,3);posa_close_summ=posa_close_summ-0.02;if (posa_close_summ==0)posa_close=1;
 
 if (posa_close==0&&OrderLots()==0.01)OrderClose(i,OrderLots(),Bid,3);posa_close_summ=posa_close_summ-0.01;if (posa_close_summ==0)posa_close=1;
 
 
 
 i++;
   
  }
   
   
;
 
 
 
 
 
 
 
 
 
 
 
  
  if(Close[0]<Open[0]&&pu>0&&pos_sum==0)OrderSend(Symbol(),OP_SELL,0.03,Bid,2,Ask+15,0,0,0,0,0);// свеча селл при продаже и прибыли - покупаем 0.03
  
  
  
  
  
   if (Close[0]>Open[0]&&pu>0&&pos_sum==0)//свеча бай при продаже и прибыли- кроем 0.01
   while (i<OrdersTotal())
 {
 OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
 if (OrderLots()>=0.01&&posa_close==0) OrderClose(i,0.01,Bid,3);posa_close=1 ;
 if (posa_close==1)break ; else posa_close=0;
 
 
 i++;
   
  }
   
   
;
 
 
  
  
  
// свеча селл при продаже и убытке - ничего не делаем
    

  if (Close[0]>Open[0]&&pu<0&&pos_sum==0)// свеча бай при продаже и убытке - кроем 0.03

   while (i<OrdersTotal())
 {
 OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
 if (OrderLots()==0.03&&posa_close==0) OrderClose(i,0.03,Bid,3);posa_close=1 ;
 if (posa_close==1)break ; else posa_close=0;
 
 if (posa_close==0&&OrderLots()==0.02)OrderClose(i,OrderLots(),Bid,3);posa_close_summ=posa_close_summ-0.02;if (posa_close_summ==0)posa_close=1;
 
 if (posa_close==0&&OrderLots()==0.01)OrderClose(i,OrderLots(),Bid,3);posa_close_summ=posa_close_summ-0.01;if (posa_close_summ==0)posa_close=1;
 
 
 
 i++;
   
  }
   
   
;
  
  
  
  }
//+------------------------------------------------------------------+
 

Personas ... ¡Ayuda! Hay un nuevo bar...

¿cómo puedo abrir una orden sólo cuando se abre una nueva barra?

 
Roman Epifanov un nuevo bar...

¿cómo puedo abrir una orden sólo cuando se abre una nueva barra?

void OnTick() {
  datetime cTime;
  static datetime time = 0;
  cTime = iTime(Symbol(), Period(), 0);
  if (time != cTime)
    time = cTime;
  else
    return;
  ...
}
 

No quiero abrir las operaciones correctamente... ¿cuál podría ser el problema? No hay errores durante la compilación

//+------------------------------------------------------------------+
//|                                               эксперт пустой.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
int pu;
 

//делаем сделку один раз при октрытии бара
int i=1;//номер ордера
int posup=0,possell=0;
int pos_sum=0;
int posa_close=0;
double posa_close_summ=0.03;//объем закрытой позиции
 

static datetime New_Time=0;
  bool New_Bar=false;
  if(New_Time!=Time[0])
  {
  New_Time=Time[0];
  New_Bar=true;
}

if (New_Bar)
{
 Print(New_Bar);
 
 
 while ( i<OrdersTotal())
 {
 OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
 
 pu=pu+OrderProfit();
 if (OrderType()== OP_BUY) posup++;
 if (OrderType()== OP_SELL) possell++;
 if (posup>0)pos_sum=1;//направление бай
 if (possell>0)pos_sum=0;//направление селл
 i++;
 }
 ;
 

   if    (Close[0]>Open[0]&&pu==0) OrderSend(Symbol(),OP_BUY,0.03,Bid,2,Ask+15,0,0,0,0,0);//свеча бай при начале работы
   if (Close[0]<Open[0]&&pu==0) OrderSend(Symbol(),OP_SELL,0.03,Bid,2,Ask+15,0,0,0,0,0);//свеча селл при начале работы
      
   if(Close[0]>Open[0]&&pu>0&&pos_sum==1) OrderSend(Symbol(),OP_BUY,0.03,Bid,2,Ask+15,0,0,0,0,0);//свеча бай при прибыли при покупках - покупаем 0.03
   if (Close[0]<Open[0]&&pu>0&&pos_sum==1)//свеча селл при прибыли при покупках- кроем 0.01
   while (i<OrdersTotal())
 {
 OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
 if (OrderLots()>=0.01&&posa_close==0) OrderClose(i,0.01,Bid,3);posa_close=1 ;
 if (posa_close==1)break ; else posa_close=0;
 

 
 i++;
   
  }
   
   
;
 
 
 
  if (Close[0]<Open[0]&&pu<0&&pos_sum==1)//свеча селл при убытках при покупках- кроем 0.03
   while (i<OrdersTotal())
 {
 OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
 if (OrderLots()==0.03&&posa_close==0) OrderClose(i,0.03,Bid,3);posa_close=1 ;
 if (posa_close==1)break ; else posa_close=0;
 
 if (posa_close==0&&OrderLots()==0.02)OrderClose(i,OrderLots(),Bid,3);posa_close_summ=posa_close_summ-0.02;if (posa_close_summ==0)posa_close=1;
 
 if (posa_close==0&&OrderLots()==0.01)OrderClose(i,OrderLots(),Bid,3);posa_close_summ=posa_close_summ-0.01;if (posa_close_summ==0)posa_close=1;
 
 
 
 i++;
   
  }
   
   
;
 
 
 
 
 
 
 
 
 
 
 
  
  if(Close[0]<Open[0]&&pu>0&&pos_sum==0)OrderSend(Symbol(),OP_SELL,0.03,Bid,2,Ask+15,0,0,0,0,0);// свеча селл при продаже и прибыли - покупаем 0.03
  
  
  
  
  
   if (Close[0]>Open[0]&&pu>0&&pos_sum==0)//свеча бай при продаже и прибыли- кроем 0.01
   while (i<OrdersTotal())
 {
 OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
 if (OrderLots()>=0.01&&posa_close==0) OrderClose(i,0.01,Bid,3);posa_close=1 ;
 if (posa_close==1)break ; else posa_close=0;
 
 
 i++;
   
  }
   
   
;
 
 
  
  
  
// свеча селл при продаже и убытке - ничего не делаем
    

  if (Close[0]>Open[0]&&pu<0&&pos_sum==0)// свеча бай при продаже и убытке - кроем 0.03

   while (i<OrdersTotal())
 {
 OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
 if (OrderLots()==0.03&&posa_close==0) OrderClose(i,0.03,Bid,3);posa_close=1 ;
 if (posa_close==1)break ; else posa_close=0;
 
 if (posa_close==0&&OrderLots()==0.02)OrderClose(i,OrderLots(),Bid,3);posa_close_summ=posa_close_summ-0.02;if (posa_close_summ==0)posa_close=1;
 
 if (posa_close==0&&OrderLots()==0.01)OrderClose(i,OrderLots(),Bid,3);posa_close_summ=posa_close_summ-0.01;if (posa_close_summ==0)posa_close=1;
 
 
 
 i++;
   
  }
   
   
;
  
  
  
  }
}
//+------------------------------------------------------------------+
Archivos adjuntos:
Lentyai2.mq4  10 kb
 

Hola a todos, necesito un trozo de código para cerrar todas las compras por un determinado símbolo.

 
Roman Epifanov #:

escribió un robot... El probador da un error OrderSend 148. ¿Cuál es el problema?


No hay funciones internas en MQL, sólo externas.

¿Sabes cómo arreglarlo o necesitas una ayuda cualificada? )))

 
Алексей Тарабанов #:

No hay funciones internas en MQL, sólo externas.

¿Sabes cómo solucionarlo o necesitas la ayuda de un experto? )))

el error 148 ya ha sido resuelto

 

Dice que la toma de beneficios es incorrecta, ¿qué ocurre?


if (Close[1]<Open[1]) {OrderSend(Symbol(),OP_SELL,lot,Bid,2,Ask+sl,Bid-tp,"Candle sell, Close[0]<MA");};
   

He puesto cero en lugar de Bid-tp - ¡funciona!

 
Roman Epifanov toma de beneficios es incorrecta - ¿qué pasa?


¿Cómo se inicializa el tp?