成行注文を正しく発注するにはどうしたらよいですか? - ページ 7

 
prostotrader:

ちなみに、インジケータからSleep()を呼び出す のは禁止されているので、不思議です。

Sleep()関数はカスタム・インジケータから呼び出すことはできません。なぜなら、インジケータはインタフェース・スレッドで実行され、その速度を低下させてはならないからです。また、0.1秒毎にエキスパートの停止フラグの状態を確認する機能を内蔵しています。


 
Alexey Kozitsyn:

ちなみに、インジケータからSleep()を呼び出す ことは禁止されているので、不思議です。


Sleep()が何なのか全く知らないのですが
 
prostotrader:

アレクセイ!

かなりリキッドな楽器です :)

2016.12.14 22:01:41.431 Trades  'xxxxx': cancel order #49931802 sell limit 1.00 GOLD-9.17 at 1190.2 placed for execution in 64926.078 ms

楽器(流動性)の問題ではなく、遅延の問題であり、それはどんな楽器でも起こりうることです。

EAを使った取引を積極的に始めてから4年近くになります。

私のEAには一時停止はありません(INDICATORSでサーバーからデータがダウンロードされるのを待つための一時停止は除く)。

もし、ポーズがかかったら、それはEAのアルゴリズムが正しく動作していない証拠です :(

私はもう長いことトレードをしていますが、EAしか使っていません。でも、ほとんどMT4で。MT5のみでExpert AdvisorをLimitsを使って取引していますが、特に問題はありませんでした。私もEAの追加ポーズには反対です、特にスキャルパーやピプシターだとエントリーを逃しやすいので。
 
prostotrader:
Sleep()が何なのか全く知らないのですが
それなら、今、あなたと私がポーズについて議論しているのはおかしいのでは......。
 
Alexey Kozitsyn:
それなら、今、あなたと私がポーズについて議論しているのはおかしいのでは......。
Sleep() が何をするかという意味ではなく、私のコードでの応用という意味です。
 
prostotrader:
Sleep()が何をするかという意味ではなく、私のコードでそれを使うという意味です。
インジケーターにポーズを実装するには?
 
Alexey Kozitsyn:
インジケーターにポーズを実装するには?
//+------------------------------------------------------------------+
// Custom indicator Check timer function                             |
//+------------------------------------------------------------------+
bool CheckTimer(const uint start_value, const uint per_value)
{
  uint end_value = GetTickCount();
  
  if(end_value < start_value)
  {
    if((start_value - end_value) >= per_value) return(true);
  }
  else
  {
    if((end_value - start_value) >= per_value) return(true);
  }
  return(false);
}
//+------------------------------------------------------------------+
//| Custom indicator Get server data function                        |
//+------------------------------------------------------------------+
int LoadServerData(const string a_symbol, ENUM_TIMEFRAMES period)
{
  int fail_cnt = 0;
//---
  while((fail_cnt < 5) && !IsStopped())
  {  
    long first_date = long(SeriesInfoInteger(a_symbol, PERIOD_M1, SERIES_SERVER_FIRSTDATE));
//---
    if(first_date > 0)
    {
      if(SymbolIsSynchronized(a_symbol))
      {
  //      Print( "LoadServerData: Первая дата на сервере есть. Пробуем получить локальные данные..." );
        return(GetLocalData(a_symbol, period));
      }  
    }
    else
    {
      uint start_tick = GetTickCount();
//---        
      while(!CheckTimer(start_tick, 10))
      {
        fail_cnt--;
        fail_cnt++;
      }
    }    
    fail_cnt++;
  }
// Print( "LoadServerData: Первой даты на сервере нет!" );
  return(0);  
}

これは古い例です。

GetTickCountの誤差が大きいので(最大16ms)、現在はGetMicrosecondCount()を使って います。

 
Gennady Mazur:
原則的にはそうしているのですが、Fortsの場合、注文はうまく受け入れられるのですが、次のティックではまだポジションがないことが多いのです......。
ここで、追加のオープニングが滑る可能性がある・・・部分的にこの方法で解決すると、注文が受理されたらint変数を増やし、増えた後はオープニングの条件が少し違うので、新たなオープニングは起こらないが・・・注文が受理されなければ変数は増えない、しかしここにコツがある・・・。状態を見誤って、追加注文が出始めてしまったのです。
あなたはすでに自分の質問に答えています。命令に従わなければならない。
 
prostotrader:

アレクセイ!

かなりリキッドな楽器です :)

2016.12.14 22:01:41.431 Trades  'xxxxx': cancel order #49931802 sell limit 1.00 GOLD-9.17 at 1190.2 placed for execution in 64926.078 ms

楽器(流動性)の問題ではなく、遅延の問題であり、それはどんな楽器でも起こりうることです。

EAを使ったトレードを積極的に始めてから約4年。

私のEAには一時停止はありません(INDICATORSでサーバーからデータがダウンロードされるのを待つための一時停止は除く)。

もし、ポーズがかかったら、それはEAのアルゴリズムが正しく動作していない証拠です :(

では、持っていない人はどうすればいいのでしょうか?もしかしたら、そこのアルゴリズムは、それが必要ないようなものなのかもしれません。
 
Gennady Mazur:
私もかなり長い間、EAの力を借りてのみトレードしてきました。でも、ほとんどMT4で。MT5のみでExpert AdvisorをLimitsを使って取引していますが、特に問題はありませんでした。私はスキャルパーやピップスダーであれば、Expert Advisorで一時停止するのは好きではありませんし、ましてやエントリーを逃すだけです。
一時停止が必要な場合はこの限りではありません。
理由: