//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 29.03.2013 |//| Описание : Возвращает цену открытия позиции или ордера по размеру лота. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ( "" - любой символ, |//| NULL - текущий символ) |//| op - торговая операция ( -1 - любая операция) |//| mn - MagicNumber ( -1 - любой магик) |//| lo - лот ( 0 - любой лот) |//+----------------------------------------------------------------------------+double GetOpenPriceByLot(string sy="", int op=-1, int mn=-1, double lo=0) {
double p=0;
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
if ((op<0 || OrderType()==op) && OrderType()<6) {
if (lo==0 || lo==NormalizeLot(OrderLots())) p=OrderOpenPrice();
}
}
}
}
return(p);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 29.03.2013 |//| Описание : Возвращает тикет позиции или ордера по размеру лота. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ( "" - любой символ, |//| NULL - текущий символ) |//| op - торговая операция ( -1 - любая операция) |//| mn - MagicNumber ( -1 - любой магик) |//| lo - лот ( 0 - любой лот) |//+----------------------------------------------------------------------------+int GetTicketByLot(string sy="", int op=-1, int mn=-1, double lo=0) {
int i, k=OrdersTotal(), t;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
if ((op<0 || OrderType()==op) && OrderType()<6) {
if (lo==0 || lo==NormalizeLot(OrderLots())) t=OrderTicket();
}
}
}
}
return(t);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 25.01.2012 |//| Описание : Возвращает время открытия первой открытой позиций. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+datetime TimeOpenFirstPos(string sy="", int op=-1, int mn=-1) {
datetime t=TimeCurrent();
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t>OrderOpenTime()) t=OrderOpenTime();
}
}
}
}
}
}
return(t);
}
アンドレイさん、こんにちは。
アンドレイさん、こんにちは。
GetOpenPriceByLot()関数です。
この関数は、ポジションまたは注文の開始価格をロットサイズごとに返します。考慮すべき位置の選択は、外部パラメータで指定する。
GetTicketByLot()関数です。
この関数は、ポジションまたは注文のチケットをロットサイズ別に返します。考慮する位置の選択は、外部パラメータで指定する。
ZS. GetTicketByLot()関数をテストするスクリプトを添付しています。
イゴールさん、こんにちは。
新しい機能、そして迅速な対応、本当にありがとうございました。すべてが非常に良い。この関数は、例えば、条件によるチケットの並び順を返すもので、外部変数で設定するか、使用しないかを選択することができます。ここのセリフがちょっと曖昧なんですよね。
if ((op<0 || OrderType()==op) && (OrderType()>1 && OrderType()<6)))
ここでは、if 文の条件、すなわち、外部変数<0であれば、どのオーダータイプも利用できる、または、関数呼び出しに例えばOP_BUYと書けば、OP_BUYのオーダーから選択されることをチェックしています。この条件は明確ですが、さらに&&で 書かれた同等の条件として、OrderType()は保留中の注文の範囲、つまり1から5までの範囲でなければならないというものがあります。私たちのOP_BUY型はこの範囲に含まれないので、演算子の条件はfalseでなければならず、制御はif-else演算子に続く演算子、つまり私には言い難いのですが、巻き線のボディ矢印の後ろのどこかに渡されなければなりません。ここでは、成行注文の条件と、同種の保留注文の機能を別に指定するのが良いように思います。つまり、成行注文から選択したいが、その種類が分からない場合、外部変数<0を取り、0から1までの条件を書き込む関数を指定する。 保留注文も同様である。そこで、この便利な条件を使うときは、注文の種類のカテゴリーごとに別の関数を使うべきだという結論に達しました。
また、ライブラリの接続に問題があります。検索して読んでみたのですが、私が書いているEAをコンパイルする際に接続がエラーになります。私はまだこれに対処する時間がなく、収益性の高いExpert Advisorをより速く書きたいので、必要な3つのライブラリをすべてコピーして特殊関数start()の後に添付し、それらのグローバル変数を EAのグローバル変数に配置し、それらへの参照をコメントアウトしています。あまり便利ではありませんが、効果はあります。ここのセリフがちょっと曖昧なんですよね。
if ((op<0 || OrderType()==op) && (OrderType()>1 && OrderType()<6)))
ありがとうございました。修正されました...これは、コピー、つまり指値と逆指値注文 でのみ動作するように意図された別の関数のプリフォームを使用することの結果です。
また、ライブラリの接続に問題があります。検索して読みましたが、私が書いているExpert Advisorをコンパイルする際に、接続でエラーが発生します。私はそれを理解する時間がなく、収益性の高いExpert Advisorをより速く書きたいので、必要な3つのライブラリをすべてコピーして特殊関数start()の後に添付し、それらのグローバル変数をグローバルEA変数に置き、それらへの参照をコメントアウトしています。あまり便利ではありませんが、効果はあります。
ちなみに、私はMQHファイルという形で自分のライブラリは使っていません。私は通常、必要な機能をEAにコピーします。つまり、私の標準的な既製のEAは、1つのMQ4ファイルです。必要なものはすべてこのファイルの中にある。たしかに、コードには繰り返しの部分がありますね。ただし、機能のバージョンについては問題ありません。
ところで、各関数のテストスクリプトが用意されていますが、そこには必要な追加関数がすべて含まれており、関数と一緒にEAに追加するだけで1つのファイルにまとまり、余計なものは何もありません。機能はシンプルで便利ですが、許可を得て、ポジション用とストップ用を2つずつ、計4つ自分用に作ってみようと思います。私のEAのデリケートな要求に対して、より普遍的なものになるはずです。でも今は、こんなに簡単にできるんだ、と思っています。イゴール ありがとうございました。
アンドレイさん、こんにちは。
TimeOpenFirstPos()関数です。
この関数は、最初のオープンポジションの時刻を返す。考慮すべき位置の選択は、外部パラメータで指定する。
こんにちは
SetRegression()(https://www.mql5.com/ru/forum/107476/page35)チャンネルにfoebaを追加する方法です。
こんにちは
SetRegression()(https://www.mql5.com/ru/forum/107476/page35)チャンネルにfoebaを追加する方法です。
ダック、簡単だよ。