偉大で恐ろしいMT4の永遠(または移行の戦略方法) - ページ 19

 
fxsaber:

MT4とMT5の用語は同じです。

長年、誰もが知っている背水の陣で臨みました。睡眠を とる。なぜなら、それはとても複雑なことだからです。フォーラムで話題になった取引APIの機能の多くは、開発者が知らない、あるいはコメントしていないものばかりです。


誰もMT5を批判しているわけではありません。基本的なタスクを解決する際に発生する問題を、例によって紹介しました。

なぜ同じなのか?あなたはまだ私の質問に答えていません。

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

偉大で恐ろしいMT4フォーエバー(あるいは移行戦略の効果的な決め方)

アレクセイ・ヴィクトロフ, 2021.05.09 09:15

...そして、もし私が他のコンピューターから自分の口座に接続し、いくつかの注文をしたら...MQL4は何を開くのでしょうか?

誰もMT5を批判しているわけではありません。初歩的な問題を解く際の問題点を、例を挙げて紹介しました。

OrderSend()関数の結果を正しく処理するだけでよく、mql4のシンプルさからは逃れられないのです。マイクロ秒を捕らえることが目的であって、トレードが目的ではない...あるDTに問題があり、その問題をMTのバグと言いくるめている。MQアカウントでポジションの逆転を見せれば、開発者は注目するはずです。Roboのデモであなたのコードを実行しましたが、バックトラックを確認することができませんでした。

バグレポートの中には本当に尊敬に値するものもありますが、中には...すみません、こんな無意味なもの、言葉を失いますね。

以上、勝利の日おめでとうございます。平和を願う。労働5月

 
Alexey Viktorov:

なぜ同じなのか?まだ質問に答えていませんね。

もう一度言いますが、MT4/5でも条件は同じです。スクリプトの実行終了時に、空の口座に100のオープンポジションを持って いる必要があります。スクリプトの実行中に、任意の端末の一部のポジションを閉じることができるようにした。この「介入」は、馬鹿な決断をしないためにこそ必要なのです。

for (int i = 0; i < 100; i += OrderSend(Request, Result))
  ;

OrderSend()関数の結果を正しく処理する必要がありますが、mql4のシンプルさからは抜け出せません。マイクロ秒を捕らえることが目的であって、トレードが目的ではない...1つのdtzに問題があるのに、その問題をMTのバグと言いくるめている。MQアカウントでポジションの逆転を見せれば、開発者は注目するはずです。Roboのデモであなたのコードを実行しましたが、バックトラックを確認することはできませんでした。

あなたのバグレポートの中には、本当に尊敬に値するものもありますが、中には...すみません、このようなナンセンスな、まともな言葉に欠けるものもありますね。

問題が見えないからといって、問題がないわけではありません。MQデモは、デバッグという意味では、嫌な場所ですね。ポジションがオープンされたときにのみ、成行注文に対してOrderSendがtrueを返す執行型があります。実際には、ECN口座にはそのようなものはありません。true - 成行注文を受け付けます。次に何が起こるのか、モニターすることが重要です。キッチンDCのみ異なる(MQ-Demoのような)実行スキームを使用します。

以上、勝利の日おめでとうございます。平和を願う。労働5月

同じく。

 
fxsaber:

MT5で、空の口座に100ポジションを開くスクリプトを書く必要があります。


MT4ではこのように解決しました。

void OnStart()
{
  while (OrdersTotal() < 100)
    OrderSend(_Symbol, OP_BUY, 0.1, Ask, 0, 0, 0);
    
  Print(OrdersTotal());
}

MT5で解決している人はいますか?

MT5で書いた中で一番短いコードが届きました。

MqlTradeRequest BuyRequest = {0};
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   static bool run = false;
   if(run) return;
   BuyRequest.action = TRADE_ACTION_DEAL;
   BuyRequest.type = ORDER_TYPE_BUY;
   BuyRequest.symbol = _Symbol;
   BuyRequest.volume = 0.1;
   BuyRequest.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   BuyRequest.type_filling = GetFilling();
   MqlTradeResult result;
   run = OrderSend(BuyRequest, result);
}
//+------------------------------------------------------------------+
//| Trade function                                                   |
//+------------------------------------------------------------------+
void OnTrade()
{
   MqlTradeResult result;
   while(PositionsTotal() < 10 &&
         SymbolInfoDouble(_Symbol, SYMBOL_ASK, BuyRequest.price) &&
         OrderSend(BuyRequest, result))
   {}
}
//+------------------------------------------------------------------+
ENUM_ORDER_TYPE_FILLING GetFilling(const uint Type = ORDER_FILLING_FOK)
{
   const ENUM_SYMBOL_TRADE_EXECUTION ExeMode = (ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE);
   const int FillingMode = (int)::SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE);

   return((FillingMode == 0 || (Type >= ORDER_FILLING_RETURN) || ((FillingMode & (Type + 1)) != Type + 1)) ?
          (((ExeMode == SYMBOL_TRADE_EXECUTION_EXCHANGE) || (ExeMode == SYMBOL_TRADE_EXECUTION_INSTANT)) ?
           ORDER_FILLING_RETURN : ((FillingMode == SYMBOL_FILLING_IOC) ? ORDER_FILLING_IOC : ORDER_FILLING_FOK)) :
          (ENUM_ORDER_TYPE_FILLING)Type);
}
//+------------------------------------------------------------------+

GetFilling() を使用しない場合 - crypto では動作しません ((

しかし、このコードでも11ポジションが開きました。


 
Igor Makanu:

MT5で書ける最短のコード。

簡潔さのためにSBができた。

しかし、このコードでも11のポジションが空いた。

なぜなら、コードの中のロジックはこうなっているからです。

 
fxsaber:

SBで簡潔な表現が可能

なぜなら、コードの中のロジックはこうなっているからです。

のようにしても、PositionsTotal()では問題が解決されません。

void OnTrade()
{
   if(PositionsTotal() >= 10) return;
   MqlTradeResult result;
   BuyRequest.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   OrderSend(BuyRequest, result);
}

は、10ポジションのとき、13ポジションのときにも開きます。

唯一の解決策は、MqlTradeResultの結果からチケットオーダーを記憶し、オープンポジションが現れるのを待つことです。

 
Igor Makanu:

この方法でもPositionsTotal()は解決しません。

10ポジションのとき、13ポジションのときにも開きます。

MqlTradeResultの結果からチケットオーダーを記憶し、オープンポジションの出現 を待つしかない。 そうすれば、指定した数のポジションが 確実にオープンされることになる。

だから待っててね!!!だってmql4が待ってるんだから、恨みっこなし。そしてMQL5では、リクエストを送るだけで実行されることが前提だと判断しているのですね.........。

 
Igor Makanu:

この方法でもPositionsTotal()は解決しません。

10ポジションのとき、13ポジションのときにも開きます。

MqlTradeResultの結果からチケットオーダーを記憶し、オープンポジションを待つ以外にすることはありません; その後、指定された数のポジションが 確実にオープンされるでしょう。

スクリプト/サービスではなく、EAであることにご注意ください。しかし、こんな単純な2行の作業を解くには、EAを使ってもかなりの労力が必要です。

 
Alexey Viktorov:

だから待て!!!結局のところ、mql4は待ってくれるし、恨みっこなしです。そしてMQL5では、リクエストを送るだけで実行されることが前提だと判断しているのですね.........。

ここで何人かの方が「困難はない」と述べておられます。しかし、解決策を提示していない。

 
fxsaber:

ここでは、何人かの方が「困難はない」と表明しています。しかし、解決策を提示できていない。

私も提供しません、理由は簡単です。私は...コーダー(あなたではない)を教えたくはないのですが、必要であればあまり考えずに問題を解決します。そして、同じ理由で、以前からTumblrからだけCodeBaseにコードが表示されるようになっています。他の人はみんな黙っている...。

 
Alexey Viktorov:

私はどちらも提供しません。理由は簡単です。私は...コーダーを教えたくない(それはあなたに関係ない)、しかし、必要であれば、私はあまり考えずに問題を解決する。そして、同じ理由で、長い間、コードはTumblrからしかCodeBaseに来なかったのです。残りはすべて沈黙...

舌で話すのは、袋で話すのとはわけが違う。教えてくださいよ。私、お願いします。

問題があるのは、このブローカーに限ったことではありません。
そして問題は、特定の注文の実行を待つことではなく(それは別の問題です)、注文が実行さ れると、すべてのリスト(オープン、クローズ、トレード、ポジション)から一時的に消えてしまうということなのです。

もちろん、別の松葉杖も使える。しかし、私たちは人間的な解決策を見出したいのです。そしてそれは、fxsaberが通りすがりの井戸端会議の吠え声に耳を傾けながら、公に取り組んでいることでもある。