MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 30

 
yaaarik777:
勉強中なので、ガイドを使おうとしているのですが、無意味なものが出てきていることに気がつきました、お手本が欲しいです。
この記事を読むと、役に立ちますhttps://www.mql5.com/ru/articles/1399
События в МetaТrader 4
События в МetaТrader 4
  • 2006.05.29
  • Andrey Khatimlianskii
  • www.mql5.com
Статья посвящена программному отслеживанию событий в терминале МetaТrader 4, таких как открытие, закрытие и модификация ордеров, и рассчитана на пользователя, обладающего базовыми навыками работы с терминалом и программирования на MQL 4.
 
yaaarik777:

皆さん、ごきげんよう。EAで注文削除を設定する方法を教えてください。

状況は次のとおりです。

異なる方向に2つの未決済注文を 出し、片方がトリガーされると同時にもう片方は削除され、出品されなくなる。

ご教示いただければ幸いです。

ありがとうございます。

こんな感じ

   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);//Удаляем отложенный
        }
     }
 
Nikolay Gaylis:
"探し続けよう "は削除してほしい!
フォーラムでは、自分の投稿を編集することができます。上記の別々の記事に書かれていることは、すべて1つに収まります。
 
Vitalie Postolache:
フォーラムでは、自分の投稿を編集することができます。上記の別々の記事に書いてあることは、すべて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()を挿入し、ログがどうなっているかを確認します。

 
Artyom Trishkin:

どうだろう、ぱっと見ではまだ何が悪いのかわからない。注文数の チェックは不要なので削除し、ポジションの種類(買い、売り)をチェックするようにしました。

//+------------------------------------------------------------------+
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なので、<=?ありがとうございます。

型が1より大きい場合、ループの次の反復に進む。
 

ごあいさつ以下のエントリーの場合、その理由を教えていただけませんか。

if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}.

if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}.

システムが常にエラーを発生させる

: OrderDelete関数の 無効なチケットです。

: OrderDelete エラー 4051

参考文献によれば、それは

関数パラメータが無効な値 である

パラメータは同じようですが。

ただし、条件を外して

OrderDelete(ticketD)です。

OrderDelete(ticketUP)。

は正常に削除されます(ただし、条件付きで必要です)。私は何を間違えているのだろう?

 
spoiltboy:

ごあいさつ以下のエントリーの場合、その理由を教えていただけませんか?

if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}.

if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}.

システムが常にエラーを発生させる

: OrderDelete関数の チケットは無効です。

: OrderDelete エラー 4051

参考文献によれば、それは

関数パラメータが無効な値 である

パラメータは同じようですが。

ただし、条件を外して

OrderDelete(ticketD)です。

OrderDelete(ticketUP)。

は正常に削除されます(ただし、条件付きで必要です)。私は何を間違えているのだろう?

エラーはコードの上の方、注文選択エリアのどこかです。