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

 
PapaYozh:
いいえ。
結果を保証するものではありません。

小銭が十分にあれば、保証されます

 
fxsaber:

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


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


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

部分的なパフォーマンスは可能ですか?
 
SanAlex:

小銭が十分にあれば、保証される。

部分的なパフォーマンスを考慮していない。また、考慮した場合、ダブルカウントも考慮しなければならない

 
Alexey Viktorov:
部分実行は可能ですか?

部分実行がないと仮定しよう。しかし、スクリプトの実行中に、誰かが誤ってポジション表の十字をクリックし、1つまたはいくつかのポジションをクローズしてしまう可能性があります。しかし、スクリプトの実行終了時には、まだちょうど100の位置があるはずです。


MT4 版は、めちゃくちゃシンプルです。だから、このスレッドに書いたのです。

 
fxsaber:

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

シンクロナイザーがないとどうしようもない。

その過程で、初歩的な再注文や 接続の損失が発生する可能性があり、100件の注文が100件の取引をもたらすとは限りません。

 
Andrey Khatimlianskii:

シンクロナイザーがないとどうしようもない。

その際、初歩的なリクオートや 通信の切断が発生する可能性があり、100件の注文が100件の取引になるとは限りません。

シンクロナイザーは、PositionsTotalとOrdersTotalの値に矛盾がないことだけを確認します。時間的に嘘をつくからこそ、ダブルカウントになるのです。

シンクロナイザーは原則的に1本です。そして、その仕組みを調べなければ、実装は簡単です。


しかし、シンクロナイザーを使っても、すべてが非常に複雑です。このような条件を使ってもよい。

while (OrdersTotal() + PositionsTotal < 100)

しかし、この状態は、次のようなことをされると、全くお手上げになります。

fxsaber:

部分実行がないと仮定しよう。しかし、スクリプトの実行中に、誰かが誤ってポジションテーブルのクロスをクリックし、1つまたは複数のポジションテーブルを閉じて しまうことがあります。しかし、スクリプトの実行終了時には、まだちょうど100のポジションが残っているはずです。


つまり、MT4では2行で解決するような初歩的な作業が、MT5ではなかなか解決しないのです。そのため、MT5ではMT4-style+Synchronizerがルールとなっています。そのため、MT5には多くのEAがありますが、他のEAがどのように書かれているのかよくわかりません。

 
fxsaber:

シンクロナイザーは、PositionsTotalとOrdersTotalの値が一致しないことだけを確認します。一時的に虚偽であるからこそ、二重計上になるのです。

シンクロナイザーは原則的に1本です。そして、その仕組みを調べなければ、実装は簡単です。


しかし、シンクロナイザーを使っても、すべてが非常に複雑なのです。このような条件を使ってもよい。

しかし、この状態は、次のようなことをされると、全くお手上げになります。


つまり、MT4では2行で解ける初歩的な問題が、MT5では簡単には解けないのです。そのため、MT5ではMT4-style+Synchronizerがルールとなっています。このため、MT5には多くのEAがありますが、他のEAがどのように書かれているのか理解できません。

MT5では、言語とAPIがより豊富になったため、すべてがMT4と同じ方法で解決され、多くの場合、より簡単です。正確には、言語はほぼ同じで、ここではメタクオーツが互換性のために素晴らしい仕事をしてくれていますが、APIはかなり異なっています。MetakvotesのディレクターであるRenatは、以前フォーラムで、MT4は死んでおり、開発されることはないだろうと言っていました。しかし、どうやら商業的な利益の方が重要だったようで、それにもかかわらずアップデートが行われることになりました。しかし、そのほとんどは、MKL 5のバグフィックスと新機能です。だから、開発者はよくやったと、私は脱帽するのです))

そして、一般的に、私はMKL5に切り替えることが困難として、いくつかの同志のうめき声を理解していない。複雑なことはなく、まあ別のAPIがあるので、詳細なソースがあり、私はそこから学ぶことを好む。まだ十分な知識を持っていない人、大歓迎です!簡潔ですが、明確です。いずれにせよ、5番目は4番目より少なくとも10倍速く、最適化モード では、一般的にあなたが許可されたCPUのすべてのコアを使用して、最新のビデオカードで数百回で4番目に勝っている。だから、悲しい歌を書く必要はない。))

 
Andrei Trukhanovich:

部分的な性能を考慮していない、考慮するとオーバーランも考慮しなければならない

というのは、それもおかしいのでは?- この機能に何を求めているのか理解できませんが、100%仕事をしてくれます!

//+------------------------------------------------------------------+
//|                                                    maxLimits.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
//---
CTrade m_trade; // trading object
//---
sinput uint   maxLimits = 3;    // Кол-во Позиции Открыть в одну сторону
sinput double InpLots   = 0.01; // Lots
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double sl=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
//---
   for(uint i=0; i<maxLimits; i++)
     {
      //--- open position
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+
//---
   for(uint i=0; i<maxLimits; i++)
     {
      //--- open position
      if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      //if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
 
fxsaber:

部分実行がないと仮定しよう。しかし、スクリプトの実行中に、誰かが誤って ポジション表の十字をクリック し、1つまたはいくつかのポジションをクローズしてしまう可能性が あります。しかし、スクリプトの実行終了時には、まだちょうど100の位置があるはずです。


MT4版は、めちゃくちゃシンプルです。だから、このスレッドに書いたのです。

つまり、MQL5では誰かが遊べるような条件を設定し、MQL4ではそうしないのですか?他のパソコンから口座に接続して数ピップス置いた場合...MQL4は何を開くのでしょうか?

何のチェックもなしにガチャガチャやるか?プログラミングの寛容さを提唱しているのか、それとも誰かの私利私欲でMQL5を誹謗中傷しようとしているのか?

mql4で同じようにチェックとフールプルーフで書き込む。

 
Alexey Viktorov:

MQL5では誰かがいじくり回せるような条件を設定したが、MQL4ではそうではないのか?他のコンピュータから自分の口座に接続して数ピップス置いた場合...MQL4は何を開くのでしょうか?

MT4とMT5の利用条件は同じです。

何のチェックもせずにガチャガチャやるか?プログラミングの寛容さを提唱しているのか、それとも誰かの私利私欲のためにMQL5を蔑ろにしようとしているのか、どちらでしょうか?

その方法がわからないと、mql4と同じ問題をティックとフールプルーフで表示する必要があります。

私はすべてMT5のみで行っています。MT5がMT4より複雑ではないと言っているのです。もっともっと複雑なんです。今週だけポジション逆転の解決策があり、100%うまくいっているわけではありません。

長年にわたり、誰もがバックテストについて知っていた、に来る...睡眠を とる。なぜなら、それはとても複雑なことだからです。フォーラムで指摘された取引APIの特殊性については、開発者が気づいていない、あるいはコメントを出していないことが多いようです。


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