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

 
Pyro:

初期化時にグローバル変数以外は全てリセットされます。
また、Expert Advisorが動作しているコンピュータの電源を切ったり、サーバーがダウンした場合はどうなるのでしょうか?
 
artmedia70:
そしてここで、GVはEA変数ではなく、ターミナル変数であることを明確にする必要があります。 。

本を読んで勉強するようになりました。グローバル変数と Global Variablesは別物だということがわかりました。

ところで、散々質問したエラー129の件ですが。5桁のDCを持っていることです。

私のExpert Advisorはスリッページ2です、そのためか価格についていけなくなりました。今度は15pipsに設定しました。

 
artmedia70:
そしてここで、GVはEA変数ではなく、ターミナル変数であることを明確にしておく必要がある。


EAは、初期化時に値を保存するだけで、それを使って動作することができるということです。
 
Forexman77:
コンピュータの電源を切ったり、EAが動作しているサーバがクラッシュした場合はどうなりますか?


ここからが面白いんです。グローバル変数はキャッシュに保存され、状況によってはファイルに書き込まれます。しばらくしてからか、初期化中のようです。以前は、再起動時にgvariables.dat(グローバル変数の値)が消えてしまうことがあったんです。これを考慮する必要があります。あるいは、単にキャッシュからディスクにコピーする時間がなかっただけかもしれません。すでにディスク上にあり、キャッシュにないという保証はないということです。間違っていたら訂正してください。


Forexman77:

本を読んで勉強するようになりました。グローバル変数とGlobal Variablesは別物だと今更ながら知りました。

ちなみに、よく聞かれたエラー129について。5桁のDCを持っていることです。

私のExpert Advisorはスリッページ2です、そのためか価格についていけなくなりました。私なら15pipsに設定します。


だからというわけでもないと思います。5桁の 数字に3がつくんです。すべて正常に開きます。私の記憶では、ブローカーは、点はやはり基本点、普遍点(ゼロの次の4桁目)、分数は分数点ということで合意しています。6,7,8桁の数字を入力するときに、いちいち「点」の意味を変えなくていいように。
 
Pyro:

ここからが面白いんです。グローバル変数は、キャッシュに保存され、状況によってはファイルに書き込まれます。ある一定の期間が過ぎると、なんとなくですが。実運用中、コンピュータの突然の再起動により、gvariables.dat(グローバル変数の値が格納されているファイル)が単純に消失してしまうことがあった。これを考慮する必要があります。あるいは、単にキャッシュからディスクにコピーする時間がなかっただけかもしれません。すでにディスク上にあり、キャッシュにないという保証はないということです。間違っていたら訂正してください。 。
書いてみてから、パソコンの電源を切るのもいいかもしれませんね。そして、電源を入れたら、Alertを試してみてください。とはいえ、今のところスタティック変数と フラグしか使っていないので、グローバル変数については何とも言えません。
 
Forexman77:
録画して、パソコンの電源を切ってみるのもいいかもしれませんね。そして、電源を入れたら、Alertを呼び出してみてください。とはいえ、私は今のところスタティック変数とフラグしか使っておらず、グローバル変数については何とも言えません。 。


メニュー→ツール→グローバル変数で 調べればいいんです。そこにリストがある。またはGlobalVariableCheck。私の経験では、すべてを物理的なファイルに保存したほうがいいと思いますけどね。
 
こんにちは!
私の推理に誤りがあることを見つけてください。

インジケーターの作成、つまりメインウィンドウに付属する追加ウィンドウへのライン表示で悩んで2日目です。私見では、未計算のバーの上に計算を行い、計算結果の値をバッファに与えることが必要であると考えます。今回は、より複雑なコードを例にしています(比較的巨大なコードを扱うのが好きなんです)。ここに「クリエイティブのクリアランス」.

//+--------------------------------------------+
#property indicator_separate_window
#property indicator_minimum -10
#property indicator_maximum 10
#property indicator_buffers 1
#property  indicator_color1 Blue
extern double N = 1;
//+--------------------------------------------+
//Deklaration                                  |
//+--------------------------------------------+
double A; double C;       
double M; double D;
double L; double I;
double B; double F;
double K; double Buf_0[];
double G; 
//+--------------------------------------------+
int init(){
SetIndexBuffer(0,Buf_0);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
return; }
//+--------------------------------------------+
int start() {
//Level 1
A = iRSI(Symbol(),0,10,0,0);
M = iRSI(Symbol(),0,20,0,0);
L = iRSI(Symbol(),0,15,0,0);
B = iStochastic(Symbol(),0,10,6,6,0,0,0,0);
K = iStochastic(Symbol(),0,10,6,6,0,0,1,0);
C = iADX(Symbol(),0,10,0,0,0);
D = iADX(Symbol(),0,10,0,1,0);
I = iADX(Symbol(),0,10,0,2,0);
F = iRVI(Symbol(),0,10,0,0);
  //Level 2
  Buf_0[0] = N *(((B + F) / K) - ((D + I) / C) + ((A + M) / L));
  return; } 
//+-------------------------------------------+ 

.

バッファの値が「0」であることがわかります。つまり、このインジケータは、プラットフォームが起動した瞬間から線を引くことになります。そして、実際のデータだけでなく、過去のデータも必要です。

このコード(MQ4チュートリアルから引用)に記載されている情報を使用しました。

//--------------------------------------------------------------------
// separatewindow.mq4 
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
#property indicator_separate_window // Отображение в отдельном окне
#property indicator_buffers 1       // Количество буферов
#property  indicator_color1 Blue     // Цвет первой линии
#property  indicator_color2 Red      // Цвет второй линии
 
extern int History  =50;            // Колич.баров в расчётной истории
extern int Aver_Bars=5;             // Количество баров для расчёта
 
double Buf_0[];                     // Объявление индикаторного массива
//--------------------------------------------------------------------
int init()                          // Специальная функция init()
  {
   SetIndexBuffer(0,Buf_0);         // Назначение массива буферу
   SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
   return;                          // Выход из спец. ф-ии init()
  }
//--------------------------------------------------------------------
int start()                         // Специальная функция start()
  {
   int i,                           // Индекс бара
   n,                               // Формальный параметр
   Counted_bars;                    // Количество просчитанных баров 
   double
   Sum_H,                           // Сумма значений High за период
   Sum_L;                           // Сумма значений Low  за период
//--------------------------------------------------------------------
   Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
   i=Bars-Counted_bars-1;           // Индекс первого непосчитанного
   if (i>History-1)                 // Если много баров то ..
      i=History-1;                  // ..рассчитывать заданное колич.
   while(i>=0)                      // Цикл по непосчитанным барам
     {
      Sum_H=0;                      // Обнуление в начале цикла
      Sum_L=0;                      // Обнуление в начале цикла
      for(n=i;n<=i+Aver_Bars-1;n++) // Цикл суммирования значений 
        {
         Sum_H=Sum_H + High[n];     // Накопление суммы макс.значений
         Sum_L=Sum_L + Low[n];      // Накопление суммы мин. значений
        }
      Buf_0[i]=(Sum_H-Sum_L)/Aver_Bars;// Знач. 0 буфера на i-ом баре
      i--;                          // Расчёт индекса следующего бара
     }
//--------------------------------------------------------------------
   return;                          // Выход из спец. ф-ии start()
  }
//--------------------------------------------------------------------
必要なものを選んで、手に入れる...。
extern int History  =50;            // Колич.баров в расчётной истории
extern int Aver_Bars=5;             // Количество баров для расчёта
double Buf_0[];                     // Объявление индикаторного массива
int start()                         // Специальная функция start()
  {
   int i,                           // Индекс бара
   n,                               // Формальный параметр
   Counted_bars;                    // Количество просчитанных баров 
   Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
   i=Bars-Counted_bars-1;           // Индекс первого непосчитанного
   if (i>History-1)                 // Если много баров то ..
      i=History-1;                  // ..рассчитывать заданное колич.
      Buf_0[i]=(Sum_H-Sum_L)/Aver_Bars;// Знач. 0 буфера на i-ом баре
      i--;  

そして、コメントを削除して論理的に分割することで「パレードビュー」に持っていくと、こうなります。

//|+--------------------------------------+
//|Inputs                                 |
//|+--------------------------------------+
extern int History  =50;
//|+--------------------------------------+
//|Declaration                            |
//|+--------------------------------------+
double Buf_0[];
int i;
int n;
int Counted_bars;
//|+--------------------------------------+
//| Start?                                |
//| Yes, babe!                            |
//|+--------------------------------------+
int start(){
//+-----------+
//Level 1 
//+-----------+
Counted_bars=IndicatorCounted();
i=Bars-Counted_bars-1;
  //+-----------+
  //Level 2
  //+-----------+
  if (i>History-1) i=History-1;
    //+------------+
    //Level 3 
    //+------------+
    Buf_0[i]= 
    i--;  
//+---------------------------------------+

ここでは、「メイン」コードと合成する必要のあるオブジェクトが残されています。フュージョンを実行すると、以下のようなコードが表示されます。

//+--------------------------------------------+
#property indicator_separate_window
#property indicator_minimum -10
#property indicator_maximum 10
#property indicator_buffers 1
#property  indicator_color1 Blue
//|+--------------------------------------------+
//|Inputs                                       |
//|+--------------------------------------------+
extern double N = 1;
extern int History  =50;
//|+--------------------------------------------+
//|Deklaration                                  |
//|+--------------------------------------------+
double A; double C;       int i;
double M; double D;
double L; double I;       int Counted_bars;
double B; double F;
double K; double Buf_0[];
double G; 
//|+--------------------------------------------+
int init(){
SetIndexBuffer(0,Buf_0);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
return; }
//|+--------------------------------------------+
int start() {
       //|+-----------+
       //|Level 1     |
       //|+-----------+
       A = iRSI(Symbol(),0,10,0,0);
       M = iRSI(Symbol(),0,20,0,0);
       L = iRSI(Symbol(),0,15,0,0);
B = iStochastic(Symbol(),0,10,6,6,0,0,0,0);
K = iStochastic(Symbol(),0,10,6,6,0,0,1,0);
       C = iADX(Symbol(),0,10,0,0,0);
       D = iADX(Symbol(),0,10,0,1,0);
       I = iADX(Symbol(),0,10,0,2,0);
       F = iRVI(Symbol(),0,10,0,0);
   Counted_bars=IndicatorCounted();
              i=Bars-Counted_bars-1;
         //+-----------+
         //Level 2     |
         //+-----------+
         if (i>History-1) i=History-1;
         Buf_0[i] = N *(((B + F) / K) - ((D + I) / C) + ((A + M) / L));
         return; } 
//+-------------------------------------------+
プログラミングの際、「main」のコードを装飾的に変更し、「appendage」のコードからいくつかの値を削除しました。カスタムインジケータで 使用されるテクニカル指標は、時間の長い期間にわたって、関数 " y = x " のグラフを構築する値を与えることができないので、コードを実行した後、私は、私の推論のエラーを示す水平線に気づいた。

あらすじ
私の名前はジョン(ユージン、ただしアメリカ風)です。

私は15歳で、取引を始めて5日目ですが、為替取引の分野である指標分析やグラフ分析(要するにT.A. :) の習得に大きな進歩を感じています。)
手動取引」は、だんだん期待できなくなる気がして、そのまま「自動取引」に移行することにしました。

すべての不十分な判断に「ツッコミ」を入れる!もっと知りたいし、皆さんのコメントも参考になります。

 
Link_x:
こんにちは。
私の推理に誤りを発見してください。

インジケーターの作成、つまりメインウィンドウに付属する追加ウィンドウへのライン表示と格闘している2日目はここで終了です。私見ですが、未計算のバーの上に計算を行い、計算結果をバッファに渡すことが必要だと思います。今回は、より複雑なコードを例にしています(比較的巨大なコードを扱うのが好きなんです)。ここに「クリエイティビティのクリアリング」がある:

.

つまり、このインジケータは、トレーディング・プラットフォームが起動した時点から線を引くことになります。そして、実際のデータだけでなく、過去のデータも必要です。

このコードに記載されている情報(MQ4チュートリアルから引用)を使用しました。

必要なものを切り分けると...

そして、コメントを削除して論理的に分割することで「パレードビュー」に持っていくと、こうなります。

ここでは、「メイン」コードと合成する必要のあるオブジェクトが残されています。フュージョンを実行したところ、このコードが表示されました。

プログラミングの際、「メイン」のコードを装飾的に変更し、「アペンド」のコードからいくつかの値を削除しています。 コードを開始した後、私はカスタムインジケータで使用されるテクニカル指標は、長い時間の間に、関数 " y = x "のグラフを構築する値を与えることができないように、私の推論のエラーを示す水平線に気づいた。

あらすじ
私の名前はジョン(ユージン、ただしアメリカ風)です。

私は15歳で、トレーディングを始めて5日目ですが、為替ディーリングの分野である指標分析とチャート分析(要するにT.A. :))の勉強がかなり進んでいるように感じます。
手動取引」はだんだん期待できなくなる気がして、そのまま「自動取引」に移行することにしたんです。

すべての不十分な判断を "いなす"!もっと知りたいし、皆さんのコメントも参考になります。

冒頭がいいんですよ。

History変数に注目し、別の値を代入してみてください。

//                Джон(Евгений).mq4 

//+--------------------------------------------+
#property indicator_separate_window
//#property indicator_minimum -10
//#property indicator_maximum 10
#property indicator_buffers 1
#property  indicator_color1 Blue
//|+--------------------------------------------+
//|Inputs                                       |
//|+--------------------------------------------+
extern double N = 1;
extern int History  =50;
//|+--------------------------------------------+
//|Deklaration                                  |
//|+--------------------------------------------+
double A; double C;       int i;
double M; double D;
double L; double I;       int Counted_bars;
double B; double F;
double K; double Buf_0[];
double G; 
//|+--------------------------------------------+
int init(){
SetIndexBuffer(0,Buf_0);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
return; }
//|+--------------------------------------------+
int start()
{
       //|+-----------+
       //|Level 1     |
       //|+-----------+
 for( i=0; i<History; i++)
    {    
       A = iRSI(Symbol(),0,10,0,i);
       M = iRSI(Symbol(),0,20,0,i);
       L = iRSI(Symbol(),0,15,0,0);
       B = iStochastic(Symbol(),0,10,6,6,0,0,0,i);
       K = iStochastic(Symbol(),0,10,6,6,0,0,1,i);
       C = iADX(Symbol(),0,10,0,0,i);
       D = iADX(Symbol(),0,10,0,1,i);
       I = iADX(Symbol(),0,10,0,2,i);
       F = iRVI(Symbol(),0,10,0,i);
    Buf_0[i] = N *(((B + F) / K) - ((D + I) / C) + ((A + M) / L));
   }
 return;
} 
//+-------------------------------------------+
 
Link_x:
こんにちは。
私の推理に誤りを発見してください。

インジケータの開発2日目が終わろうとしていますが、メインウィンドウに付属する追加ウィンドウにラインを表示させるのに苦戦しています。私見では、未計算のバーの上で計算を行い、計算結果に値をつけてバッファに入れることが必要だと思います。今回は、より複雑なコードを例にしています(比較的巨大なコードを扱うのが好きなんです)。ここに「クリエイティビティのクリアリング」がある:

.

つまり、このインジケータは、トレーディング・プラットフォームが起動した時点から線を引くことになります。そして、実際のデータだけでなく、過去のデータも必要です。

このコードに記載されている情報(MQ4チュートリアルから引用)を使用しました。

必要なものを切り分けると...

そして、コメントを削除して論理的に分割することで「パレードビュー」に持っていくと、こうなります。

ここでは、「メイン」コードと合成する必要のあるオブジェクトが残されています。フュージョンを実行したところ、このコードが表示されました。

プログラミングの際、「メイン」のコードを装飾的に変更し、「アペンド」のコードからいくつかの値を削除しています。 コードを開始した後、私はカスタムインジケータで使用されるテクニカル指標は、長い時間の間に、関数 " y = x "のグラフを構築する値を与えることができないように、私の推論のエラーを示す水平線に気づいた。

あらすじ
私の名前はジョン(ユージン、ただしアメリカ風)です。

私は15歳で、トレーディングを始めて5日目ですが、為替ディーリングの分野である指標分析とチャート分析(要するにT.A. :))の勉強がかなり進んでいるように感じます。
手動取引」はだんだん期待できなくなる気がして、そのまま「自動取引」に移行することにしたんです。

すべての不十分な判断を "いなす"!もっと知りたいし、皆さんのコメントも参考になります。


なぜそれが必要なのか、ループ(for, wile, while do)に向かって掘り下げ始めてください )))


もし、過去のデータの値が必要なら、ループの中でまさにこのデータを列挙することなしにはできません ;)

上記でHistoryの例を挙げましたが、これはインジケーターが処理するヒストリーのバー数を設定するもので、そのように進めてください。

 


写真では、出力すべき場所に矢印で印を付けています。何が問題なのか理解できない。時間を覚えて入るんです。

そして、時間が1期間のオフセットを持つエントリよりも長く、価格が3日間MA分以下であるときに終了します。

コードは以下の通りです。

signal =   MA_6_t - iClose(Symbol(),Period(),0);
MA_2_t=iMA(NULL,0,3,0,MODE_EMA,PRICE_LOW,0); 
static datetime t;

if  (signal > 0.006) 
          {                                          
          Opn_S=true; 
          t=Time[0];                      
          }
if  (Bid <= MA_2_t)
      {
       if (Time[1]>t)
          {                                      
          Cls_S=true;         
          }
      }
いかがでしょうか?