初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 672

 
fxsaber:
ありがとうございます!!!
 

マーチンゲールベースで動作するEAを書いています。

1つの通貨ペアでpips単位の最大許容損失額に達したときに、開いた注文をすべて閉じるようにするにはどうすればよいですか?

 
RichLux:

マーチンゲールベースで動作するEAを書いています。

1つの通貨ペアでpips単位の最大許容損失額に達したときに、開いた注文をすべて閉じるようにするにはどうすればよいですか?


double GetProfitinCurrency(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   double profit=0;
   int    i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic)
                 {
                  profit+=OrderProfit()+OrderCommission()+OrderSwap();
                 }
              }
           }
        }
     }
   return(profit);
  }


この関数は、オープンポジションの利益を返すもので、シンボル、タイプ、マジックでフィルタリングすることができます。

その後、すべてのポジションをクローズします。

void CPD(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   int i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),1,CLR_GREEN);
              }
           }
        }
     }
  }
 
Vladislav Andruschenko:

...

は、10月のポーズで利益を返す関数で、シンボル、タイプ、マジックを使ってフィルタリングすることができます。

その後、すべてのポジションを閉じる

ありがとうございます。しかし、私は損切りに興味があります。どうすれば実現できるのか?
 

つまり、上記をあげました。

つまり、利益とは総称なのです。

-20は-20

if(GetProfitinCurrency(Symbol(),-1,-1)<-20)CPD(Symbol(),-1,-1)

 
Vladislav Andruschenko:

double GetProfitinCurrency(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   double profit=0;
   int    i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic)
                 {
                  profit+=OrderProfit()+OrderCommission()+OrderSwap();
                 }
              }
           }
        }
     }
   return(profit);
  }

ありがとうございます、わかりました。

コードでまだはっきりしないのは、(order_type<0||OrderType()==order_type) THISは「and order to sell or buy」と読めるか、ということです。

 
RichLux:

yesorder_type= OP_BUY OP_SELL -1

 

また、コンパイラはClosePosBySelectについて 文句を言う。

この機能は別に書く必要があるのでしょうか?

 
このトピックに関係のないコメントは、「現在時刻をグラフに表示する」に移動しました。
 

ウラジスラフ・アンドルシェンコ

RichLux:

また、コンパイラはClosePosBySelectについて 文句を言う。

この機能は別に書く必要があるのでしょうか?

void CPD(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   int i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),1,CLR_GREEN);
              }
           }
        }
     }
  }
理由: