Статья посвящена программному отслеживанию событий в терминале МetaТrader 4, таких как открытие, закрытие и модификация ордеров, и рассчитана на пользователя, обладающего базовыми навыками работы с терминалом и программирования на MQL 4.
for(int pos=OrdersTotal()-1,ticket=0,trade=0;pos!=-1;pos--) { if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderType()>1)//Если найденный ордер отложенный { ticket=OrderTicket();//Запомним его тикет } else//Если ордер не отложенный { trade=1;//Запомним,что есть открытая позиция } if(ticket!=0 && trade==1)//И если известен отложенный и открыта позиция { int OD=OrderDelete(ticket);//Удаляем отложенный } }
勉強中なので、ガイドを使おうとしているのですが、無意味なものが出てきていることに気がつきました、お手本が欲しいです。
皆さん、ごきげんよう。EAで注文削除を設定する方法を教えてください。
状況は次のとおりです。
異なる方向に2つの未決済注文を 出し、片方がトリガーされると同時にもう片方は削除され、出品されなくなる。
ご教示いただければ幸いです。
ありがとうございます。
こんな感じ
{
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderType()>1)//Если найденный ордер отложенный
{
ticket=OrderTicket();//Запомним его тикет
}
else//Если ордер не отложенный
{
trade=1;//Запомним,что есть открытая позиция
}
if(ticket!=0 && trade==1)//И если известен отложенный и открыта позиция
{
int OD=OrderDelete(ticket);//Удаляем отложенный
}
}
"探し続けよう "は削除してほしい!
フォーラムでは、自分の投稿を編集することができます。上記の別々の記事に書いてあることは、すべて1つに収まります。
こんにちは!以下のアルゴリズムでtakeprofitトロールを導入しました。
if(total>0)
{for (int i=OrdersTotal()-1; i>=0; i--)
。if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderMagicNumber()==magic && OrderSymbol()==asset)& OrderType()==OP_BUY)
{
RefreshRates()。
if(TimeCurrent()>)の場合OrderOpenTime() && TimeCurrent()<=(OrderOpenTime()+3600))
{
テイクプロフィット条件;
新しいテイクプロフィットへの注文変更;
}
}
}
}
しかし、時間制限がなぜか機能せず、現在のタイムフレームでポジションが決済されないと、条件を満たした場合に次のタイムフレームでもトラブるということが起こります。
最後のif()はどうしたんだ?
こんにちは!今回は以下のアルゴリズムでtakeprofit trawlを導入してみました。
if(total>0)
{for (int i=OrdersTotal()-1; i>=0; i--)
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderMagicNumber()==magic && OrderSymbol()==asset && OrderType()==OP_BUY)
{
RefreshRates()。
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=(OrderOpenTime()+3600)))
{
末尾のTP条件。
{新しいテイクプロフィットへの注文の変更。
}
}
}
}
しかし、なぜか時間制限が効かず、現在のタイムフレームでポジションがクローズされないと、条件が揃えば次のタイムフレームでもトレールしてしまうということが起こります。
最後のif()はどうしたのでしょうか?
まあ、そこはまだ何も問題視していないので分かりませんが。注文数 に関する冗長なチェックを削除し(ループ条件に既に存在する)、ポジションの種類(買い、売り)の両方のチェックを追加しました。
for(int i=OrdersTotal()-1; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS)) {
if(OrderType()>OP_SELL) continue;
if(OrderMagicNumber()==magic && OrderSymbol()==asset) {
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=OrderOpenTime()+PeriodSeconds(PERIOD_H1)) {
// УСЛОВИЕ ТРАЛА ТЭЙКПРОФИТА;
// МОДИФИКАЦИЯ ОРДЕРА НА НОВЫЙ ТЭЙКПРОФИТ;
}
}
}
}
//+------------------------------------------------------------------+
トロールと修正条件のところ // 時間変数の値でPrint()を挿入し、ログがどうなっているかを確認します。
どうだろう、ぱっと見ではまだ何が悪いのかわからない。注文数の チェックは不要なので削除し、ポジションの種類(買い、売り)をチェックするようにしました。
for(int i=OrdersTotal()-1; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS)) {
if(OrderType()>OP_SELL) continue;
if(OrderMagicNumber()==magic && OrderSymbol()==asset) {
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=OrderOpenTime()+PeriodSeconds(PERIOD_H1)) {
// УСЛОВИЕ ТРАЛА ТЭЙКПРОФИТА;
// МОДИФИКАЦИЯ ОРДЕРА НА НОВЫЙ ТЭЙКПРОФИТ;
}
}
}
}
//+------------------------------------------------------------------+
トロールと修正条件のところで、時間変数の値でPrint()を挿入し、ログがどうなっているかを確認する。
Sellの条件が違うので、BUYのみ表示しました。
「時間変数で" - TimeCurrent()のことですか?驚かれたらごめんなさい。私はプログラミングの成績は0点なんです。
そして、私はこれを理解していない -OrderType()>OP_SELL。OrderTypeOP_SELLは 値=1、OP_BUYは 値=0なので、<=?ありがとうございます。
SELLはトロールの条件が違うので、BAIしか表示されませんでした。
"時間変数の値で" - TimeCurrent()のことでしょうか?驚かれたらごめんなさい。私はプログラミングの成績は0点なんです。
そして、私はこれを理解していない -OrderType()>OP_SELL。OrderTypeOP_SELLは 値=1、OP_BUYは 値=0なので、<=?ありがとうございます。
ごあいさつ以下のエントリーの場合、その理由を教えていただけませんか。
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}.
if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}.
システムが常にエラーを発生させる
: OrderDelete関数の 無効なチケットです。
: OrderDelete エラー 4051
参考文献によれば、それは
関数パラメータが無効な値 である
パラメータは同じようですが。
ただし、条件を外して
OrderDelete(ticketD)です。
OrderDelete(ticketUP)。
は正常に削除されます(ただし、条件付きで必要です)。私は何を間違えているのだろう?
ごあいさつ以下のエントリーの場合、その理由を教えていただけませんか?
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}.
if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}.
システムが常にエラーを発生させる
: OrderDelete関数の チケットは無効です。
: OrderDelete エラー 4051
参考文献によれば、それは
関数パラメータが無効な値 である
パラメータは同じようですが。
ただし、条件を外して
OrderDelete(ticketD)です。
OrderDelete(ticketUP)。
は正常に削除されます(ただし、条件付きで必要です)。私は何を間違えているのだろう?