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

 
fxsaber:

著者が非常勤の司会者である場合。

むしろ、モデレーター兼パートタイムのコーダー。

 
fxsaber:
KBのEA作者が、自分のコードの誤りを指摘する関連ディスカッションの第三者コメントを削除するのは正しいことですか?

いいえ、もちろんです。

 
fxsaber:
KBのEAの作者が、自分のコードの誤りを指摘する関連するディスカッションの第三者のコメントを削除するのは正しいことですか?
いいえ、もちろんそんなことはありません。このようなコメントは、その誤りを正すことに貢献します。黙殺したり、潰したりすると、KBが悪いマニュアルになる。
 

意味がわからない、MQLで逆にやる意味はあったのか?

C++ VS2017
エムエルシー
printf( "%s", ... )
printf( "%S", ... )
printf( "%S", ... )
printf( "%s", ... )
printf( "%c", ... )
printf( "%C", ... )
printf( "%C", ... )
printf( "%c", ... )
実際、MQL::printfはCPP::wprintfに対応しますが、MQLにはCPP::printfのアナログは存在しません。
 
A100:

意味がわからない、MQLで逆にやる意味はあったのか?

C++ VS2017
エムエルシー
printf( "%s", ... )
printf( "%S", ... )
printf( "%S", ... )
printf( "%s", ... )
printf( "%c", ... )
printf( "%C", ... )
printf( "%C", ... )
printf( "%c", ... )
MQL::printf は CPP::wprintf に相当しますが、MQL には CPP::printf のアナログはありません。
MQL5はすべてユニコードなので、1バイト文字列は完全に捨てました。
 
Renat Fatkhullin:
MQL5はすべてユニコードなので、1バイト文字列は完全に捨てました。

完全に信じているわけではありませんすべてがうまくいく。

void OnStart()
{
        uchar ch[] = { 0x41,0x6E,0x73,0x69,0x20,0x69,0x73,0x20,0x61,0x6C,0x69,0x76,0x65,0x21 };
        string ansi;
        for ( int i = 0, j = 0; i < ArraySize( ch ); i+=2, j++ )
                StringSetCharacter( ansi, j, ch[ i ] | ch[ i + 1 ] << 8 );
        printf( "%S", ansi );
}

結果:Ansiは生きていた

 
A100:

完全に信じているわけではありませんすべてがうまくいく。

結果:Ansiは生きていた

バイナリをユニコードにパッキングして、システム関数経由の呼び出しで爆発するリスクを得るのは、賢明ではありません。

このような試みは、おそらく後でフィルタリングされるでしょう。

 
Renat Fatkhullin:

システム機能の呼び出しで爆発するリスクを負うのは理不尽だ。

文字列はゼロで終わることが保証されているので、誇張しないでください。さらに、マルチバイト文字と一緒にシングルバイト文字も実はユニコードの一部で、MQLではすべて正常に動作し、Expertsタブで通常の(あのひどい等幅フォントではなく)フォントで出力することが可能です。

これは、uchar[]を引数に持つDLL関数の呼び出しを禁止するようなもので、ユーザが誤ってuchar[]を埋めてしまう(例えば、末尾が0でない)ことを恐れているのですが、多くのシステム関数ではushort[](ちなみにこれも誤って埋めることができます)ではなく、正確にuchar[]を要求します。

 

2行目は、人間(等幅ではない)フォントでの出力です。このように、等幅フォントを ::ArrayPrint()のみに残すことは技術的に容易である。

 

こんにちは。このエラーの原因究明をお願いします。mql4からmql5へインジケータを移行しています。iHighの機能については、以下の「シェル」を使用しています。

double iHigh(string symbol,ENUM_TIMEFRAMES tf,int index)
  {
   if(index < 0) return(-1);
   double Arr[1];
   if(CopyHigh(symbol,tf,index,1,Arr)>0)
      return(Arr[0]);
   else
     {
      Print(__FUNCTION__,GetLastError());
      return(-1);
     }
  }

その結果、Symbol()関数が 返す文字列がsymbolパラメータとして渡されるにもかかわらず、エラー4301: "Unknown symbol "が発生しました。以下は、iHighを呼び出す関数のコードの一部です。

ENUM_TIMEFRAMES tf=Period();
   string symbol = Symbol();
   if(filtr1==false) 
      return(true);  
   int i1,i2=0; 
   for(i1=i+1; i2<6; i1++)
     {
      
      if(iLow(symbol,tf,i1)<=iLow(symbol,tf,i1+1) && 
         iHigh(symbol,tf,i1)>=iHigh(symbol,tf,i1+1)) 
        {
         break; //выход из цикла
        }
      else
        {
         i2++;
        }
     }