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

 
アルチョム・トリシキン

だから、KBの中にすでに解決策があったようなものです。

でも、脚本には関係ない。また、未定義の場合はOnTickからクラッシュするように表示されるので、EAにとってはかなり辛いです。そして、このような状況はExpert Advisorの奥深くのどこかで起こり得ることです。また、OnTickから抜け出すだけでなく、例えば2つのポジションを同時にオープンする必要があるかもしれません(ラ・カート)。しかし、2つ目は1つ目が正常に開かれた場合のみ開かれるはずです。この場合、最初のOrderSendの 後にOnTickから追い出されるのは、大げさに言えば、良くないことです。

 
fxsaber

でも、脚本には関係ない。そして、未定義の状況でOnTickからクラッシュアウトすることが示唆されているため、EAにとってはかなり辛いです。そして、このような状況はExpert Advisorの腹の底のどこかで起こりうることなのです。また、OnTickから抜け出すだけでなく、例えば2つのポジションを同時にオープンする必要があるかもしれません(ラ・カート)。しかし、2つ目は1つ目が正常に終了した場合のみ開くようにします。この場合、最初のOrderSendの後にOnTickから追い出されるのは、控えめに言っても良くないことです。

スクリプトは、明示的なポジション 数までスローダウンすることができます。

エキスパート・アドバイザー...EAでは、ポジションを開く関数はEAから呼び出され、その結果を返すというロジックでこれを考えなければなりません。成行注文の結果は false を返します。そして、そのEAが本来持っているロジックで動作するようになります。はい、そのような確率を即座に考慮するよりも、いくつかの既成のEAに実装する方が難しいというのは、私も同意見です。しかし、だからこそ、他の人に知ってもらい、その知識を利用してもらうために、この支店があるのです。

 
アルチョム・トリシキン

明示的なポジション数を 受信するまで、スクリプトをスローダウンさせることができます。

また、EAをスローダウンさせることも可能です。

エキスパート・アドバイザー...Expert Advisor では、ポジションを開く機能のロジックでこれを考慮する必要があります - 彼らは、その作業結果を返すと EA から呼び出されます。成行注文がある場合は false を返します。そして、そのEAが本来持っているロジックで動作するようになります。はい、そのような確率を即座に考慮するよりも、いくつかの既成のEAに実装する方が難しいというのは、私も同意見です。しかし、これこそが、他の人に知らせ、その知識を活用するための支部なのです。

トレードが成立するまでの少しの間、待つだけです。次のティックまでTSを終了させるのは、とんでもない判断です。

 
fxsaber

アドバイザーを遅らせることもできます。

トレードが成立するまで少し待てばいいのです。次のティックまでTSを終了させるのは、気持ち悪い判断です。

まあ、そのコードでは、設定された時間の待ち時間が終わっただけなんですけどね。しかし、何時間も待つことはできません。有効な環境を得るために、与えられた試行回数だけしばらく待ち、その結果を持って終了します。そうでないと、長く待っていると取引環境が大きく変わってしまい、ボルジョミを飲むのが遅くなってしまうからです :)

//+------------------------------------------------------------------+
//| Заполняет массивы тикетов позиций                                |
//+------------------------------------------------------------------+
bool FillingListTickets(const uint number_of_attempts)
  {
//--- Проверка состояния окружения
   int n=0,attempts=int(number_of_attempts<1 ? 1 : number_of_attempts);
   while(IsUncertainStateEnv(symb,InpMagic) && n<attempts && !IsStopped())
     {
      n++;
      Sleep(sleep);
     }
   if(n>=attempts && IsUncertainStateEnv(symb,InpMagic))
     {
      Print(__FUNCTION__,": Uncertain state of the environment. Please try again.");
      return false;
     }
//---
 
アルチョム・トリシキン

まあ、このコードは設定された時間だけ待つのですが、何時間も待つことはできません。有効な環境を得るために、設定された回数だけ待つのです。しかし、何時間も待つことはできません。指定された回数の試行錯誤を経て、有効な環境が得られるまでしばらく待ち、結果を出します。そうでないと、長く待っていると取引環境が大きく変わってしまい、ボルジョミを飲むのが遅くなってしまうからです :)

ええ、待ち時間には気づきませんでした。それでいい。その 頃は、もっと気を遣っていました。

 

PositionTotal() に注目するのは、いずれにしても間違った判断です。 リクエストの処理中に、例えば複数のEAが動作している場合、別のポジションが口座上でオープン/クローズする可能性があります。 開発者が設計したように、サーバーからの応答を確認することを妨げるものは何ですか?

EAはポジションのティックを明確に制御し、それに基づいてのみ動作する必要があります。

 

ChartIndicatorGet()を使用した後、IndicatorRelease(handle)関数が必ず呼ばれなければならない。ChartIndicatorGet()関数の サンプルには書かれていますが、関数ノートには書かれていません。開発者はドキュメントを修正したかったが、それをしなかった。SDの閉鎖により、おそらく実現することはないでしょう。

個人的には、インジケーターが "ぶら下がる "という問題に遭遇しました。SDとの会話から。

ああ、つまり、私がチャート上でXインディケータを実行したとき、それはすべての指標を調べ、ChartIndicatorGet()を使用してそれのコピーを見つけた- それはカウンタを増加させた最初のXインジケータを削除し、カウンタを減少させましたが、2番目のインジケータのことを忘れていました。

はい、まさにその通りです。そのため、OnDeinitは動作しません。

 

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

CustomRatesUpdateを使用して、ヒストリカルデータをcsvにインポートしてシンボルカスタムを作成するにはどうすればよいですか?

fxsaber さん 2018.08.19 12:01

// Sets the maximum size of an array.
template <typename T>
int ArrayResize( T &Array[] )
{
  int MinSize = ArraySize(Array);
  int MaxSize = INT_MAX;
  int AvgSize;
  
  while ((MinSize < MaxSize - 1) && !IsStopped())
  {
    AvgSize = (int)((MinSize + (long)MaxSize) >> 1);        
    
//    ArrayFree(Array);
    
    if (ArrayResize(Array, (int)AvgSize) == AvgSize)
      MinSize = AvgSize;
    else
      MaxSize = AvgSize;
  }
  
  return(ArrayResize(Array, MinSize));
}
 
フォーラムの英語版には
// Обмен значениями между двумя числовыми переменными
#define  SWAP(A, B) { A += B; B = A - B; A -= B; }
 
fxsaber
フォーラムの英語版には

その上、doubleでは異なる数値が得られるし(==は偽)、整数ではオーバーフローする可能性があります。

理由: