初心者の方からの質問 MQL4 MT4 MetaTrader 4 - ページ 29

 
yaaarik777:

皆さん、ごきげんよう。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);
  }
}
 
Vladimir Zubov:

一例を挙げると

//-------------------------------------------------------------------+
//   удаляет отложенные стоп ордера 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("Ордер успешно удален.");
   }
 
iPhoneのmt4とmt5でバーが違うのはなぜですか?バーの開店・閉店時間は同じですが。昨日の14:00にMT4でラインを突破できなかったので、これは明らかに障害です。
ファイル:
image.png  82 kb
image.png  81 kb
 
こんにちは!教えてください!アンドロイドでmt4 636バージョンをダウンロードしましたが、ブローカーのリストが表示されません。ターミナル版はもうサポートされていないのでしょうか?(( もしそうなら、どこで動作するものをダウンロードできるのでしょうか?
 
MetaGSss:
iPhoneのmt4とmt5でバーが違うのはなぜですか?バーの開店・閉店時間は同じですが。明らかに昨日の14:00にMT4でラインを突破するのを阻止しています。
価格がどこに行くのか、あらかじめ知っておいてほしいということです
 
MetaGSss:
iPhoneのmt4とmt5でバーが違うのはなぜですか?バーの開店・閉店時間は同じですが。昨日mt4で14:00にラインがブレイクしなかったので、これは明らかに障害になっています。
スプレッドはもちろん極端な人向けです)))
 
MetaGSss:
iPhoneのmt4とmt5でバーが違うのはなぜですか?バーの開店・閉店時間は同じですが。昨日の14:00にMT4でラインを割っていないので、明らかに干渉しています。
記号も微妙に違う)
 

- последние четыре строчки в общем понятны, вопрос лишь в функции PlaySound,  код которой необходимо вставить после каждой строчки "Print("..." в таком виде: 

bool PlaySound(

string payment // ファイル名

)

; ...

それとも、

何らかの方法で変換されて

いるのでしょうか?

プログラムヘッダで bool PlaySound(

宣言する - セットファイルでサウンドのオン/オフをする機会があります extern bool Play = TRUE;

では、Printは何を表示するのでしょうか?また、どのような条件下で?

この行為に何の意味があるのでしょうか?注文が成立したときに音を出したり、コメント(TPやSL)を書いたりしたいのですが?






A1exPit さん、詳細かつ明確な回答ありがとうございました."アクションのポイント "は、「TakeprofitとStaplossで決済注文をする」というイベントを鳴らすこと=それぞれを違う音で鳴らすことです ...
 

ごあいさついろいろと聞いてみたが、まだ答えが見つかっていない。以下のエントリで、その理由を教えていただけませんか?

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本のバーの最小値と最大値を読み取り、その値で注文を出します。そして、最大値や最小値が減少していれば、該当する注文を削除し、新しいデータを使って注文を出す必要があります。

まだ勉強を始めたばかりで、修正ではなく削除は機能を勉強するために行ったのですが、なぜうまくいかないのだろうと思いました。