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

 
Igor Makanu:

PMがサーバーを放棄した

このサーバー(というかブローカーのソフト)にはスパム対策が施されています。来週までにアップデートする予定で、そうすれば速度低下はなくなるそうです。

 
fxsaber:

このサーバーを見てもらわなければなりませんね。ここで提案された松葉杖が 重要と思われる方は、一度確認されると良いと思います。

しばらくしてこの話題に戻るのは嫌ですね。バグがあれば指摘したほうがいいと思います。

MT4-styleのオプションはまだないのですか?

異なるサーバーで100のポジションを開くスクリプトを実行するだけ?

 
Andrey Khatimlianskii:

MT4スタイルのオプションはまだない?

まだ始まっていません。ほとんどの場合、ユーザーはコードに何も変更を加えないでしょう。追加機能は、マクロで起動することになります。

異なるサーバーで100のポジションを開くスクリプトを実行するだけ?

はい、異なるサーバーで、しかし、異なるスクリプトだけ です。1分間動作させてもダブリが発生しなければ、正常にチェックを通過したことになる。そうでなければ-失敗。

Библиотеки: TradesID
Библиотеки: TradesID
  • 2021.03.29
  • www.mql5.com
Статьи и техническая библиотека по автоматическому трейдингу: Библиотеки: TradesID
 
fxsaber:

まだ始まっていません。ほとんどの場合、ユーザーはコードに何も変更を加えないでしょう。追加機能は、マクロで起動します。

了解です。

Библиотеки: MT4Orders
Библиотеки: MT4Orders
  • 2021.02.09
  • www.mql5.com
MT4Orders: Автор: fxsaber...
 

そうでした。

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

偉大で恐ろしい永遠のMT4(あるいは賢い移行戦略の作り方)

fxsaber, 2021.05.11 09:05

ポジションを待たずに、すぐに結果を出すことができます。

#include <fxsaber\TradesID\ByPass.mqh>
#include <MT4Orders.mqh>

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnStart()
{
  BYPASS ByPass;
  
  MT4ORDERS::OrderSend_MaxPause = 0; // Запрет на ожидание позиции после OrderSend
  
  while (OrdersTotal() < 30)
    if (ByPass.Is())
      ByPass += OrderSend(_Symbol, OP_BUY, 0.1, Ask, 0, 0, 0);      
    
  Print(OrdersTotal());
}

そうでした。

#define  MT4ORDERS_BYPASS_MAXTIME 1000000 // Максимальное время (в мкс.) на ожидание синхронизации торгового окружения
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnStart()
{
  MT4ORDERS::OrderSend_MaxPause = 0; // Запрет на ожидание позиции после OrderSend
  
  while (OrdersTotal() < 30)
    OrderSend(_Symbol, OP_BUY, 0.1, Ask, 0, 0, 0);      
    
  Print(OrdersTotal());
}


信頼性を含め、MT4バリアントと変わらなくなりました。

MT5では書くのが大変な例も、当然のように簡単に実装できるようになりました。

 

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

偉大で恐ろしい永遠のMT4(または移行戦略の構築方法)

イゴール・マカヌ さん 2021.05.10 10:28

が効くようです。

#include <Trade\Trade.mqh>
void OnStart()
{
   CTrade Trade;
   while(PositionsTotal() < 10)
   {
      if(OrdersTotal() > 0) continue;
      if(!Trade.Buy(0.01)) continue;
      if(OrdersTotal() == 0 && PositionsTotal() >= 10) return;
   }
}

が、非常に遅く、解像度はまあまあです。

10番目のポジションをオープンする注文を出した後、次の反復で、もし

while(PositionsTotal() < 10)

PositionTotalは更新する時間がなく(=9)、注文はすでに履歴に入ることができ、OrdersTotal()==0となっています。

その場合、Trade.Buy()はもう一回あるのでしょうか?

理論的には、何度か連続して起こる可能性があるのでは?

それとも、何か見落としているのでしょうか?

 
mktr8591:

10 番目のポジションをオープンする注文が出された後、次の反復で

PositionTotalは更新する時間がなく(=9)、注文はすでに履歴に行くことができ、OrdersTotal()==0となっています。

その場合、Trade.Buy()はもう一回あるのでしょうか?

理論的には、何度か連続して起こる可能性があるのでは?

それとも、何か見落としているのでしょうか?

それは彼の高周波の興味であり、他は十分なタイムアウトがあり、二度目は問題ない。

MT4ではそのように構築されているのでしょう、様子見です
 
mktr8591:

10 番目のポジションをオープンする注文が出された後、次の反復で

PositionTotalは更新する時間がなく(=9)、注文はすでに履歴に行くことができ、OrdersTotal()==0となっています。

その場合、Trade.Buy()はもう一回あるのでしょうか?

もちろん、そうなります。コードの中の理屈は全く同じです。

理論的には、何度か連続した繰り返しをするのでは?

もしBuyが真なら、次の反復でOrdersTotal()== 0になる確率はほぼゼロです。つまり、12ポジションを開くことは実際には不可能なのです。


これは非常に原始的なケースです。二重の繰り返しは、しばしば次のようになります。

  1. 指値注文合計=1、ポジション合計=0。
  2. リミッターを実行する。OrdersTotal = 0, PositionsTotal = 0.
  3. ポジションを開設しました。OrdersTotal = 0, PositionsTotal = 1.

2段階目で、Expert Advisorは何もないことを確認し、Limitを設定します。その結果、2つのポジションが空席となりました。

2点目は、MT5のオーバーシュートです。そして今、松葉杖がそれを迂回する。

 

ありがとうございます。

そのことについて。

fxsaber:

2倍表示はMT5の難点ではなく、Total()関数が誤検出をする場合のアーキテクチャ上のバグです。

バグだと言うこともできますし、違う形で提示することもできます :-)

PositionsTotal()は オープンポジションの数ではなく、オープンポジションテーブルのサイズ です。ポジションの表は、実際には、取引の履歴の キャッシュとして、それだけで要求に応じてではなく、自動的に更新されますが、即座にではなく、わずかな遅延で、キャッシュです。このため、すでにオープンしているポジションが含まれていなかったり、すでにクローズしているポジションが含まれていたりすることがあります。

OrdersTotal()も同様です。

このようにヘルプを説明すれば、疑問や苦情、誤解は少なくなるはずです。

そして、「MetaTrader 5の注文、ポジション、取引」の記事では、このことに注意を払うことができます(今は曖昧ですが、「PositionTotal()関数の結果は、ポジションキャッシュがいっぱいかどうかに依存しません -それは常にすべてのシンボルのベースターミナルでオープンポジションの実際の数を返します」)。


P.S. しかし、そこで正当な疑問が生じます。ライブ注文、ポジション、取引、約定した注文のテーブルの同期状態を判断するシステム関数/フラグを作り、松葉杖を作らないようにしたらどうでしょうか?
 
mktr8591:

P.S. しかし、そこで正当な疑問が生じます。ライブオーダー、ポジション、トレード、約定したオーダーのテーブルの同期 状態を判断するシステムfi/flagを 作り、松葉杖を作らないようにしたらどうでしょうか?

ほとんどの場合、内部にそのようなフラグはありません。

理由: