intstart(){//---- Запоминаем значения индикатора для дальнейшего анализа//---- Обратите внимание - используем 1-й и 2-й бары. Это даёт задержку в 1 бар //---- (т.е. сигнал появится позже), но защищает от многочисленных открытий и закрытий//---- позиций в течении бараdoubleMACD_1 = iMACD(Symbol(), 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 1);
doubleMACD_2 = iMACD(Symbol(), 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 2);
int_GetLastError = 0, _OrdersTotal = OrdersTotal();
//---- перебираем все открытые позицииfor(intz = _OrdersTotal - 1; z >= 0; z -- ){//---- если при выборе позиции возникла ошибка, переходим к следующейif( !OrderSelect(z, SELECT_BY_POS)){_GetLastError = GetLastError();
Print("OrderSelect( ", z, ", SELECT_BY_POS ) - Error #", _GetLastError);
continue;
}//---- если позиция открыта не по текущему инструменту, пропускаем еёif(OrderSymbol() != Symbol())continue;
//---- если MagicNumber не равен _MagicNumber, пропускаем эту позициюif(OrderMagicNumber() != _MagicNumber)continue;
//---- если открыта БАЙ-позиция,if(OrderType() == OP_BUY){//---- если МАКД пересёк 0-ю линию вниз,if(NormalizeDouble(MACD_1, Digits + 1) < 0.0 &&
NormalizeDouble(MACD_2, Digits + 1) >= 0.0){//---- закрываем позициюif( !OrderClose(OrderTicket(), OrderLots(), Bid, 5, Green)){_GetLastError = GetLastError();
Alert("Ошибка OrderClose № ", _GetLastError);
return(-1);
}}//---- если сигнал не изменился, выходим - пока рано открывать новую позицию
両側には保留中の注文が積み重なっている。もし、保留中の注文のいずれかがトリガされた場合、他方で一番外側の保留中の注文が削除されます。スクリーンショットでは、買い注文がトリガーされ、一番外側のショート注文が削除された場合の様子を示しました。
1つのポジションがトリガーされた場合、それを行っています。しかし、1つだけでなく3つのトリガーが同時に発生したらどうでしょう?つまり、何らかの方法でトリガーされた保留注文の数を推定し、反対側のシグナルの保留注文を決済する必要があるのです。
どうすればいいのでしょうか?もしかしたら、この点はすでに誰かが実装しているかもしれませんね。この質問を別の枝に投稿することは決めていません。 おそらく、この点をよく理解している人にとっては、とても簡単なことでしょう。
最安値の1ポジションだけを削除する必要があれば、最安値でオープンしたポジションを探し、ループ内で削除すればよいのですが、複数のポジションがある場合はどうすればよいのでしょうか。すでにオーダーグリッドを経験されている方のご意見を伺えればと思います。
ここで質問なのですが、MT-5テスターの速度を異なるプロセッサーでテストされた方はいらっしゃいますか?
もしそうなら、リンクを教えてください。せめて、AMDとINTELの上位プロセッサのうち、どちらが速度的に優れているか教えてください。
もちろん、ノートパソコンやスーパーコンピュータではなく、デスクトップパソコンの話です。:-)
ここで質問なのですが、MT-5テスターの速度を異なるプロセッサーでテストされた方はいらっしゃいますか?
もしそうなら、リンクを教えてください。せめて、AMDとINTELの上位プロセッサのうち、どちらが速度的に優れているか教えてください。
もちろん、ノートパソコンやスーパーコンピュータではなく、デスクトップパソコンの話です。:-)
Everything on five is here :https://www.mql5.com/ru/forum
ビクターでは、下位のものが削除されると、次に下位となったものも同じ条件で削除されます。速さはあなたのためにある。プログラムにとって最も重要なことは、同じ刻みにならないことだが、これはOKだ!ぜひお試しください。
ボリス それは理解できる。ちょうどこんなことを考えていたんです。トリガーされた注文の値を格納する変数に 0から ループを開始し、必要な注文を見つける機能を実行し、ループの反復ごとに閉じるようにすればいいと思います。このプロシージャが今現在実行されていることをどう修正すればいいのかがわかりません。
ところで、標準の検索機能で最も極端な注文を検索し、注文のオープン 時間と価格の値を注文を閉じる関数に渡すのが良いのではないでしょうか?
両側には保留中の注文が積み重なっている。もし、保留中の注文のいずれかがトリガされた場合、他方では一番外側の保留中の注文が削除されます。スクリーンショットでは、買い注文がトリガーされ、一番外側のショート注文が削除された場合の様子を示しました。
1つのポジションがトリガーされた場合、それを行っています。しかし、1つだけでなく3つのトリガーが同時に発生したらどうでしょう?つまり、何らかの方法でトリガーされた保留注文の数を推定し、反対側のシグナルの保留注文を決済する必要があるのです。
どうすればいいのでしょうか?もしかしたら、この点はすでに誰かが実装しているかもしれませんね。この質問を別の枝に投稿することは決めていません。 おそらく、この点をよく理解している人にとっては、とても簡単なことでしょう。
最安値の1ポジションだけを削除する必要があれば、最安値でオープンしたポジションを探し、ループ内で削除すればよいのですが、複数のポジションがある場合はどうすればよいのでしょうか。まあ、オーダーグリッドを扱った経験のある方のご意見を伺えれば幸いです
もし私が間違っていなければ、私はいくつかのペアの保留中の注文の助けを借りて、良い動きをしようとしています。
削除アルゴリズム :
1)オープンポジションのリストを掘り、そのスロットを書く(覚える)。
2) 設定された保留中の注文のリストを見て、ポーズのリストに一致するスライダーがあるかどうかを確認し、一致すれば-保留中の注文を削除します。
そして、もう痛みはない。
例えば、あなたが古いプログラマーであったり、コーディングについて何も知らなかったり、何でもかんでも違う方法でやるのは流行りすぎだったりするとしたら???? а ?
ここで質問なのですが、MT-5テスターの速度を異なるプロセッサーでテストされた方はいらっしゃいますか?
もしそうなら、リンクを教えてください。せめて、AMDとINTELの上位プロセッサのうち、どちらが速度的に優れているか教えてください。
もちろん、ノートパソコンやスーパーコンピュータではなく、デスクトップパソコンの話です。:-)
5では、クラウドをテストに使い、たとえマルチコアで高速なプロセッサであっても、そのことは忘れてください。本当に何倍もスピードアップします。でも、1円でも払う必要があります。実は、ここでもいつの間にか議論が始まっていて
皆さん、ごきげんよう。
私の質問は簡単なようですが、すべての記事を掘り下げましたが、答えを見つけることができませんでした -return(-1)演算 子はどのように機能するのでしょうか?どこに制御を渡すのか?例えばこのコードでは
else return(0);
ゼロを括弧で囲んだ場合と括弧をつけない場合では、すべてがクリアに見える。しかし、(-1)はどうでしょう。
ご返信ありがとうございます。:)
ボリス なるほどね。ちょうどこんなことを考えていたんです。0から トリガーされた注文の値を格納する変数まで ループし、ループの反復ごとに必要な注文を検索して閉じる関数を実行すればいいと思います。しかし、現在このプロシージャが実行されていることをどのように修正すればよいのか、よくわかりません。
ついでに言うと、標準の検索機能で一番極端な注文を検索して、建値と価格を関数に渡して注文を決済するのがいいんですよね?