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

 
DEAL_TIME_MSCが 0を返す場合
// Время в миллисекундах первой балансовой сделки (DEAL_TIME_MSC) в тестере равно нулю
int OnInit()
{
  if (HistorySelect(0, TimeCurrent()) && HistoryDealsTotal())
  {
    Print((datetime)HistoryDealGetInteger(HistoryDealGetTicket(0), DEAL_TIME)); // Время балансовой сделки
    Print(HistoryDealGetInteger(HistoryDealGetTicket(0), DEAL_TIME_MSC));       // Это же время в мс равно нулю
  }

  return(INIT_FAILED);
}
 

最適化中に停止を押して、最適化を再開しても、このエントリーになるので、行きません

Core 1  occupied by another terminal
Core 2  occupied by another terminal
 
テスターは、最適化チェックされていない入力パラメータに対してParameterSetRangeを呼び出さない。このため、ParametersGetRangeは、対応するStart、Step、Stopの値に対してゼロを返します。これはまったく正しくない。例えば、このため、テスター自体の完全なSETファイルを生成したり、入力パラメータの最適化範囲がユーザーによって誤って設定されている場合に、それを修正することは不可能です。
 
OnTesterInitでParameterGetRangeが 動作しない。
sinput int Range = 5;

#define  PRINT(A) Print(#A + " = " + (string)(A));

void PrintParameter( const string Name, const string From )
{
  PRINT(From)
  
  bool Enable;
  long Value, Start, Step, Stop;
  
  if (ParameterGetRange(Name, Enable, Value, Start, Step, Stop))
  {
    PRINT(Start)
    PRINT(Step)
    PRINT(Stop)
    PRINT(Value)
    PRINT(Enable)
  }   
}

void OnTesterInit()
{
  ParameterSetRange("Range", true, 5, 1, 2, 3); // Задали ненулевыми все значения
  
  PrintParameter("Range", __FUNCTION__); // Возвращает одни нули
}

void OnTesterDeinit()
{
  PrintParameter("Range", __FUNCTION__); // Работает нормально
  
  ChartClose();
}

void OnTesterPass()
{
  PrintParameter("Range", __FUNCTION__); // Работает нормально
}

int OnInit()
{
  uchar Data[];
  
  FrameAdd(NULL, 0, 0, Data);
  
  return(INIT_FAILED);
}
 
fxsaber:
多くの文字列を素早く足し算する方法(例:文字列で取引報告書を作成する)。

結果

赤色で表示された、どうにも説明のつかない事実があります。

メモリプールの特殊性は、メモリプールの最初の呼び出しSumString2は、システムからのメモリと "飽和 "され、2回目は、メモリは、もはやシステムから要求されています。

SumString1 を修正することをお勧めします。

ulong SumString1( string TmpStr, const int Amount )
{
  const ulong StartTime = GetMicrosecondCount();

  string Str;
  StringInit(Str,Amount * StringLen(TmpStr) + 1);            << обеспечим строке приёмный буфер

  for (int i = 0; i < Amount; i++)
    Str += TmpStr;

  return(GetMicrosecondCount() - StartTime);
}
 
fxsaber:

エディターについて

  • Metaeditorで以下の行を入力すると、ツールチップ(オプション付きのツールチップの正しい名称は何でしょうか)GetMicrosecondCountが表示されません。
    DoubleToString(GetMicro

ハイライトが巧妙で、引数DoubleToStringはdouble、GetMicrosecondCountは ulongでなければなりません。

このような仕組みになっているのでしょう。

DoubleToString( (double)GetMicro
 
fxsaber:

任意の入力パラメータの名前を文字列として取得する方法について、何か思い当たることはありませんか?

input double dParam1 = 1.0; // Double
input int iParam2 = 2;      // Integer

Print( InputToString( dParam1 ) ); // "dParam1"
Print( InputToString( iParam2 ) ); // "iParam2"

template<typename T>
string InputToString(T param)
{
   ???
}
 
Andrey Khatimlianskii:

任意の入力パラメータの名前を文字列として取得する方法について、何か思い当たることはありませんか?

input double dParam1 = 1.0; // Double
input int iParam2 = 2;      // Integer

#define  TOSTRING(A) (#A)

Print( TOSTRING( dParam1 ) ); // "dParam1"
Print( TOSTRING( iParam2 ) ); // "iParam2"
 
fxsaber:

素晴らしい!ありがとうございます。

また、単一のテスター実行時にEAインスタンスのリストを取得するには?設定ファイルをDLLで読み込まずに
最適化後のテストで使用されるパラメータの表示(ファイルおよびメイン変数経由)が便利になりましたが、1つだけ不便な点があり、すべてのパラメータを手動でリストアップする必要があります。

 
Andrey Khatimlianskii:

シングルテスターの実行時に、EAインスタンスのリストが表示されますか?

できません。最適化モードのみです。

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

バグ、バグ、質問

fxsaber さん 2017.07.25 11:27

少なくともシングルランモードでEAの入力パラメータを 知るには?

指標には、IndicatorParametersがあります。

最適化のために、FrameInputsがあります。

しかし、EAのシングルランやノーマルランでは、何も起こりません。