ゼロバーでオープンポジションがあるか、あった かをチェックする関数の書き方(できれば時間枠の選択も。OpenPosLastBar(string sym="", int tf=0, int op=-1, int mn=-1)、またはこの関数がそうします。私の理解では、現時点ではポジションを開くだけですが、開いていて既に閉じている場合は-1を返します。
//+----------------------------------------------------------------------------- //| 最後に開いたポジションのバー番号または-1を返します。| //| パラメータ。| //| sym - 楽器名 ("" - 現在のシンボル ) | //| tf - 時間枠 ( 0 - 現在の時間枠 ) | //| op - 操作 (-1 - 任意の位置 ) | //| mn - MagicNumber (-1 - 任意のマジック ) | //+--------------------------------------------------------+ int NumberOfBarLastPos(string sym=")", int tf=0, int op=-1, int mn=-1) { datetime oot; int i, k=OrdersTotal();
drknn>>: Нужно два цикла. В первом проходим по истории ордеров, во втором - по текущим ордерам. В обоих случаях если время открытия ордера больше или равно Time[0], то ордер был открыт на текущей свече. Это справедливо для всех таймфреймов.
またまた初心者からの質問です。
Expert Advisor では、いくつかのユーザー定義関数を使用しています。これらの関数をライブラリにまとめて、Expert Advisor 本体でそこから呼び出すようにするには、どうすればよいでしょうか。
この点については、私は言語の構文に詳しくないのです。
ドキュメントやチュートリアルのセクションを参照してください。そこでは見つかっていないんです。
https://book.mql4.com/ru/build/structure
https://www.mql5.com/ru/articles/1462
+ 最後に...https://book.mql4.com/ru/appendix/examples
ゼロバーでオープンポジションがあるか、あった かをチェックする関数の書き方(できれば時間枠の選択も。OpenPosLastBar(string sym="", int tf=0, int op=-1, int mn=-1)、またはこの関数がそうします。私の理解では、現時点ではポジションを開くだけですが、開いていて既に閉じている場合は-1を返します。
//+-----------------------------------------------------------------------------
//| 最後に開いたポジションのバー番号または-1を返します。|
//| パラメータ。|
//| sym - 楽器名 ("" - 現在のシンボル ) |
//| tf - 時間枠 ( 0 - 現在の時間枠 ) |
//| op - 操作 (-1 - 任意の位置 ) |
//| mn - MagicNumber (-1 - 任意のマジック ) |
//+--------------------------------------------------------+
int NumberOfBarLastPos(string sym=")", int tf=0, int op=-1, int mn=-1)
{
datetime oot;
int i, k=OrdersTotal();
if(sym==")
sym=Symbol();
for(i=0; ik; i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==sym)
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(op0 || OrderType()==op)
{
if(mn0 || OrderMagicNumber()==mn)
{
if(ootOrderOpenTime()) oot=OrderOpenTime();
} (以下略。
}
}
}
}
}
return(iBarShift(sym, tf, oot, True));
}.
//+----------------------------------------------------------------------------+
Нужно два цикла. В первом проходим по истории ордеров, во втором - по текущим ордерам. В обоих случаях если время открытия ордера больше или равно Time[0], то ордер был открыт на текущей свече. Это справедливо для всех таймфреймов.
クリックありがとうございます。コードにこのように書いてもらうことは可能でしょうか
Спадибо, что аткликнулся. А можно попросить это в коде
以下は、歴史の一節の例である。
特に、目の前にアルゴリズムと既成の例があるのだから、自分なりのコードを考えてみてください。
ObjectDelete(a_name_0)を実行。
ObjectCreate(a_name_0,OBJ_ARROW, a_window_8, a_datetime_12, a_price_20) を実行します。
ObjectSet(a_name_0, OBJPROP_ARROWCODE, ai_28)です。
ObjectSet(a_name_0, OBJPROP_COLOR, a_color_32)とする。
ObjectSet(a_name_0, OBJPROP_WIDTH, a_width_36);
}
void _setabuy(文字列as_0){。
g_str_concat_356 = StringConcatenate(as_0, gi_120);
seta(g_str_concat_356, 0, TimeCurrent(), Bid + 15.0 * Point, SYMBOL_ARROWUP, Blue, 2)を実行。
gi_120++です。
}
void _setasell(文字列as_0){。
g_str_concat_356 = StringConcatenate(as_0, gi_120);
seta(g_str_concat_356, 0, TimeCurrent(), Bid - 15.0 * Point, SYMBOL_ARROWDOWN, Red, 2)を実行。
gi_120++です。
}
Вот пример прохода по истории
Попробуйте самостоятельно придумать код, тем более, что алгоритм и готовый пример у Вас перед глазами.
ありがとうございます。試してみます。
Вот пример прохода по истории
Попробуйте самостоятельно придумать код, тем более, что алгоритм и готовый пример у Вас перед глазами.
あるいは、現在のバーでポジションがオープンされたかどうかをチェックする関数です(OrdersTotal()とOrdersHistoryTotal()のチェック付き)。Type注文がオープンされた場合、trueを返します。
その条件を実現する方法を教えてください。
もし(保留中の注文が ある場合)、あれやこれやとやってみましょう。