//-------------------------------------------------------------------+ // удаляет отложенные ордера по type + //+------------------------------------------------------------------+
void DeleteOrders(int type) { int cnt = OrdersTotal(); for (int i=cnt-1; i>=0; i--) { if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; //По желанию if (OrderSymbol() != Symbol()) continue; //По желанию if (OrderMagicNumber() != mn) continue;
if (OrderType() != type) continue;
if (type == OP_BUYSTOP || type == OP_SELLSTOP) { bool Del_1 = OrderDelete(OrderTicket()); if(!Del_1) Print("Ошибка удаления ордера. Код ошибки=",GetLastError()); else Print("Ордер успешно удален."); } if (type == OP_BUYLIMIT || type == OP_SELLLIMIT) { bool Del_2 = OrderDelete(OrderTicket()); if(!Del_2) Print("Ошибка удаления ордера. Код ошибки=",GetLastError()); else Print("Ордер успешно удален."); } } } //+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 16.06.2008 | //| Описание : Удаление ордеров, противоположных позиции | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ void DeleteOppositeOrders(string sy="", int op=-1, int mn=-1) { bool eb, es;
//-------------------------------------------------------------------+ // удаляет отложенные стоп ордера SELLSTOP или BUYSTOP по type + //+------------------------------------------------------------------+
void DeleteOrders(int type) { int cnt = OrdersTotal(); for (int i=cnt-1; i>=0; i--) { if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; //По желанию if (OrderSymbol() != Symbol()) continue; //По желанию if (OrderMagicNumber() != mn) continue;
if (OrderType() != type) continue;
if (type == OP_BUYSTOP || type == OP_SELLSTOP) { bool Del_1 = OrderDelete(OrderTicket()); if(!Del_1) Print("Ошибка удаления ордера. Код ошибки=",GetLastError()); else Print("Ордер успешно удален."); } if (type == OP_BUYLIMIT || type == OP_SELLLIMIT) { bool Del_2 = OrderDelete(OrderTicket()); if(!Del_2) Print("Ошибка удаления ордера. Код ошибки=",GetLastError()); else Print("Ордер успешно удален."); } } } //+------------------------------------------------------------------+
タイプ別の棲み分けは?何をするものなのか?このように書くと違いが出てくるのでしょうか?
if (type > 1 && type < 6) { bool Del_1 = OrderDelete(OrderTicket()); if(!Del_1) Print("Ошибка удаления ордера. Код ошибки=",GetLastError()); else Print("Ордер успешно удален."); }
- последние четыре строчки в общем понятны, вопрос лишь в функции PlaySound, код которой необходимо вставить после каждой строчки "Print("..." в таком виде:
bool PlaySound(
string payment // ファイル名
)
; ...
それとも、
何らかの方法で変換されて
いるのでしょうか?
プログラムヘッダで bool PlaySound(
を
宣言する - セットファイルでサウンドのオン/オフをする機会があります extern bool Play = TRUE;
皆さん、ごきげんよう。EAで注文削除を設定する方法を教えてください。
状況は次のとおりです。
異なる方向に2つの未決済注文を 出し、片方がトリガーされると同時にもう片方は削除され、出品されなくなる。
ご教示いただければ幸いです。
ありがとうございます。
例えば、こんな感じです。
// удаляет отложенные ордера по type +
//+------------------------------------------------------------------+
void DeleteOrders(int type)
{
int cnt = OrdersTotal();
for (int i=cnt-1; i>=0; i--) {
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
//По желанию
if (OrderSymbol() != Symbol()) continue;
//По желанию
if (OrderMagicNumber() != mn) continue;
if (OrderType() != type) continue;
if (type == OP_BUYSTOP || type == OP_SELLSTOP)
{
bool Del_1 = OrderDelete(OrderTicket());
if(!Del_1)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
if (type == OP_BUYLIMIT || type == OP_SELLLIMIT)
{
bool Del_2 = OrderDelete(OrderTicket());
if(!Del_2)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
}
}
//+------------------------------------------------------------------+
そしてその前に、ポジションがあり、余分な 注文を殺す時であると判断すること
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 16.06.2008 |
//| Описание : Удаление ордеров, противоположных позиции |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" - любой символ, |
//| NULL - текущий символ) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//+----------------------------------------------------------------------------+
void DeleteOppositeOrders(string sy="", int op=-1, int mn=-1) {
bool eb, es;
switch (op) {
case OP_BUY : eb=ExistPositions(sy, OP_BUY , mn); break;
case OP_SELL: es=ExistPositions(sy, OP_SELL, mn); break;
default: eb=ExistPositions(sy, OP_BUY , mn);
es=ExistPositions(sy, OP_SELL, mn); break;
}
if (eb) {
DeleteOrders(sy, OP_SELLLIMIT, mn);
DeleteOrders(sy, OP_SELLSTOP , mn);
}
if (es) {
DeleteOrders(sy, OP_BUYLIMIT, mn);
DeleteOrders(sy, OP_BUYSTOP , mn);
}
}
一例を挙げると
// удаляет отложенные стоп ордера SELLSTOP или BUYSTOP по type +
//+------------------------------------------------------------------+
void DeleteOrders(int type)
{
int cnt = OrdersTotal();
for (int i=cnt-1; i>=0; i--) {
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
//По желанию
if (OrderSymbol() != Symbol()) continue;
//По желанию
if (OrderMagicNumber() != mn) continue;
if (OrderType() != type) continue;
if (type == OP_BUYSTOP || type == OP_SELLSTOP)
{
bool Del_1 = OrderDelete(OrderTicket());
if(!Del_1)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
if (type == OP_BUYLIMIT || type == OP_SELLLIMIT)
{
bool Del_2 = OrderDelete(OrderTicket());
if(!Del_2)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
}
}
//+------------------------------------------------------------------+
タイプ別の棲み分けは?何をするものなのか?このように書くと違いが出てくるのでしょうか?
{
bool Del_1 = OrderDelete(OrderTicket());
if(!Del_1)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
iPhoneのmt4とmt5でバーが違うのはなぜですか?バーの開店・閉店時間は同じですが。明らかに昨日の14:00にMT4でラインを突破するのを阻止しています。
iPhoneのmt4とmt5でバーが違うのはなぜですか?バーの開店・閉店時間は同じですが。昨日mt4で14:00にラインがブレイクしなかったので、これは明らかに障害になっています。
iPhoneのmt4とmt5でバーが違うのはなぜですか?バーの開店・閉店時間は同じですが。昨日の14:00にMT4でラインを割っていないので、明らかに干渉しています。
- последние четыре строчки в общем понятны, вопрос лишь в функции PlaySound, код которой необходимо вставить после каждой строчки "Print("..." в таком виде:
bool PlaySound(
string payment // ファイル名
)
; ...
それとも、何らかの方法で変換されて
いるのでしょうか?プログラムヘッダで bool PlaySound(
を宣言する - セットファイルでサウンドのオン/オフをする機会があります extern bool Play = TRUE;
では、Printは何を表示するのでしょうか?また、どのような条件下で?
この行為に何の意味があるのでしょうか?注文が成立したときに音を出したり、コメント(TPやSL)を書いたりしたいのですが?
ごあいさついろいろと聞いてみたが、まだ答えが見つかっていない。以下のエントリで、その理由を教えていただけませんか?
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}.
if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}.
システムが常にエラーを発生させる
: OrderDeletefunction のチケットが無効です。
: OrderDelete エラー 4051
参考文献によれば、それは
関数パラメータが無効な値 である
パラメータは同じようですが。
ただし、条件を外して
OrderDelete(ticketD)です。
OrderDelete(ticketUP)。
は正常に削除されます(ただし、条件付きで必要です)。何がいけなかったのか?その全貌をご紹介します。
https://www.mql5.com/ru/forum/160683/page31#comment_3911573
エキスパートアドバイザーは、過去X本のバーの最小値と最大値を読み取り、その値で注文を出します。そして、最大値や最小値が減少していれば、該当する注文を削除し、新しいデータを使って注文を出す必要があります。
まだ勉強を始めたばかりで、修正ではなく削除は機能を勉強するために行ったのですが、なぜうまくいかないのだろうと思いました。