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

 
Vitalie Postolache:


バランスに例えると、そういうことです。

ありがとうございます。

 
trader781:

OK、それなら私の理解では、(3つの異なるパラメータを探せば)正しいものを返した3つの異なるカスタム関数が得られます

アレイソート

では

右の数字でArrayBsearch

と、その後にどう対処するか?

まさに配列から構造体要素への移行

わかっていないようですね。

グローバルに宣言された配列への 入力とソートを 行う関数を1つ作る必要があります。この配列は、関数に参照渡しする必要があります。

そして、この配列から必要なデータを取り出す関数が追加で必要です。

 
Artyom Trishkin:

わかっていないようですね。

グローバルに宣言された配列を埋めてソート する関数を1つ作る必要があります。この配列は、関数に参照渡しする必要があります。

そして、この配列から必要なデータを取り出す関数が追加で必要です。

OK、構造体の配列から何かを取り出す方法を教えてください。

参照と書き込みによる転送の方法。

 

どのような状態であればよいのか、アドバイスをお願いします。ストップロスが発生した場合、ロットは2倍になり、次の注文でテイクプロフィットが 発生すると、ストップロス発生前の元のロットに戻ることになります。

こんな風に理解しているのですが、この先どうしたらいいのか......。

for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
   if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)
      {
      if (OrderMagicNumber()==magic)
         {
         if (OrderStopLoss()==OrderClosePrice())
            {
            lot=lot*4;
            }
         }
      }

   } 

 

もう一つの質問ですが、注文の削除ブロックに何か間違ったことを書いてしまったのでしょうか?

OrderDelete error 4108
market order #1 cannot be deleted

if (Hour()==23 && Minute()==59)            
         {
         for(int n=OrdersTotal()-1;n>=0;n--)
            {
            if(OrderSelect(n,SELECT_BY_POS))
               {
               if(OrderMagicNumber()==magic)
                  {
                  bool del=OrderDelete(OrderTicket());
                  if (del==true)
                     {
                     otl_b=0; otl_s=0; //обнуляем переменные отложек
                     }
                  
                  }  
               }  
            }
         }
 
wishmast:

もう一つ質問ですが、注文を削除するブロックに何を書き間違えたのでしょうか? いつも注文が削除されるわけではなく、ログによると

OrderDelete error 4108
market order #1 cannot be deleted

if (Hour()==23 && Minute()==59)            
         {
         for(int n=OrdersTotal()-1;n>=0;n--)
            {
            if(OrderSelect(n,SELECT_BY_POS))
               {
               if(OrderMagicNumber()==magic)
                  {
                  bool del=OrderDelete(OrderTicket());
                  if (del==true)
                     {
                     otl_b=0; otl_s=0; //обнуляем переменные отложек
                     }
                  
                  }  
               }  
            }
         }


成行注文を削除しようとしていますが、削除されるわけではなく、OrderClose()関数を使用して閉じられるのです。ループを正しく削除したり閉じたりするためには、その型によって順序を区別する必要があります。

if(OrderType()<=OP_SELL) - 成行注文の場合、 if(OrderType()>OP_SELL) - 保留注文の場合。

 

CHARTEVENT_MOUSE_MOVE というものがあります。

質問:マウスがないモバイル機器でも使えるのでしょうか?

 
wishmast:

どのような状態であればよいのか、アドバイスをお願いします。ストップロスが発生した場合、ロットは2倍になり、次の注文でテイクプロフィットが 発生すると、ストップロス発生前の元のロットに戻ることになります。

こんな風に理解しているのですが、この先どうしたらいいのか......。

for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
   if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)
      {
      if (OrderMagicNumber()==magic)
         {
         if (OrderStopLoss()==OrderClosePrice())
            {
            lot=lot*4;
            }
         }
      }

   } 

さっそくやってみると、最後の負け注文が表示され、それをどうするか、どのパラメータを修正すればいいか、理解できると思います。
ファイル:
last1.mq4  4 kb
 
wishmast:

どのような状態であればよいのか、アドバイスをお願いします。ストップロスが発生した場合、ロットは2倍になり、次の注文でテイクプロフィットが 発生すると、ストップロス発生前の元のロットに戻ることになります。

こんな風に理解しているのですが、この先どうしたらいいのか......。

for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
   if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)
      {
      if (OrderMagicNumber()==magic)
         {
         if (OrderStopLoss()==OrderClosePrice())
            {
            lot=lot*4;
            }
         }
      }

   } 

この問題の解決はExpert Advisorの完全なロジックに依存し、そのコメントによってストップロスやテイクプロフィットのトリガーを追跡することができます。

  if(StringFind(OrderComment(),"sl")>=0)// сработал стоплосс
  if(StringFind(OrderComment(),"tp")>=0)// сработал тейкпрофит

...

 
Artyom Trishkin:

わかっていないようですね。

グローバルレベルで宣言された 配列を埋めてソート する関数を1つ作る必要があります。この配列は、関数に参照渡し する必要があります。

そして、この配列から必要なデータを取り出す関数が追加で必要です。

アーテム あなたは間違っています。グローバルレベルで宣言された配列は、プログラムのすべての部分で見ることができ、どこかからどこかに渡す必要はないのです。プログラムのある場所で記入され、別の場所でソートされ、3番目で読まれるだけで、どうということはない。