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

 
a.lxrn:

初心者からの質問です)例のコードにある条件、ヘルプをお願いします。

真の状態でのメッセージを1回だけ出力させる方法、つまり価格>馬が1つのメッセージを出力する(掛け算ではない)ことは、おわかりいただけたと思います。

カウンターの正しい処方は?

if(Work==false) // Критическая ошибка
     {
      if(AlertWork==false)   // Если Алерта еще не было
        {  Alert("Критическая ошибка. Эксперт не работает."); AlertWork=true; }
      return;
     }                        

どのように、しかし、あなたは一度もアラートを表示する必要がない、それぞれ、フラグをリセットする必要があります。

 

こんにちは、カスタムインジケータの プログラムについて、インジケータをチャートに貼り付けたときに余分な線(バッファ)が表示されないようにする方法を教えてください。


 
Alexey Kazmin:

こんにちは、カスタムインジケータの プログラムについて、インジケータをチャートに貼り付けたときに余分な線(バッファ)が表示されないようにする方法を教えてください。


これらのプロパティを使用する

#property indicator_buffers 5
#property indicator_plots   1
 
Vitaly Muzichenko:


不思議なものですね。昨日、今日と送信がうまくいかなかったのですが、先ほどうまくいき、メッセージが送信されました。全く何も変えなかったし、作り直しもしなかった。

 
Igor Makanu:

これらのプロパティを使用する

ありがとうございます、試してみます。

 
グラフィックオブジェクトについて混乱しています。CORNER_RIGHT_UPPERからX Y座標High[0]をピクセル単位で取得する方法が分かりませんか?int Xとint Yを計算する関数は何でしょうか?
 
Valeriy Yastremskiy:

なんとなくですが、アラートを複数回表示する必要があるため、フラグをリセットする必要があります。

   if(sizeBar && maxmin)
     {
      
                   while(true)
                   {
                         int ticket = OrderSend(Symbol(), OP_BUY, 0.01, Ask, 5, sl, tp);
                         if(ticket>0) break;                        
                   }      
             
     }

ふーん、そうなんだ

ポジションを持つための条件、例えば価格が手首より上にあること、そして買い注文を 出したとします。

この条件は長期間にわたって真となり、各反復で次のコードによって注文が開始されます。

この状態で1つの注文を開けばそれで済むようにするには、どうすればよいのでしょうか?

 
a.lxrn:

理解できない。

ポジションを開くための条件があり、価格が手首より高くなるはずで、買い注文が 開かれると仮定してみましょう。

この条件は長期間にわたって真となり、各反復で次のコードによって注文が開始されます。

この状態で1つの注文を開けばそれで済むようにするには、どうすればよいのでしょうか?

新規注文の条件が真で、新規注文フラグが偽の場合、注文を開き、新規注文フラグを真に設定します。
 
a.lxrn:

理解できない。

ポジションを開くための条件があり、価格が手首より高くなるはずで、買い注文が 開かれると仮定してみましょう。

この条件は長期間にわたって真となり、各反復で次のコードによって注文が開始されます。

この状態で1つの注文を開けばそれで終わりとしたいのですが、どのようにすればよいのでしょうか?

新規注文の条件が真で、新規注文フラグが偽の場合、注文を開き、新規注文フラグを真に設定します。
 

オーダー削除

コードにエラーがあるようなので、教えてください。コンパイラもテスターもエラーを表示しないが、制限が削除されない...。

void OnTick()
            
      if (Low[1] < val2 && BUY() == 0 && BUYLIMIT1() == 0 && BUYLIMIT2() == 0)

      {
      
      SL = NormalizeDouble(Ask - StopLoss*Point, 5);
      TP = NormalizeDouble(Ask + TakeProfit*Point, 5); 
          
      ticket = OrderSend(Symbol(), OP_BUY, Lots, price, 3, SL, TP, "EU buy", Magic, 0, Red);
      
      if(ticket<0)
         Print("Не удалось открыть ордер");
      }
            
      {
      if (BUY() == 1 && BUYLIMIT1() == 0 && BUYLIMIT2() == 0)
      {
      
      SL = NormalizeDouble(price1 - StopLoss1*Point, 5);
      TP = NormalizeDouble(price1 + TakeProfit1*Point, 5); 
     
      ticket1 = OrderSend(Symbol(), OP_BUYLIMIT, Lots1, price1, 3, SL, TP, "EU buy", Magic1, 0, Red);
      

            {
            if (BUY() == 0 && BUYLIMIT1() == 1)
            {
            for(int i=OrdersTotal()-1; i>=X; i--)
            if(OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES)&&
               OrderType() == OP_BUYLIMIT &&
               OrderMagicNumber()==Magic1)
               {
            res=OrderDelete(OrderTicket(),clrWhite);
               Print("OrderDelete error ",GetLastError());
               }
              return;}
      } } }
      
      {
      if (BUYLIMIT1() == 1 && BUYLIMIT2() == 0)
      {
      
      SL = NormalizeDouble(price2 - StopLoss2*Point, 5);
      TP = NormalizeDouble(price2 + TakeProfit2*Point, 5); 

      ticket2 = OrderSend(Symbol(), OP_BUYLIMIT, Lots2, price2, 3, SL, TP, "GU buy", Magic2, 0, Red);
      

            {
            if (BUY1() == 0 && BUYLIMIT2() == 1)
            {
            for(int i=OrdersTotal()-1; i>=X; i--)
            if(OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES)&&
               OrderType() == OP_BUYLIMIT &&
               OrderMagicNumber()==Magic2)
               {
            res=OrderDelete(OrderTicket(),clrWhite);
               Print("OrderDelete error ",GetLastError());
               }
              return;}
      } } }     
      
                               
}


//+------------------------------------------------------------------+
int BUY()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic &&
         OrderType() == OP_BUY)
         {
         count++;
         }

     }
     return(count);
}

//+------------------------------------------------------------------+
int BUYLIMIT1()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic1 &&
         OrderType() == OP_BUYLIMIT)
         {
         count++;
         } 
     }
     return(count);
}

//+------------------------------------------------------------------+
int BUY1()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic1 &&
         OrderType() != OP_BUYLIMIT)
         {
         count++;
         } 
     }
     return(count);
}

//+------------------------------------------------------------------+
int BUYLIMIT2()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic2 &&
         OrderType() == OP_BUYLIMIT)
         {
         count++;
         }
     }
     return(count);
}

//+------------------------------------------------------------------+
int BUY2()
{
   int count = 0;
   for(int i=OrdersTotal()-1; i>=X; i--)
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true &&
         OrderMagicNumber() == Magic2 &&
         OrderType() != OP_BUYLIMIT)
         {
         count++;
         }
     }
     return(count);
}