Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 254

 
Aleksei Stepanenko #:
Beh, ecco qua, bellissimo.

Nessuno stava litigando. Se non ti piace la risposta, vai avanti... Cosa c'è da offendersi? Le persone sono tutte diverse. E in un post precedente ho detto questo su tutti i programmatori. Io stesso a volte faccio domande nei topic per i neofiti. Che senso ha creare un intero thread per una domanda a cui si può rispondere con un solo post?

 

ha scritto un robot... Il tester dà un errore OrderSend 148. Qual è il 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++;
   
  }
   
   
;
  
  
  
  }
//+------------------------------------------------------------------+
 

Persone ... aiuto! c'è un nuovo bar...

come posso aprire un ordine solo quando si apre una nuova barra?

 
Roman Epifanov un nuovo bar...

come posso aprire un ordine solo quando si apre una nuova barra?

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

Non voglio aprire le compravendite correttamente... quale potrebbe essere il problema... Nessun errore durante la compilazione

//+------------------------------------------------------------------+
//|                                               эксперт пустой.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++;
   
  }
   
   
;
  
  
  
  }
}
//+------------------------------------------------------------------+
File:
Lentyai2.mq4  10 kb
 

Ciao a tutti, ho bisogno di un pezzo di codice per chiudere tutti gli acquisti di un certo simbolo.

 
Roman Epifanov #:

ha scritto un robot... Il tester dà un errore OrderSend 148. Qual è il problema?


Non ci sono funzioni interne in MQL, solo esterne.

Sapete come risolvere il problema o avete bisogno di un aiuto qualificato? )))

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

Non ci sono funzioni interne in MQL, solo funzioni esterne.

Sai come risolvere il problema o hai bisogno dell'aiuto di un esperto? )))

l'errore 148 è già stato risolto

 

Dice che il take profit è sbagliato - cosa c'è di sbagliato?


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

Ho messo zero al posto di Bid-tp - funziona!

 
Roman Epifanov take profit è sbagliato - cosa c'è di sbagliato?


Come si inizializza il tp?