どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 100

 
alexey1979621:
皆さん、こんにちは。ここで質問です。1本目、2本目、3本目のローソクのHighとLowの距離を測定し、各ローソクのこの距離が、例えば10ポイント以下であってはならないという条件を規定する方法です。よろしくお願いします。

以下は、マーケット環境変数です(https://docs.mql4.com/ru/predefined/variables)。
 
artmedia70:
ロボットの反乱...:)


あはははは。ヨスフ、 サイボーグの差し金か...。)))))))
 
artmedia70:

この機能をテストするEAを紹介します。関数そのものとその呼び出しが含まれています。呼び出す前に、最大4行のメッセージを用意する必要があります。1行の長さは、私の記憶が正しければ、64文字以内であるべきです。そのため、1つのメッセージを数行に分割しています。1つのメッセージの各行を異なる色で出力することができます。まずメッセージ行を用意し、それから関数を呼び出すのです。あまりそちらにはコメントしていないのですが......昔、一気に書き上げました。今はもう、何のためにあるのか忘れてしまいました。何か疑問があれば思い出しますが、今は必要なことしか覚えていません。

そして七面鳥。

そういうことなんだ...。コツをつかんでほしいですね。

もちろん、インジケーターのウィンドウでメインチャートに出力するのではなく、アンダーレイを作ればいいのですが、どうも億劫でして・・・。:)



Artemさん、あなたのコードを拝見しました、七面鳥は爆弾です: ))))。本質的には、すべてがmoreでクリアです。ただし、実装の際に、私ならこうする、というのと少し違う点がいくつかありましたが、それは些細なことです。

ここで興味深いことがあります。専門家にあるものだけがターキーに印刷される。でも、どう使えばいいのでしょうか?

 
hoz:


Artemさん、あなたのコードを拝見しました、七面鳥は爆弾です: ))))。実際、実装の際に、私とは少し異なる点がいくつか見受けられましたが、それは些細なことで、すべてがクリアになりました。

ここで興味深いことがあります。Expert Advisorにあるものだけが、ターンテーブルに印刷されます。でも、どう使えばいいんだろう?

質問の意味がわからない。Print()関 数の代わりとなるものです。すべてのメッセージをインジケータウィンドウに出力します。1つのメッセージの行ごとに色を設定することができます(メッセージの優先順位と同じ)。プリントより便利。便利なのはそれだけです。
 

機能である。その専門家は、その関数が何をするものかを示すためだけのものです。そこで、その機能を利用して EAからのメッセージを表示します。

その専門家は、使い方を示しているだけです。

 
artmedia70:

機能である。その専門家は、その関数が何をするものかを示すためだけのものです。そこで、その機能を利用して EAからのメッセージを表示します。

その専門家は、使い方を示しているだけです。


でも、そうなんです...。機能なんだ...考えているうちに、一番大事なことを見落としていました :(
 

新たな頭痛の種ができた。そのために必要なことを紹介します。

1.市場には数多くの注文が あり、すなわち市場には常に成行注文と未決済注文が存在します。

2.これまで開いた最後の注文がTPによって閉じられるある瞬間に、開いていたすべての注文を閉じ、保留中のものもすべて削除する必要があります。

私はこの方法でやりました(start() 関数に入れました)。

for (int ord=OrdersTotal()-1; ord>=0; ord--)
   {
      if (!OrderSelect(ord,SELECT_BY_POS)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
        
      g_ticket = OrderTicket();
      g_type = OrderType();
              
      // Блок модификации ордеров       
      if (i_sl != 0 || i_tp != 0)
      {
         if (OrderStopLoss() == 0 && OrderTakeProfit() == 0)
         {
            OrdersModifyer(g_ticket);
         }
      }
      // Закрытие всех ордеров, если последний ордер закрыт
      if (GetLastOrderState() != 0)              
      {
          if (g_type > 1)
          {
              DeletePendingOrders(g_ticket);
          }
          else
          {
              CloseMarketOrders(g_ticket);
          }
      }
   }

関数GetLastOrderState() は、最後の注文が締め切られているかどうかを調べます。

//+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
datetime GetLastOrderState()
{
   datetime lastOrderCloseTime = -1,                   // Время закрытия последнего ордера
            lastOrderOpenTime = -1;                    // Время открытия последнего ордера
   
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
  
      if (lastOrderOpenTime < OrderOpenTime())
          lastOrderOpenTime = OrderOpenTime();
   }
   Comment("Время открытия последнего открытого ордера = ", lastOrderOpenTime);
   for (int h=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(h, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      
      if (OrderOpenPrice() == lastOrderOpenTime)
          lastOrderCloseTime = OrderCloseTime();
   }
  // Comment("Время закрытия последнего открытого ордера = ", lastOrderCloseTime);
   return (lastOrderCloseTime);
}

そして、保留中の成行注文や決済注文を削除する機能。なるほど、なんとなく正しく動作していないような気がします。私の機能は大丈夫ですか?

機能がアイデア順であることは理解した。しかし、ここで理屈はOKではありません。このテーマについて、何かお考えがありますか?いずれにしても、EAのどの注文もTPで閉じていない場合でも、シグナルで開いた後はすべて瞬時に閉じてしまうことが判明しました...。

 
hoz:

あはははは。ヨスフ、 サイボーグの差し金か...。)))))))
それにしても、対応の良いプロジェクターですね。すべての問題が彼のものであるかのように、その運命が報われるために、疑いなく、あるいは、聖杯と 出くわすために。
 
yosuf:
それにしても、対応の良いプロジェクターですね。すべての問題が彼のものであるかのように、その運命が報われるために、疑いなく、あるいは、聖杯に出くわすのです。


しかし、具体的な内容はなく、したがって質問もなかった。何を答えたらいいのかわからない...。なるべくわかりやすく説明しないと、回答は得られません。
 
hoz:

新たな頭痛の種ができた。そのために必要なことを紹介します。

1.市場には数多くの注文があり、すなわち市場には常に成行注文と未決済注文が存在します。

2.これまで開いた最後の注文がTPによって閉じられるある瞬間に、開いていたすべての注文を閉じ、保留中のものもすべて削除する必要があります。

私はこの方法でやりました(start() 関数に入れました)。

関数GetLastOrderState() は、最後の注文が締め切られているかどうかを調べます。

そして、保留中の成行注文や決済注文を削除する機能。なるほど、なんとなく正しく動作していないような気がします。私の機能は大丈夫でしょうか?

機能がアイデア順であることは理解した。しかし、ここでは理屈は通用しない。このテーマについて、何かお考えがありますか?いずれにしても、EAのどの注文もTPでクローズしていなくても、シグナルでオープンした後はすべて一瞬でクローズしてしまうことが判明しました...。

Victorさん、TPでポジションがクローズされたかどうかをチェックする、試行錯誤したKimさんの関数を取り上げてみてください。

isCloseLastPosByTake - テイクの最後のポジションをクローズするフラグを返します。 便利な機能のみを検索する
そして、すべてを閉じる。