Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 254

 
Aleksei Stepanenko #:
Ну вот и помирились, красота.

А никто и не ссорился. Не понравился ответ - да пожалуйста... Что из-за этого обижаться?... Люди ведь разные бывают. А в предыдущем сообщении это я сказал о всех программистах. Я и сам иногда задаю вопросы в темах для новичков. Смысл создавать целую тему из-за вопроса на который можно ответить всего одним сообщением?

 

написал робот... в тестере выдает ошибку OrderSend error 148 . В чем проблема ?


//+------------------------------------------------------------------+
//|                                               эксперт пустой.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++;
   
  }
   
   
;
  
  
  
  }
//+------------------------------------------------------------------+
 

Народ ... помогите! есть новый бар...

как мне открывать ордер только при открытии нового бара?

 
Roman Epifanov #:

Народ ... помогите! есть новый бар...

как мне открывать ордер только при открытии нового бара?

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

Короче не хочет сделки нормально открывать.. в чем может быть проблема.. Ошибок при компиляции нет

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

Всем привет! Нужен кусочек кода закрыть все покупки по определенному символу.

 
Roman Epifanov #:

написал робот... в тестере выдает ошибку OrderSend error 148 . В чем проблема ?


В MQL не бывает внутренних функций, только внешние. 

Знаете, как исправить, или нужна помощь квалифицированная? )))

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

В MQL не бывает внутренних функций, только внешние. 

Знаете, как исправить, или нужна помощь квалифицированная? )))

ошибку 148 уже решил

 

пишет не правильный тейк профит - в чем дело?


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

Ставлю вместо Bid-tp ноль - то работает!

 
Roman Epifanov #:

пишет не правильный тейк профит - в чем дело?


Как вы инициализируете tp?

Причина обращения: