どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 569

 
こんにちは!MQL4を勉強していると、ちょっとした疑問が出てきます。本サイトのチュートリアルに問題が掲載されています。ここで条件となるのが、「タスク25」。為替レートが指定したレベルより上昇した場合は、そのレベルを超えたことを示す言葉(最大100ポイント)をメッセージとして出し、それ以外の場合は、指定したレベルを超えていないことを知らせるという条件を実現するプログラムを作成します。
そして、その解決策を提案します。
//--------------------------------------------------------------------
extern double Level=1.3200;                     // Заданный уровень 
string Text[101];                               // Объявление массива
//--------------------------------------------------------------------
int init()                                      // Спец. ф-ия init()
  {                                             // Присвоение значений
   Text[1]="один ";            Text[15]="пятнадцать ";
   Text[2]="два ";             Text[16]="шестнадцать ";
   Text[3]="три ";             Text[17]="семнадцать ";
   Text[4]="четыре ";          Text[18]="восемнадцать ";
   Text[5]="пять ";            Text[19]="девятнадцать ";
   Text[6]="шесть ";           Text[20]="двадцать ";
   Text[7]="семь ";            Text[30]="тридцать ";
   Text[8]="восемь ";          Text[40]="сорок ";
   Text[9]="девять ";          Text[50]="пятьдесят ";
   Text[10]="десять ";         Text[60]="шестьдесят";
   Text[11]="одиннадцать ";    Text[70]="семьдесят ";
   Text[12]="двенадцать ";     Text[80]="восемьдесят ";
   Text[13]="тринадцать ";     Text[90]="девяносто";
   Text[14]="четырнадцать ";   Text[100]= "сто";
   // Вычисление значений
   for(int i=20; i<=90; i=i+10)                // Цикл по десяткам
     {
      for(int j=1; j<=9; j++)                  // Цикл по единицам
         Text[i+j]=Text[i] + Text[j];          // Вычисление значения   
     }
   return;                                     // Выход из init()
  }
//--------------------------------------------------------------------
int start()                                     // Спец. ф-ия start()
  {
   int Delta=NormalizeDouble((Bid-Level)/Point,0);// Превышение 
//--------------------------------------------------------------------
   if (Delta>=0)                                // Цена не выше уровня
     {
      Alert("Цена ниже уровня");                // Сообщение
      return;                                   // Выход из start()
     }
//--------------------------------------------------------------------
   if (Delta<100)                               // Цена более 100
     {
      Alert("Более ста пунктов");               // Сообщение
      return;                                   // Выход из start()
     }
//--------------------------------------------------------------------
   Alert("Плюс ",Text[Delta],"pt.");            // Вывод на экран
   return;                                      // Выход из start()
  }
//---------------------------------------------------------------------
По-моему в условных операторах неправильно проставлены знаки сравнения. Они должны быть с точностью до наоборот. Скажите прав ли я? И если нет, то почему так?  
 
Step:
こんにちは!MQL4を勉強している中で、ちょっとした疑問があります。このサイトのチュートリアルにある問題です。ここで、問題25の条件です。レートが指定したレベルを超えたら、超えたことを示すメッセージを出力し(最大100ポイント)、それ以外の場合は、超えていないことを伝えるプログラムを作成する。
そして、その解決策を提案します。


可能な解決策を表示します。トレーニングに便利です。

他の選択肢もある。他にも間違いがあります。

もっと自分を信じよう。実験

 
Step:
こんにちは!MQL4の勉強をしていて、ちょっとした疑問があります。タスクは、本サイトのチュートリアルにあります。ここで、問題25の条件です。レートが指定したレベルを超えた場合は、レートがレベルを超えたというメッセージを出力し(最大100ポイント)、それ以外の場合はレートが指定したレベルを超えていないというメッセージを出力する、という条件を実現するプログラムを作成しなさい。 そして、その解決策を提案します。


追伸

具体的には、この例のように配列を扱う場合の有用性です。

データを言葉で表現できること。

NormalizeDouble関数と定義済み Point変数を使用することです。

より簡単な趣味を選択できる可能性がある。

 

どうやら、クラス内で直接外部変数を宣言する方法はないようです。では、どのような選択肢があるのでしょうか。このクラスを使用するときにのみ必要となる、これらの外部固有の変数をExpert Advisor自体や他の場所で宣言したくない場合。唯一の選択肢は、これらの外部変数を宣言するインルーターを作ることだと思います。そして、その中にクラスが含まれているはずですよね?

そして、そのクラスを呼び出すために、クラス自体をインクルードする必要があります。そうなんですか?それとも、他のバリエーションがあるのでしょうか?

ただ、私にはよく見えません。ネストしたインクルードファイルの作成が多く...だから、そんな疑問があるんです。

それとも、通常のライブラリのように、クラスを宣言する前に外部変数を宣言し、必要なライブラリをインポートすることは可能なのでしょうか?こんな感じの意味です。

// Объявляем внешние переменные
extern type Var1;
extern type Var2;
extern type Var3;

// Подключаем требуемые библиотеки
//#include <LBase.mqh>
//+---
//#include <Logging.mqh>
#import "user32.dll"
     int GetAncestor;
     int PostMessageA;
#import
//
class CLogging
{
   protected:
 // защищенные данные
   public:
 // открытые данные
};
初めて見ました。だから、方向性は間違っていないのかなと...。
 
Expert Advisorにインジケータコードを転送するとエラーが発生する。 Commentでターミナル画面にグローバル変数として出力しています

if(BullBear!="")
{
retXB=(zz[A4]-zz[B4])/(zz[A4]-zz[X4]+0.000001);
retAC=(zz[C4]-zz[B4])/(zz[A4]-zz[B4]+0.000001);



それらをグローバル変数としてCommentで端末画面に出力する。ゼロはなく、マイナスの数字だけだった。その後、私は

//---- indicator buffers
double zz[1500];
まで

//---- indicator buffers
double zz[300];
を、元の場所に戻してください。エラーなし!その理由は何だったのでしょうか。インターネットもオフにしました。
 
semargl988:

Expert Advisorにインジケータコードを転送するとエラーが発生する。 コード部分のゼロ除算

...

それらをグローバル変数としてCommentで端末画面に出力する。ゼロはなく、マイナスの数字だけだった。その後、私は

...

に。

...

を、元の位置に戻してください。全くエラーなし原因は何だったのでしょうか?さらにインターネットを消した。

また、分数の分母にゼロを渡すことができない「ゼロ除算」というエラーも出ました。今、分割する前に、私は次のような正式なチェックをしています。

if(znamenatel==0)
{
 какое-то действие;
}

そして、エラーは消えました。つまり、プログラマが100%0がないと確信していても、分母=0の場合にどうするかをコンパイラに指示しなければならない。

 

こんにちは、コードについて教えてください。私はEAが基本的なことを行う必要があります - 垂直(すなわち、厳密に時間、価格ではない)線に近づいたときにポジションを開く、すなわち、私が理解するように120すなわちここで持っている指定されたshi間隔 - 2分です。ラインの色で買いか売りかを判断してください。インターネットで検索し、書き直したところ、次のようになりました。

void OnTick()
{
int AllObject = ObjectsTotal();
for ( int i = 0; i < AllObject; i++)
{

string NameObj = ObjectName(i);
Colorrr = ObjectGet(NameObj, OBJPROP_COLOR);
Vremyaaa = (ObjectGet(NameObj, OBJPROP_TIME) - shi);
if(Vremyaaa == TimeLocal())
break;
}

int kolpos = 0;

if((Colorrr == Green)||(Colorrr == Aqua)){operacia = "OP_BUY";}
if((Colorrr == Red)||(Colorrr == Purple)){operacia = "OP_SELL";}
for (int pos = 0; pos < OrdersTotal(); pos++)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true)
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
kolpos++;
}
}
}
if(kolpos == 0)
{
if (iTime(NULL,0,1) == Vremyaaa)
{
int ticket = OrderSend(Symbol(), operacia, Lot, Bid, 10, 0, 0, "5", Magic, 0, col);
}

}

}

なぜか取引されない。ログにエラーは書き込まれませんが...。
 
dmitriyriy666:

こんにちは、コードについて教えてください。私はEAが基本的なことを行う必要があります - 垂直(すなわち、厳密に時間、価格ではない)線に近づいたときにポジションを開く、すなわち、私が理解するように120すなわちここで持っている指定されたshi間隔 - 2分です。ラインの色で買いか売りかを判断してください。ネットで検索して書き直しました。

void OnTick()
{
int AllObject = ObjectsTotal();
for ( int i = 0; i < AllObject; i++)
{

string NameObj = ObjectName(i);
Colorrr = ObjectGet(NameObj, OBJPROP_COLOR);
Vremyaaa = (ObjectGet(NameObj, OBJPROP_TIME) - shi);
if(Vremyaaa == TimeLocal())
break;
}

int kolpos = 0;

if((Colorrr == Green)||(Colorrr == Aqua)){operacia = "OP_BUY";}
if((Colorrr == Red)||(Colorrr == Purple)){operacia = "OP_SELL";}
for (int pos = 0; pos < OrdersTotal(); pos++)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true)
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
kolpos++;
}
}
}
if(kolpos == 0)
{
if (iTime(NULL,0,1) == Vremyaaa)
{
int ticket = OrderSend(Symbol(), operacia, Lot, Bid, 10, 0, 0, "5", Magic, 0, col);
}

}

}

コードがなぜか取引されない。エラーのログが残らない...

端末の時刻と一致する場合はTimeLocal()でも良いですが TimeCurrent()の 方がより確実です。

operacia変数の型をintに変更し、OP_BUYとOP_SELLの引用符を削除しました

 
AlexeyVik:

端末の時刻と同じならTimeLocal() でも良いが、TimeCurrent()の 方が信頼 性が高い。

operacia変数の型をintに変更し、OP_BUYとOP_SELLの引用符を削除しました



ありがとうございます。TimeCurrentについて......確かに、私の時刻はサーバーの時刻と一致していません。直したが、まだ動かない...。ログにエラーを書き込まない。


追伸:前回の投稿では、スペースなしのコードがなぜか挿入されていました。でも、中括弧は全部正しくつけたつもりです。

 

MT4 - 625, ライブラリでフクロウをテストしようとするとテスターメッセージが表示される。

2014.03.29 18:38:48.753 'C:♪Program FilesAdmiral1 ♪MQL4 ♪Libraries ♪ingLib094.mq4' is not 32-bit version.

その前にフクロウは何事もなくコンパイルし、ライブラリも一文字もなかった。実際、まったく理解できない。

私のシステム(Windowsのことです)は32ビットで、他のは持ったことがありません。7番目。

図書館は私のネイティブなもので、ずっと持っています。新規構築でリアルタイムにうまくいく。他のフクロウも含めて。また、以前のバージョンのテスターでは問題なく使用できました。

しかし、テスターでは開こうとしないし、理由は指まで吸われてしまう。

そして、 すべてのマニュアルに 32ビットの場合については 一言も 書かれていない。