//+----------------------------------------------------------------------------+//| Версия : 19.05.2008 |//| Описание : Возвращает флаг закрытия последней позиции по тейку. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
datetime t;
double ocp, otp;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
otp=NormalizeDouble(OrderTakeProfit(), dg);
if (ocp==otp) return(True);
}
return(False);
}
こんにちは、どなたか問題を解決する手助けをしてください。
私は、テイクプロフィットで最後のポジションの終値フラグを返すクリマブロックを持っており、ストップでも同じです。
が、私の使い方はこうです。
そして、最初はすべてが計画通りに進み、ロット4で私が必要とするものと、この1つが開かれます。
何に使うのかがわからない。
明瞭にするため
何に使うのかがわからない
そうなんです。
最初のチェック(total==1)は、オーダーがまだ1の時に行われる。ブロックの中には、最後に閉じた売り→開き、最後に閉じた買い→再び開くがあります。これで注文は3件になりました。
ええ、その通りです。
最初のチェック(total==1)は、オーダーがまだ1の時に行われる。ブロックの中には、最後に閉じた売り→開き、最後に閉じた買い→再び開くがあります。この結果、すでに3件の受注があります。
はい、しかし、それは2つだけの注文だった作る方法、それは番号6の下に順序を開くことはありません。
最も簡単な方法は、買いまたは売りのタイプの未決済注文があるかどうかを確認することです。このようにします (変数 BuyOrders, SellOrders, TotalOrders はプログラムのグローバル変数 です。これらは start() 関数の中で int BuyOrders, SellOrders, TotalOrders; として宣言する必要があります)。:
最も簡単な方法は、買いまたは売りの未決済注文を確認することです。これを持って。
使い方がよくわからないのですが......よろしくお願いします。
使い方がよく分からないので、できれば助けてください。
3ケースで買って1ケースで売るという開き方でいいんですか?左右対称でない...。そうしますが、あなたのコードのロジックはまだ理解できません。
3つのケースで売りポジションを、1つのケースで買いポジションを建てるというのは確かですか?左右対称でない...。手伝いますが、あなたのコードのロジックはまだ理解していません。
市場にポジションがないときにオープンし、いずれかの値が正しい場合、1つのオーダーをオープンし、ポジションがクローズするのを待つようにしたいのです。
市場にポジションがない場合のみオープンし、選択した値の1つが正しい場合、1つのオーダーをオープンし、ポジションがクローズするのを待つようにしたいのです。
つまり、買い注文が 2つあって、売り注文がない場合があることが判明したのですね。
Figar0:
Т.е. получается что возможна ситуация когда у вас будет 2 ордера на покупку и не одного на продаж
その逆はありません。ポジションはストップやキーパーなしの売りも含めて2つだけであるべきで、ステートメントにはその仕組みが示されています。
そうすると、すべてがもっと複雑になります。 アルゴリズムがどのように機能すべきかを言葉で説明してください、私はそれを見ている間、あなたを助けようとします)
- 2ポジション同時使用可能。
- まず、買いと売りの2つのポジションをオープンします。
- ロングポジションをストップロスで決済→SLとTPを3倍にしたショートポジションを建てた場合、通常のSLとTPの売りポジションと、3倍のTPの売りポジションの2つが得られます。
次は?