[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 223

 
solnce600:

皆さん、こんばんは。

以下のコードで、なぜコンパイラがそう考えるのか、教えてください。

int Ticket変数が未定義である。

1つのエラーを発生させる

'Ticket' - variable not defined C:\Program FilesAlpari NZ MT4(2)\expertshhh.mq4 (18, 6)

しかし、以下のコードでは代入文の中でTicket変数も定義されており、コードは正常にコンパイルされます。

int Ticket変数はローカル変数で、次のティックでリセットされます。
 
Vinin:


おそらく一か所だけカッコが抜けている

問題解決、ありがとうございました。
 
TarasBY:
int Ticket変数はローカル変数で、次のティックでリセットされます。
ご指摘の件、承りました。 ありがとうございました。
 

この問題にぶつかったことがあります。

3000の入札価格値に対してdouble型の 1次元配列を初期化する必要がありますが、すべての値は異なっており、順序もありません。

カンマで区切られた各値を手動で入力しなければならず、現実的ではありません。

エクセルで試したのですが、浮動小数点ではなくドットを入れると、エクセルが数字を読み込んで間にカンマを入れてくれないのです。

最適な選択肢をご提案ください。


 

3つの変数を返し、それらをstart() に渡す簡単なExpert Advisorを書きました。

そして、各ティックでこれらのデータ(オブジェクトタイプ、価格1、価格2)が返される必要があります。

//+-------------------------------------------------------------------------------------+
//|                                                TradingByLine.mq4                    |
//|                                                              hoz                    |
//|                                                                                     |
//+-------------------------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

string objName;
int isObj,
    objType;
double price1,
       price2;

//+-------------------------------------------------------------------------------------+
//| Функция иницилизации                                                                |
//+-------------------------------------------------------------------------------------+
int init()
{

   

  return(0);
}
//+-------------------------------------------------------------------------------------+
//| Функция деиницилизации                                                              |
//+-------------------------------------------------------------------------------------+
int deinit()
{
//----
   
//----
  return(0);
}
//+-------------------------------------------------------------------------------------+
//| Блок поиска своих объектов                                                          |
//+-------------------------------------------------------------------------------------+
bool IsObjectFound(double& price1, double& price2, int& objType)
{
   for (int obj=0; obj<=ObjectsTotal()-1; obj++)
   {
      objName = ObjectName(obj);
      isObj = ObjectFind(objName);
      price1 = ObjectGet("objName", OBJPROP_PRICE1);
      price2 = ObjectGet("objName", OBJPROP_PRICE2);
      objType = ObjectType("objName");

      if (isObj != -1)
         return(true);
   }
   return(false);
}
//+-------------------------------------------------------------------------------------+
//| Функция start                                                                       |
//+-------------------------------------------------------------------------------------+
int start()
{
   if (!IsObjectFound(price1, price2, objType))
      return(0);
   Print("objType = ", objType);
   Print("price1 = ", price1, ", price2 = ", price2);

  return(0);
}

そして、このExpert Advisorをテスターの可視化モードで実行し、チャートに手で線を引いてみるのです。IsObjectFound() 関数で取得した描画価格とオブジェクトの種類が正しく返ってきません。以下は、そのログ出力です。

2013.03.16 20:12:46     2013.01.24 00:02  TradingByLine EURJPY,M1: objType = -1
2013.03.16 20:12:46     2013.01.24 00:02  TradingByLine EURJPY,M1: price1 = 0, price2 = 0
2013.03.16 20:12:46     2013.01.24 00:02  TradingByLine EURJPY,M1: objType = -1
2013.03.16 20:12:45     2013.01.24 00:01  TradingByLine EURJPY,M1: price1 = 0, price2 = 0
2013.03.16 20:12:45     2013.01.24 00:01  TradingByLine EURJPY,M1: objType = -1
2013.03.16 20:12:45     2013.01.24 00:01  TradingByLine EURJPY,M1: price1 = 0, price2 = 0
2013.03.16 20:12:45     2013.01.24 00:01  TradingByLine EURJPY,M1: objType = -1
2013.03.16 20:12:44     2013.01.24 00:01  TradingByLine EURJPY,M1: price1 = 0, price2 = 0

線は手描きなので、型などのパラメータがあります。

ライン

必要なパラメータが返されないのはなぜですか?

 
solnce600:

この問題にぶつかったことがあります。

3000の入札価格値に対してdouble型の1次元配列を初期化する必要がありますが、すべての値は異なっており、順序がありません。

カンマで区切られた各値を手入力するのは現実的ではありません。

エクセルで試しましたが、浮動小数点の代わりにドットを入れるとエクセルが数字を読み込んで間にカンマを入れてくれません。

最適な選択肢をご提案ください。


Excelは読める、どうやったかもっと詳しく教えてくれ
 
hoz:

3つの変数を返し、それらをstart() に渡す簡単なExpert Advisorを書きました。

そして、各ティックでこれらのデータ(オブジェクトタイプ、価格1、価格2)が返される必要があります。

そして、このExpert Advisorをテスターの可視化モードで実行し、チャートに手で線を引いてみるのです。IsObjectFound() 関数で取得した描画価格とオブジェクトの種類が正しく返ってきません。以下は、そのログ出力です。

線は手描きなので、型などのパラメータがあります。

必要なパラメータが返されないのですが?

私たちは

price1 = ObjectGet("objName", OBJPROP_PRICE1);
      price2 = ObjectGet("objName", OBJPROP_PRICE2);
      objType = ObjectType("objName");

objName を引用符で囲まないでください。オブジェクト名(文字列)を格納する変数名(プログラム文中の識別子)です。

 
alsu:

であるべきです。

objName を引用符で囲まないでください。オブジェクト名(文字列)を格納する変数名(プログラム文中の識別子)です。



ちなみに、ドキュメントではそう考えていない。そこで混乱に巻き込まれたのです。

ドキュメンテーションエラー

 
alsu:

Excelは読めるので、もっと詳しくやり方を教えてください。

100個の値の行で、最初の記号の後にカンマがある場合(つまり、価格)。

行のハイライト表示

ホーム - 検索と置換

カンマを全てドットに変更-成功。

ここで、値の間にカンマを入れる必要があります。

セルの形式を選択する

すべてのフォーマット

文字列の数値形式を表示するアクティブフィールドで、最後にカンマを入れる

エクセルは、私が入力したフォーマットを処理できないと言っています。

 
hoz:


ちなみに、ドキュメントではそう考えていない。だから、誤解されるんです。

引用符は文字列変数のVALUEであって、変数そのものではありません!!!!