目利きの方に質問です - ページ 13

 
専門家の皆様、OrderCloseBy()関数を理解するのにお役立てください。完全に混乱しています。Expert Advisorを使用しており、逆行する条件でポジションをオープン、クローズします。つまり、OPEN BUYとCLOSE SELL、OPEN SELLとCLOSE BUYの条件は同じで、あるポジションを同じ価格で決済した直後に、同じ大きさで反対方向のポジションを建てるということです。そこで、OrderClose()の代わりに、ダブルボリュームで反対方向のポジションを建て、OrderCloseBy()で反対方向の注文を決済してみることにしたのです。つまり、同じアルゴリズムを適用しても、取引ごとにスプレッドが1つ節約できるはずですが、テスターでは全く異なる結果が表示されています。コードの書き方が間違っているのか、考え方を勘違いしているのか判断がつきません...。説明をしていただけるとありがたいのですが...。
 
まず、この機能が端末でサポートされているかどうか、証券会社のテクニカルサポートに確認してください。すべての証券会社でOrderCloseBy()関数を使用できるわけではありません。
 
デモではOrderCloseBy()がサポートされています。
 

私は専門家ではありません。私はこの機能に関するこのメモを、「正常な」もの全てに加えて、「ヘルプ」フォルダに置いています(ここにもコピーしました - どの枝か忘れました)-。

また、OrderCloseBy 関数は、2つの注文を同時に決済する場合にのみ使用され、その際、1つのスプレッドが保存されます。
プログラム的にターミナルを歩き、すべてのオープンオーダー番号とその特徴を記憶し、メインオーダー番号を選択し、希望(利用可能な中から)カウンターオーダーとマッチさせ、その番号を貼り付ける必要があります。


// つまり、この機能では、あらかじめ選択された2つのカウンタ位置しか閉じることができないのです。

それだけなんです。

 

ええ、まあ...

だから、そう呼ばれているんです。

 

ここで、次の2つの立場逆転の可能性に経済的な違いがあるのか、という問いに言い換えよう。

1)OrderClose 関数で売りを1ロットで決済し、その後買いを1ロットで建てる。

2) 1ロットのSELLが開いている間に、まず2ロットのBUYを開き、OrderCloseBy関数でSELLを閉じると、1ロットのBUYも空いたままになります。

ワークブックの例によると、2)バリアントでは1つのスプレッドが残ります。

 
つまり、1+1のスプレッドが補填され、残りの1が通常の取引スプレッドとなるのです。
 
https://book.mql4.com/ru/trading/orderclose -OrderCloseBy()関数の説明はこちらです。デモで同じことをやってみましたが、本当にスプレッドがかなり狭くなりますね。しかし、Expert Advisorではまだ動作しない...。私はとても混乱しています...
 
Dmirtiy писал(а)>>
https://book.mql4.com/ru/trading/orderclose - ここでは、OrderCloseBy()関数がどのように動作するかを見ることができます。デモで同じことをやってみましたが、本当にスプレッドが小さくなっていますね。しかし、Expert Advisorではまだ動作しない...。本当に困っています...。

この質問で2ちゃんねるに出没していますね。好奇心旺盛なんですね。

単純な解決策はありません。MQL5のリリースにより、この問題は完全に解消されます。

私がEAで使用しているいくつかの手順を提案することができます。

//未決済注文の現在の状態を検出する。

void CheckOrders()
{
int i;
BuyOrder = false。
SellOrder = false とした。
バイロット=0.0
SellLots = 0.0;

for ( i=0; i < オーダー合計(); i++)
{
OrderSelect(i, SELECT_BY_POS);
if ( OrderSymbol() == Symbol())
{
if ( OrderType() == OP_BUY ) )
{
BuyOrder = true。
LastBuyLots = OrderLots();
BuyLots += LastBuyLots; // 買いのポジションの総数
BuyTicket = OrderTicket();
}
if ( OrderType() == OP_SELL)
{
SellOrder = true。
LastSellLots = OrderLots();
SellLots += LastSellLots; // 売りポジションの総数
SellTicket = OrderTicket();
}
}
}
}

//Open (close) 命令。

void TradeVariant( int variant )
{
switch( variant )
{
// if (Pattern < 0 && !BuyOrder && !SellOrder && !FridayLastHour) variant = 1;
// 売りシグナル、注文はオープンでなく、金曜日の最終時間でもない。
// 売り注文を出す
ケース1
OpenSellOrder(Lots)です。
が壊れる。

// if (Pattern < 0 && BuyOrder && !SellOrder && !FridayLastHour) variant = 2;
// 売りのシグナルは、買い注文があり、売り注文はない。
// 金曜日の最後の時間ではありませんが、私たちは寝返りを打っています。
の場合 2.
OpenSellOrder(Lots+BuyLots)。
が壊れる。

// if (Pattern < 0 && BuyOrder && !SellOrder && FridayLastHour) variant = 3;
// 売りのシグナルは、買い注文があり、売り注文はない。
// 金曜日の最後の時間です - 買い注文を終了します。
ケース 3.
CloseBuyOrders()。
が壊れる。

// if (Pattern > 0 && !SellOrder && !BuyOrder && !FridayLastHour) variant = 4;
// 買いシグナル、注文はオープン、金曜日の最終時間ではない
// 買い注文を出す
ケース 4.
OpenBuyOrder(Lots)です。
が壊れる。

// if (Pattern > 0 && SellOrder && !BuyOrder && !FridayLastHour) variant = 5;
// 買いシグナル、売り注文があり、買い注文はない。
// 金曜日の最後の時間ではありませんが、私たちは寝返りを打っています。
ケース 5.
OpenBuyOrder(Lots + SellLots)。
が壊れる。

// if (Pattern > 0 && SellOrder && !BuyOrder && FridayLastHour) variant = 6;
// 買いシグナル、売り注文があり、買い注文はない。
// 金曜日の最後の時間帯に売り注文を終了します。
ケース 6.
CloseSellOrders()。
が壊れる。

case 7:
// if (SellOrder && BuyOrder) variant = 7;
// クロス注文をオープンしている
if (WaitBeforeTransaction(WaitSeconds) == 1) // リクエスト間に一時停止
{
if (LastBuyLots <= LastSellLots)
OrderCloseBy( BuyTicket, SellTicket);
else
OrderCloseBy( SellTicket, BuyTicket);
}
break

// 他のバリエーションでは何もしない
のデフォルトになります。
が壊れる。
}
}

変数で何とかしてほしい。

>> グッドラック!

 
Спасибо большое!