mql5言語の特徴、微妙なニュアンスとテクニック - ページ 155

 
Nikolai Semko:

2年前に行われた、異なる言語の効果を比較した興味深い研究を発見しました。

https://greenlab.di.uminho.pt/wp-content/uploads/2017/09/paperSLE.pdf



なんと!

エイダは本当に生きているのか、成長しているのか!間違っていなければ、最初のOOPです。80年代前半に勉強しました。今まで何も聞いていなかったので、この言語はModulaと同じように死んでしまったと思っていました。どちらもPascalのディープアップグレードです。Adaのコンパイラは持っていなくて、Modulaを持っていました。覚えている人がいれば、DWKの7パスです。

 

テスターでの約定エラーを回避するため、現在の 価格で保留またはSL/TPを発注すべき場合に、適切な成行注文を送信してください。

  • 現在の価格で保留中の注文を出す - 成行注文のOrderSendの後に追加する。
  • 現在値でSL/TPポジションを置く - OrderCloseポジションの後に追加する。
 
fxsaber:

テスターでの約定エラーを回避するため、現在値で 保留中の注文やSL/TPを発注すべき場合は、適切な成行注文を送信してください。

  • 現在の価格で保留中の注文を出す - 成行注文のOrderSendの後に追加する。
  • 現在値でSL/TPポジションを置く - OrderCloseポジションの後に追加する。

もう少し詳しくお話を伺えますか?あまり明確ではありません。

  • 現在値で保留中の注文を出すには、ポジションを開くリクエストを送信した後に何かを追加する必要があります (????????)
  • 現在の価格で逆指値注文(何に対して)を出すには、ポジションの決済要求を出した後に何かを追加する必要があります(?????)
これらは、あなたが書いたものを解読しようとした後に出てくる質問です ...
 
Artyom Trishkin:

もう少し具体的に教えてください。よくわからないんです。

  • 現在値で保留中の注文を出すには、ポジションを開くリクエストを送信した後に何かを追加する必要があります (????????)
  • 現在の価格で逆指値注文(何に対して)を出すには、ポジションの決済要求を出した後に何かを追加する必要があります(?????)
このような質問は、あなたが書いたものを読み解こうとした後に現れます ...

問題はここに 示されています。解決策

// Делает более точными MT4/5-тестеры.
TICKET_TYPE MyOrderSend( const string Symb, int Type, const double dVolume, const double Price, const int SlipPage, const double SL, const double TP,
                         const string comment = NULL, const MAGIC_TYPE magic = 0, const datetime dExpiration = 0, color arrow_color = clrNONE )
{
  static const bool IsTester = MQLInfoInteger(MQL_TESTER);
  MqlTick Tick = {0};  
  
  bool Res = IsTester && SymbolInfoTick(Symb, Tick);
  
  if (Res && (Type > OP_SELL))
  {
    if ((Type == OP_BUYLIMIT) || (Type == OP_BUYSTOP))
    {
      if (Price == Tick.ask)
        Type = OP_BUY;
    }
    else if (Price == Tick.bid)
      Type = OP_SELL;
  }
  
  const TICKET_TYPE Ticket = OrderSend(Symb, Type, dVolume, Price, SlipPage, SL, TP, comment, magic, dExpiration, arrow_color);
  
  Res = Res && (Type <= OP_SELL) && (Ticket != -1) &&
        (Type ? (SL == Tick.ask) || (TP == Tick.ask) : (SL == Tick.bid) || (TP == Tick.bid)) &&
        OrderClose(Ticket, dVolume, Type ? Tick.ask : Tick.bid, SlipPage, arrow_color);
  
  return(Ticket);
}

// Делает более точными MT4/5-тестеры.
bool MyOrderModify( const long Ticket, const double Price, const double SL, const double TP, const datetime Expiration, const color Arrow_Color = clrNONE )
{
  static const bool IsTester = MQLInfoInteger(MQL_TESTER);
  
  bool Res = false;
  
  if (IsTester && OrderSelect(Ticket, SELECT_BY_TICKET) && !OrderCloseTime())
  {
    if (OrderType() <= OP_SELL)
    {
      Res = (OrderClosePrice() == SL) || (OrderClosePrice() == TP);
      Res = OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color) && (!Res || OrderClose(Ticket, OrderLots(), OrderClosePrice(), 0, Arrow_Color));
    }
    else if (OrderClosePrice())    
      Res = ((OrderClosePrice() == Price) &&
             (MyOrderSend(OrderSymbol(), OrderType() & 1, OrderLots(), Price, 0, SL, TP,
                          OrderComment(), OrderMagicNumber(), OrderExpiration(), Arrow_Color) != -1) && OrderDelete(Ticket)) ||
            OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color);
    else
    {
      MqlTick Tick = {0};
      
      if (SymbolInfoTick(OrderSymbol(), Tick))
        Res = (((bool)(OrderType() & 1) ? (Price == Tick.bid) : (Price == Tick.ask)) &&
               (MyOrderSend(OrderSymbol(), OrderType() & 1, OrderLots(), Price, 0, SL, TP,
                            OrderComment(), OrderMagicNumber(), OrderExpiration(), Arrow_Color) != -1) && OrderDelete(Ticket)) ||
               OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color);
      else
        Res = OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color);                     
    }
  }
  else
    Res = OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color); 
  
  return(Res);
}

#define OrderSend MyOrderSend
#define  OrderModify MyOrderModify
 
fxsaber:

問題はここに 示されています。解決策

これでは何のためにあるのか、何をすればいいのか、さっぱりわかりません。結局のところ、多くの人は、自分で作ったり既製品を使ったりするためにコードを読み始める前に、ソリューションを書いた理由について書かれていることを理解する必要があるのです。

もう少し詳しい説明をお願いします。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

mql5言語の特徴、複雑な仕組みとテクニック

fxsaber さん 2019.12.18 12:45

Testerでの約定エラーを回避するために、現在の 価格で保留またはSL/TPを置く必要がある場合には、適切な成行注文を送信してください。

  • 現在の価格で保留中の注文を出す - OrderSend成行注文の後に追加する。
  • 現在値でSL/TPポジションを置く - OrderCloseポジションの後に追加する。

そして、それが私、あるいは他の誰かにどう受け止められているのか、その一例を示しました。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

mql5の特性、ヒントとコツ

アルチョム・トリシキン さん 2019.12.18 12:53

もっと詳しく説明することはできないのでしょうか?私は何も理解していません。

  • を使用して、現在の価格で保留中の注文を出すには、ポジションを開く要求を送信した後に何かを追加する必要があります (????????)
  • 現在の価格で逆指値注文(何に対して)を出すには、ポジションの決済要求を出した後に何かを追加する必要があります(?????)
これらは、あなたが書いたものを解読しようとした後に現れる質問です......

とにかく...

 
Artyom Trishkin:

もっと具体的に教えてください

MT5-Testerで、現在値で 保留注文とSL/TPを発注しても、現在のティックで約定を受け付けない。

 

皆さん、こんにちは。

MT5でティックチャートを表示するためにどのようなツールがあるか教えてください。

MT4では、「オフラインで開く」というオプションがありました。履歴のhst-fileを自作することで、ティックと連携 できるのは便利でした。

MT5では、「スタンドアロンを開く」オプションはありません。ダニを扱うソフトツールは優秀ですが。

チャート上に表示される可能性がないとは言い切れませんが

 
fxsaber:

問題はここに 示されています。解決策

  const TICKET_TYPE Ticket = OrderSend();
  ...
  OrderClose(Ticket, dVolume, Type ? Tick.ask : Tick.bid, SlipPage, arrow_color);

なんということでしょう。なぜ現在の価格でSL/TPで開くのか?

まあ、SL/TPを現値に置いて閉じるのは、少しでも意図的に行うものです。トリガーもエミュレートする必要はありません。

 
Andrey Khatimlianskii:

なんということでしょう。なぜ現在の価格でSL/TPで開くのか?

まあ、SL/TPを現値に置いて閉じるのは、少しでも意図的に行うものです。トリガーをエミュレートする必要はありません。

そうすれば、数十分、数時間で簡単にトリガーを得ることができます。

何らかの方法で計算されたTPによってクローズする必要があると想像してください。そして今、それは現在の価格と 同じになっています。

 
fxsaber:

は、何らかの方法で計算されたTPでクローズする必要があります。そして今、それは現在の価格と 同じになった。

この場合、私は常にこのTPがすでにトリガーされるべきではなかったか(価格がTPを越えたか)どうかをチェックし、マーケットに従ってクローズします。

あるいは、指値で抜ける必要がある場合は、価格が埋まるまで、価格の後ろに引きます。

理由: