MQLエキスパートへの質問 - ページ 16

 
artmedia70:

そんな記号があるのですか?

ありがとうございました!!!こんな不具合は発見できなかっただろう...。教科書にくだらないことを書いて、見もしないで写しているだけ...。
 

どこがエラーなのか、教えていただけませんか?なぜ結果が違うのでしょうか?

//+------------------------------------------------------------------+
//|                                                       TestFr.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   double FrUpz=0;
   double FrUp1 = GetFractal("0", 0, 1, MODE_UPPER);
   double FrUp2 = GetFractal("0", 0, 2, MODE_UPPER);
   double FrUp3 = GetFractal("0", 0, 3, MODE_UPPER);
   Print("# FrUp1=",FrUp1);
   Print("# FrUp2=",FrUp2);
   Print("# FrUp3=",FrUp3);
   for(int z=1;z<=3;z++)
      {
       FrUpz = GetFractal("0", 0, z, MODE_UPPER);
       Print("z=",z," FrUpz=",FrUpz);
      } 
  }
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru  & khorosh        |
//+----------------------------------------------------------------------------+
//|  Версия   : 08.02.2009                                                     |
//|  Описание : Возвращает фрактал по его номеру.                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//|    nf - номер фрактала                  (    0       - последний)          |
//+----------------------------------------------------------------------------+
double GetFractal(string sy="0", int tf=0, int nf=0, int mode=MODE_UPPER) {
  if (sy=="" || sy=="0") sy=Symbol();
  double f=0;
  int    i, k=iBars(sy, tf), kf;
  for (i=3; i<k; i++) {
    if(mode==MODE_LOWER){
    f=iFractals(sy, tf, MODE_LOWER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(iLow(sy,tf,i));
     } 
    }
    if(mode==MODE_UPPER){
    f=iFractals(sy, tf, MODE_UPPER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(iHigh(sy,tf,i));
      }
    }
  }
  Print("GetFractalBar(): Фрактал не найден");
  return(-1);
}

結果

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=3 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=2 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=1 FrUpz=1.37104

2014.02.17 19:56:38.828 TestFr EURUSD,M15: # FrUp3=1.37056

2014.02.17 19:56:38.812 TestFr EURUSD,M15: # FrUp2=1.37162

2014.02.17 19:56:38.812 TestFr EURUSD,M15: # FrUp1=1.37083

 
khorosh:

どこがエラーなのか、教えていただけませんか?なぜ結果が違うのでしょうか?

結果

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=3 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=2 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=1 FrUpz=1.37104

2014.02.17 19:56:38.828 TestFr EURUSD,M15: # FrUp3=1.37056

2014.02.17 19:56:38.812 TestFr EURUSD,M15: # FrUp2=1.37162

2014.02.17 19:56:38.812 TestFr EURUSD,M15: # FrUp1=1.37083


制御を容易にするために,この関数はバー番号を返すように少し修正されています

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru  & khorosh        |
//+----------------------------------------------------------------------------+
//|  Версия   : 08.02.2009                                                     |
//|  Описание : Возвращает фрактал по его номеру.                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//|    nf - номер фрактала                  (    0       - последний)          |
//+----------------------------------------------------------------------------+
double GetFractal(string sy="0",int tf=0,int nf=0,int mode=MODE_UPPER) 
  {
   if(sy=="" || sy=="0") sy=Symbol();
   double f=0;
   int    i,k=iBars(sy,tf),kf;
   for(i=3; i<k; i++) 
     {
      if(mode==MODE_LOWER)
        {
         f=iFractals(sy,tf,MODE_LOWER,i);
         if(f!=0) 
           {
            kf++;
//            if(kf>nf) return(iLow(sy,tf,i));
               if(kf>nf) return(i);
           }
        }
      if(mode==MODE_UPPER)
        {
         f=iFractals(sy,tf,MODE_UPPER,i);
         if(f!=0) 
           {
            kf++;
//            if(kf>nf) return(iHigh(sy,tf,i));
               if(kf>nf) return(i);
           }
        }
     }
   Print("GetFractalBar(): Фрактал не найден");
   return(-1);
  }
//+------------------------------------------------------------------+

結果

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: z=3 FrUpz=9.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: z=2 FrUpz=9.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: z=1 FrUpz=13.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: # FrUp3=24.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: # FrUp2=17.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: # FrUp1=13.0


 

全変数の明示的な初期化機能を追加

double GetFractal(string sy="0",int tf=0,int nf=0,int mode=MODE_UPPER) 
  {
   if(sy=="" || sy=="0") sy=Symbol();
   double f=0;
   int    i=0,k=iBars(sy,tf),kf=0;
   for(i=3; i<k; i++) 
     {
      if(mode==MODE_LOWER)
        {
         f=iFractals(sy,tf,MODE_LOWER,i);
         if(f!=0) 
           {
            kf++;
//            if(kf>nf) return(iLow(sy,tf,i));
               if(kf>nf) return(i);
           }
        }
      if(mode==MODE_UPPER)
        {
         f=iFractals(sy,tf,MODE_UPPER,i);
         if(f!=0) 
           {
            kf++;
//            if(kf>nf) return(iHigh(sy,tf,i));
               if(kf>nf) return(i);
           }
        }
     }
   Print("GetFractalBar(): Фрактал не найден");
   return(-1);
  }

結果

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=3 FrUpz=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=2 FrUpz=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=1 FrUpz=13.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp3=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp2=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp1=13.0

開発者に見せる必要がある。 機能がおかしい

 

というコードに気づきました。

Print(ChartID()," ",ChartGetInteger(ChartID(),CHART_HEIGHT_IN_PIXELS,0))する。

がインジケータに置かれると、おかしな結果になります。例えば、インジケータがリセットされたチャートタブを開いている場合、メインチャートウィンドウの高さの結果は正しいです。

しかし、「ネイティブ」チャートから離れると、なぜか結果が75になり(もちろん、他のケースでは結果は異なるかもしれません)、チャートIDの値は同じままです。

ネイティブ」グラフに戻すと、高さの数値が正しくなります。

開発者や "知る人ぞ知る "人たちに、この特殊性が何なのかを説明してくれるよう、大いに要望します。本当に意図した通りなのか!信じられない!

この場合、どのタブが開かれていても、ネイティブチャートの正しい高さの値を与えるコードを提案してください。
 
Vinin:

全変数の明示的な初期化機能を追加

結果

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=3 FrUpz=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=2 FrUpz=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=1 FrUpz=13.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp3=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp2=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp1=13.0

開発者に見せる必要がある。 機能がおかしい

私の質問に気を遣っていただき、ありがとうございました。原因は、関数内の2つの変数が明示的に初期化されていなかっただけだと判明した。キムの全機能に目を通し、修正する必要がありますね。
 

こんにちは。

EAコードには、I.Kimのf-i.それは、「マウントされた」ライブラリの呼び出しを含むものです。外部パレメータ」以降のコードが提供されます。

//-- Подключаемые модули --
#include <stderror.mqh>
#include <stdlib.mqh>

しかし、偶然にも(mt4の同じアップデートの後 - EAが動作しない)私は "EAのプロパティ "ウィンドウ、 "依存 "タブで奇妙なエントリに気づいた。

このエラーの意味と修正方法(両方のライブラリがIncludeフォルダに残っている場合)を教えていただけませんか?Librariesフォルダーは何の関係があるのですか?

 
Rita:

こんにちは。

EAコードには、I.Kimのf-i.それは、「マウントされた」ライブラリの呼び出しを含むものです。外部パレメータ」以降のコードが提供されます。

しかし、偶然にも(mt4の同じアップデートの後 - EAが動作しない)私は "EAのプロパティ "ウィンドウ、 "依存 "タブで奇妙なエントリに気づいた。

このエラーの意味と修正方法(両方のライブラリがIncludeフォルダに残っている場合)を教えていただけませんでしょうか?Librariesフォルダーは何の関係があるのですか?


stderror.mqh は、Libraries フォルダにある stdlib.ex4 ライブラリの ErrorDescription関数を ソースと一緒にインポートして います。このファイルがあるかどうかを確認し、ない場合は他の端末から取得してください。
 

どちらのフォルダ(IncloudとLibraries)にもstdlibのソースが含まれています。念のため、Incloudのフォルダからアッドコピーしてみました。

しかし、「依存関係」タブには上記のようなエラーが表示されたままです。これらの関数の呼び出しを何らかの方法で変更するとか。の代わりに。

//-- Подключаемые модули --
#include <stderror.mqh>
#include <stdlib.mqh>

他の方法で通話を設定しますか?

それとも、今から最新版のmt4でI.Kimの機能を使うことは不可能なのでしょうか?

 
Rita:

どちらのフォルダ(IncloudとLibraries)にもstdlibのソースが含まれています。念のため、Incloudのフォルダからアッドコピーしてみました。

しかし、「依存関係」タブには上記のようなエラーが表示されたままです。これらの関数の呼び出しを何らかの方法で変更するとか。の代わりに。

他の方法で通話を設定しますか?

それとも、今から最新版のmt4でI.Kimの機能を使うことは不可能なのでしょうか?


Librariesフォルダにstdlib.ex4という実行ファイルがあることを確認してください(Kimさんのものではないみたいですが、納品時の標準ファイルです)。


あるいは、キム関数がそこから何を取り出すかを見て、何が問題かを解決してください。