MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 673

 

最後の答えの後、絵はより明確になり、最も明白なのは、私はプログラマーになる運命にはないということです:-)

今までは、一番シンプルなリストから始めて、こんな感じになりました。


2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[4] = 86.09999999999 2018.10.15 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[3] = 85.98999999999999 2018.10.16 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[2] = 86.76000000000001 2018.10.17 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[1] = 86.5 2018.10.18 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[0] = 85.72 2018.10.19 00:00:00



何らかの理由で、どちらかのポイントから有効数字2桁の次元を超えるケースもある。

そして、これは計算のエラーもなく、チャートベースtmp1[i]=close[i]から価格値を出力しているだけで、このようになります。

直す方法、無視する方法はないのでしょうか?



 

そこから5に関係するものをすべて削除し、4のテンプレートを入手することができます。


これは、5点と4点の違いがわかる人が書けばいいのであって、間違いなく私ではありません :-)


//--- Проверка количества доступных баров
   if(rates_total<fmax(period_ma,4)) return 0;


4という数字はどこから来たのか、その神聖な意味とは?

 
psyman:


これは、5点と4点の違いがわかる人が書けばいいのであって、間違いなく私ではありません :-)



4という数字はどこから来たのか、どんな神聖な意味を持っているのか。

確かに聞きもしないし、読みもしない...。していました。

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

MQL4初心者の質問、支援、アルゴリズムやコードに関するディスカッションなど。

アルチョム・トリシキン さん 2018.10.18 09:26

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--- Проверка количества доступных баров (1 - минимально, 4 - оптимально для большинства расчётов. Но всё "по месту"...)
   if(rates_total<4) return 0;
//--- Проверка и расчёт количества просчитываемых баров
   int limit=rates_total-prev_calculated; // 0 - пришел новый тик, новый бар формироваться не начал. 1 - пришел новый тик и начал формироваться новый бар.
   if(limit>1) 
               // если вписать "limit>0", то на нулевом баре будет расчёт только нулевого бара, на каждом новом баре будет полный перерасчёт всей истории
               // если вписать "limit>1", то на нулевом баре будет расчёт только нулевого бара, на открытии нового бара - пересчёт первого и нулевого,
               // при подгрузке истории и на первом запуске - перерасчёт всей истории
     {
      limit=rates_total-1;
      // здесь должна быть инициализация всех используемых буферов индикатора необходимыми значениями (обычно EMPTY_VALUE и 0)
     }
//--- Расчёт индикатора
   for(int i=limit; i>=0 && !IsStopped(); i--)
     {
      // необходимые действия по расчёту индикатора
     }

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

 
psyman:

最後の答えの後、絵はより明確になり、最も明白なのは、私はプログラマーになる運命にはないということです:-)

今までは、一番シンプルなリストから始めて、こんな感じになりました。


2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[4] = 86.0999999999 2018.10.15 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[3] = 85.98999999999999 2018.10.16 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[2] = 86.76000000000001 2018.10.17 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[1] = 86.5 2018.10.18 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[0] = 85.72 2018.10.19 00:00:00



何らかの理由で、どちらかのポイントから有効数字2桁の次元を超えるケースもある。

そして、これは計算のエラーもなく、チャートベースtmp1[i]=close[i]から価格値を出力しているだけのことです。

直す方法、無視する方法はないのでしょうか?



大丈夫です。端数を表示するには、DoubleToString() を必要な精度で使用するだけです。この場合、必要な精度はDigits()でなければなりません。

 
psyman:

最後の答えの後、絵はより明確になり、最も明白なのは、私はプログラマーになる運命にはないということです:-)

今までは、一番シンプルなリストから始めて、こんな感じになりました。


2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[4] = 86.09999999999 2018.10.15 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[3] = 85.98999999999999 2018.10.16 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[2] = 86.76000000000001 2018.10.17 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[1] = 86.5 2018.10.18 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[0] = 85.72 2018.10.19 00:00:00


何らかの理由で、どちらかのポイントから有効数字2桁の次元を超えるケースもある。

そして、これは計算のエラーもなく、チャートベースtmp1[i]=close[i]から価格値を出力しているだけのことです。

これを何らかの方法で打ち消すか、無視するか。

プログラムを書けるようになるには、誰もがそこからスタートします。たくさん読んで、自分なりのコードを書いてみることです。

実数の精度、仮数、メモリへの格納方法、ネットでググればわかるが、格納の原理はどこも同じだ。

美しい出力が必要な場合は DoubleToStr() を使用します。

 
Igor Makanu:

これらは実数の一般的な値です。プログラムを書くことを学ぶことはできますし、誰もがそこから始めます - 多くの本を読み、自分自身のコードを書いてみる必要があります。

実数の精度、仮数、メモリへの格納方法、ネットでググればわかるが、格納の原理はどこも同じだ。

美しい出力が必要な場合は、DoubleToStr() を使用します。

互換性のある機能を利用できる場合は、それを提供したほうがよい。そうしないと、この叙事詩はまた繰り返されることになります。この場合DoubleToString()

 

同じ楽器でEAが動作しないようにするにはどうしたらよいでしょうか?

例えば、EAをeur/usdのウィンドウで動作させても、eur/usdの他のウィンドウで実行すると、何らかの警告 メッセージが表示されます。よろしくお願いします。

 
gans71:

同じ楽器でEAが動作しないようにするにはどうしたらよいでしょうか?

例えば、EAをeur/usdのウィンドウで動作させても、eur/usdの他のウィンドウで実行すると、何らかの警告メッセージが表示されます。よろしくお願いします。

あるEAから別のEAにデータを転送する必要がある場合は、フォーラムを検索してください。

またはターミナルのグローバル変数を使用する(これが最も簡単な方法です) - そこに最初のEAの値を書き込むことができ、その後のEAのコピーはこの値を読み、実行しませんhttps://www.mql5.com/ru/docs/globals

Документация по MQL5: Глобальные переменные терминала
Документация по MQL5: Глобальные переменные терминала
  • www.mql5.com
Глобальные переменные существуют в клиентском терминале 4 недели с момента последнего обращения, после этого автоматически уничтожаются. Обращением к глобальной переменной считается не только установка нового значения, но и чтение значения глобальной переменной.
 
Igor Makanu:

あるEAから別のEAにデータを転送する必要がある場合は、フォーラムを検索してください。

またはターミナルのグローバル変数を使用する(これが最も簡単な方法です) - そこに最初のEAの値を書き込むことができ、その後のEAのコピーはこの値を読み、実行しませんhttps://www.mql5.com/ru/docs/globals

EAは同じなので、同じ商品で実行するのを禁止する必要があります。
 
gans71:
EAは同じなので、同じシンボルで動作するように無効化してください。

2分もあれば、ヘルプの内容を理解できるはずです。

グローバル変数 に文字列を渡す方法について具体的に述べている場合、唯一の方法はグローバル変数の名前を作成することです。つまり、あなたのケースでは、EURUSDでEAを実行し、チェックを行う

if(GlobalVariableCheck(_Symbol)) ......。

もしそのような変数がない場合は、次のように特大の変数を作成します。

if(GlobalVariableSet(_Symbol,Magic)==0) Print("Error writing to global variable # ",GetLastError());

を削除し、Expert Advisor を終了する際に、グローバル変数

このままでは端末が手狭になるので、なんとなく検索の方向性を指摘したところ