初心者の方からの質問 MQL4 MT4 MetaTrader 4 - ページ 254

 
Aleksei Stepanenko #:
さて、そこにあるのは、美しい。

誰もケンカしていない。答えが気に入らなければ、どうぞ...。何を怒ることがあるんだ?人は皆、違うものです。そして、以前の記事で、私はすべてのプログラマーについてこう言いました。私自身、初心者向けのトピックで質問することもあります。たった一回の投稿で答えられるような質問で、わざわざスレッドを作る意味はあるのでしょうか?

 

は、ロボットを書いた...テスターではOrderSendエラー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エラー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の代わりに0を入れたら、うまくいきました。

 
Roman Epifanov テイクプロフィットが間違って いると表示されるのですが、何が間違っているのでしょうか?


TPの初期化はどのように行うのですか?