MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 434

 
WinProject:

グラフィカルオブジェクトを削除 する方法を教えてください。変数値から名前が構成される縦線があります。

string name=="test1"; string Vertline="line_"+name; ObjectCreate(0,VertLine,OBJ_VLINE,0,time,cena); test1という名前の縦線だけを削除するにはどうしたらよいでしょうか?


この機能は便利です。

サブウィンドウ内の名前のプレフィックスで指定された型のオブジェクトをすべて削除する。

intObjectsDeleteAll()
longchart_id,// チャートID
const stringprefix,// オブジェクト名のプレフィックス
intsub_window=EMPTY,// ウィンドウのインデックス
intobject_type=EMPTY//削除するオブジェクトの種類
);

 
Vladislav Andruschenko:


この機能は便利です。

チャートサブウィンドウ内の名前のプレフィックスで指定されたタイプのオブジェクトを全て削除します。

intObjectsDeleteAll(
longchart_id,// )チャート識別子
const stringprefix,// prefixオブジェクト名
intsub_window=EMPTY,// ウィンドウインデックス
intobject_type=EMPTY// 削除するオブジェクトタイプ
);


ありがとうございます。私が理解する限り、この関数はプレフィックスをオブジェクト名の最初の部分文字列として理解しますが、オブジェクト名の2番目の部分文字列で削除するにはどうすればよいのでしょうか。この目的のために、オブジェクト名に対してStringSubstrと StringFindを使用する方法はありますか?

 
WinProject:

ありがとうございます。私が理解した限りでは、この関数はプレフィックスによってオブジェクト名の最初の部分文字列を理解しますが、オブジェクト名の2番目の部分文字列で削除するにはどうしたらよいでしょうか。この目的のために、オブジェクト名に対してStringSubstrとStringFindを使用する方法はありますか?


を待つ。

コードを指定しました。

string Vertline="линия_"+name; 


接頭辞があるところ。

それは誰もがやっていることです。

そこで、接頭辞でオブジェクトを削除する機能を提案したのです。


"линия_"

サフィックスで行を削除する必要がある場合、StringFind を使用してすべてのオブジェクトを検索することができます

例えば

void ObjectsDelete()
  {
string NameEA="суффикс";
   for(int i=ObjectsTotal();i>=0;i--)
     {
      if(StringFind(ObjectName(i),NameEA)!=-1)ObjectDelete(ObjectName(i));
     }
  }
 

Vladislavさん、ありがとうございます。フォーラムのメンバーの方々のおかげで、すべてがうまくいきました。面白いサイトができましたね、ありがとうございます

 

こんにちは。ポジションが表示された後、トローリングが停止してしまうのですが、原因を教えてください。

ポイントはこれです:2つのポジション1、2を開く。1つの価格で、最初はトロールによって閉じられ、2番目のトロールは、位置の開始 価格で、位置が1であるという条件で活性化されています。

すべてうまくいき、ポジション1がクローズし、ポジション2がトロールされるが、さらに2つのポジション3と4が異なる価格でオープンすると、トロールはポジション2には移動しない。

なぜ、トローリングができなくなるのか?

void Tral_SL_one(int _TrailingStop=0,int _TrailingStep=0)
  {
   if(_TrailingStop<=0)
      return;
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(!(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)))
         continue;
      if(OrderSymbol()!=Symbol())
         continue;
      if(OrderMagicNumber()!=_MagicNumber)
         continue;
      if(OrderType()==OP_BUY)
        {
         if(NumPosByPrice(Symbol(),OP_BUY,OrderOpenPrice(),_MagicNumber)==1)
           {
            if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(_TrailingStop *Point,Digits))
              {
               if(NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid -(_TrailingStop+_TrailingStep-1)*Point,Digits) || OrderStopLoss()==0)
                 {
                  if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-_TrailingStop*Point,Digits),OrderTakeProfit(),OrderExpiration()));
                   
                 }
              }
           }
        }

      if(OrderType()==OP_SELL)
        {

         if(NumPosByPrice(Symbol(),OP_SELL,OrderOpenPrice(),_MagicNumber)==1)
           {
            if(NormalizeDouble(OrderOpenPrice()-Ask,Digits)>NormalizeDouble(_TrailingStop *Point,Digits))
              {
               if(NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(Ask+(_TrailingStop+_TrailingStep-1)*Point,Digits) || OrderStopLoss()==0)
                 {
                  if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+_TrailingStop*Point,Digits),OrderTakeProfit(),OrderExpiration()));
                    
                 }
              }
           }
        }
     }
  }
//===
int NumPosByPrice(string sy="",int op=-1,double pp=0,int mn=-1) 
  {
   double px,py;
   int    d,i,k=OrdersTotal(),num=0;

   if(sy=="0") sy=Symbol();
   for(i=0; i<k; i++) 
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
        {
         if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) 
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) 
              {
               if(mn<0 || OrderMagicNumber()==mn) 
                 {
                  d=MarketInfo(OrderSymbol(),MODE_DIGITS);
                  px=NormalizeDouble(pp, d);
                  py=NormalizeDouble(OrderOpenPrice(), d);
                  if(pp<=0 || px==py) num++;
                 }
              }
           }
        }
     }
   return(num);
  }
 
mila.com:

こんにちは。ポジションが表示された後、トローリングが停止してしまうのですが、原因を教えてください。

ポイントはこれです:2つのポジション1、2を開く。1つの価格で、最初はトロールによって閉じられ、2番目のトロールは、位置の開始 価格で、位置が1であるという条件で活性化されています。

すべてうまくいき、ポジション1がクローズし、ポジション2がトロールされるが、さらに2つのポジション3と4が異なる価格でオープンすると、トロールはポジション2には移動しない。

なぜ、トローリングができなくなるのか?


私は重大な誤りを指摘するだけです。

   for(int i=0; i<OrdersTotal(); i++)
     {
      if(!(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)))
         continue;
      if(OrderSymbol()!=Symbol())
         continue;
      if(OrderMagicNumber()!=_MagicNumber)
         continue;
      if(OrderType()==OP_BUY)
        {
         if(NumPosByPrice(Symbol(),OP_BUY,OrderOpenPrice(),_MagicNumber)==1)


注文を経て、ポジション数をカウントする関数を実行し、それによってNumPosByPrice 関数で別のポジションを選択します。

ということで、さらに構築

 if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(_TrailingStop *Point,Digits))


は正しく動作しません。


これを解決する方法はたくさんあります。

例えば、こんな感じです。

void Tral_SL_one(int _TrailingStop=0,int _TrailingStep=0)
  {
   if(_TrailingStop<=0)
      return;
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(!(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)))
         continue;
      if(OrderSymbol()!=Symbol())
         continue;
      if(OrderMagicNumber()!=_MagicNumber)
         continue;
      if(OrderType()==OP_BUY)
        {
         if(NumPosByPrice(Symbol(),OP_BUY,OrderOpenPrice(),_MagicNumber)==1)
           {
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
            if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(_TrailingStop *Point,Digits))


これは根本的に間違っているのだが、手っ取り早く理解するためには、これで十分だろう。

の後です。


if(NumPosByPrice(Symbol(),OP_BUY,OrderOpenPrice(),_MagicNumber)==1)

を追加する。

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
 
Vladislav Andruschenko:


重大な誤りを指摘します。

これを解決する方法はたくさん あります。

ありがとうございます、なるほど、トロール)

 

mt4でアラートウィンドウを再び開く方法を教えてください。 以前、偽のシグナルを作成してアラートウィンドウを開くスクリプトがあったのですが、システムを再インストールした後、インターネット上でそれを見つけることができなくなりました。誰か持ってるかも?

 
amenrazp:

mt4でアラートウィンドウを再び開く方法を教えてください。 以前、偽のシグナルを作成してアラートウィンドウを開くスクリプトがあったのですが、システムを再インストールした後、インターネット上でそれを見つけることができなくなりました。誰か持ってるかも?

Alert(""); こんなスクリプト?
 
Vladislav Andruschenko:
Alert(""); こんなスクリプト?

そのようですね。ここに添付する方法はありますか?