エラー、バグ、質問 - ページ 2906

 
サイト内検索が2日目から効かなくなる。
 

テスト時にストップ&テイクが効かない。スクリーンショットでは、SLとTPが設定された売り指値がトリガーされた例を示していますが、価格がどこに行ってもストップ(とテイク)はトリガーされません。どこを掘るの?

ファイル:
Screenshot_1.jpg  177 kb
 

ポジションについては、POSITION_TIME_UPDATE プロパティがあり、これは最後にポジションが変更された時刻である。

端末の注文には、そのようなプロパティはありません。でも、サーバーにはあるんですよね?


取引所における指値注文の変更は、指値注文の再発行:古い指値注文を削除して新しい指値注文を設定するという理解でよいでしょうか?

もしそうなら、修正はORDER_TIME_SETUPを 変更する必要があります。ところが、そうなっていない。

 

インジケーターチャートが消える

数時間作業すると、インジケータ・チャートが消えてしまうことが結構あります。

データの復元とインジケーターの計算を最小限にするために、データの読み込みと計算の段階を利用しています。

インジケータをチャートにインストールすると、すべてのステージが正常に 動作します。

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,  
                 const int prev_calculated, 
                 const datetime& time[], 
                 const double& open[], 
                 const double& high[], 
                 const double& low[], 
                 const double& close[], 
                 const long& tick_volume[], 
                 const long& volume[],
                 const int& spread[]  
)
{
  if(prev_calculated == 0)
  {
    switch (mar_data.stage)
    {
      case LOAD_TICKS:
        if(LoadTicks(time) == true)
        {
          //--- 
          mar_data.stage = READ_PRIM_TICKS;
        }
        return(0);
      break;
      case READ_PRIM_TICKS:
        if(ReadPrimTicks() == true)
        {
          //---
          mar_data.stage = READ_SEC_TICKS;
        }  
        return(0);
      break;
      case READ_SEC_TICKS:
        if(ReadSecTicks() == true)
        {
          //---
          mar_data.stage = FILL_DATA;
        }  
        return(0);
      break;
      case FILL_DATA:
        //---
        FillData();
        mar_data.stage = LOAD_TICKS;
      break;
    }
  } 
  else
  {
    //--- Live data ---
  }
  return(rates_total);
}

最後のステージでは、最初のステージが割り当てられるので、インジケータは(それがキーであるとき)データを再読み込みすることができます

mar_data.stage = LOAD_TICKS;

ただし、インジケーターをリセットしても、データは復元されません

機能

//+------------------------------------------------------------------+
//| Custom indicator Load ticks function                             |
//+------------------------------------------------------------------+
bool LoadTicks(const datetime &a_times[])
{
  int result = CopyTime(Symbol(), PERIOD_M1, start_time, end_time, mar_data.time_array);
  if(result > 0)
  {
    if(mar_data.time_array[result - 1] == a_times[ArraySize(a_times) - 1])
    {
      mar_data.b_cnt = result;
      result = CopyTicksRange(Symbol(), mar_data.pr_ticks, COPY_TICKS_INFO, ulong(start_time) * 1000, ulong(end_time) * 1000);
      if(result > 0)
      {
        if(mar_data.pr_ticks[result-1].time >= mar_data.time_array[ArraySize(mar_data.time_array) - 1]) 
        {
          mar_data.pr_cnt = result;
          datetime sec_time_array[];
          result = CopyTime(sec_symbol, PERIOD_M1, start_time, end_time, sec_time_array);
          if(result > 0)
          {
            result = CopyTicksRange(sec_symbol, mar_data.sec_ticks, COPY_TICKS_INFO, ulong(start_time) * 1000, ulong(end_time) * 1000);
            if(result > 0)
            {
              if(mar_data.sec_ticks[result-1].time >= sec_time_array[ArraySize(sec_time_array) - 1])
              {
                mar_data.sec_cnt = result;
                return(true);
              } else Print("Не хватает тиков ", sec_symbol, "!");
            } else Print("Не получены тики по символу ", sec_symbol, "!");
          } else Print("Не скопировано время баров по символу ", sec_symbol, "!");
        } else Print("Не хватает тиков ", Symbol(), "!"); 
      } else Print("Не получены тики по символу ", Symbol(), "!");
    } else Print("Не хватает баров по символу ", Symbol(), "!");
  } else Print("Не скопировано время баров по символу ", Symbol(), "!");
  return(false);
}

これのみを出力

"タイムバーがBR-1.21のシンボルにコピーされない!"。

しかし、それ以上は何も起こらない。

LoadTicks()の呼び出しがあるため、インジケーターを読み込む ときと同様にすべてのステップを繰り返す必要があります。

開発者の皆様、インジケーターが動かなくなるのはなぜですか?

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Каждый скрипт, сервис и эксперт работает в собственном отдельном потоке. Все индикаторы, рассчитываемые на одном символе, даже если они запущены на разных графиках, работают в одном потоке. Таким образом, все индикаторы на одном символе делят между собой ресурсы одного потока. В одном потоке с индикаторами также последовательно выполняются...
 
fxsaber:
サイト内検索がうまくいかないのは2日目です。

検索の裾野がずいぶん狭まりましたね。いろいろなものが見つかっていない。

 
ポジション/オーダーの 最終更新日時を知るにはどうしたらよいですか?
 
fxsaber:
自分のポジションや注文を 最後に変更 したのはいつなのか、どうやって知ることができますか?

位置時間更新

 
Igor_Gagarin:

位置時間更新

最後にボリュームを変更 した時刻です。エコーネット

 
fxsaber:

最後にボリュームを変更した時刻です。エコーズ・ネッティング

ポジションのオープニングタイ ムを出しています。何を聞いていたんですか?