初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1178

 
Aleksey Vyazmikin:

そのため、説明書にはこの機能のためのファンについての記載はありません

1つの価格座標のオブジェクトは複数の値を持つことができるため、行番号を指定する必要があります。この機能は、以下のオブジェクトにのみ適用されます。

  • トレンドライン(OBJ_TREND)
  • 角度による トレンドライン(OBJ_TRENDBYANGLE)
  • ギャンライン (OBJ_GANNLINE)
  • 等距離チャンネル (OBJ_CHANNEL) - 2行
  • 線形回帰チャンネル(OBJ_REGRESSION) - 3行
  • 標準偏差チャンネル(OBJ_STDDEVCHANNEL) - 3行
  • 矢印のある線 (OBJ_ARROWED_LINE)

扇風機は常時2点持ち。それに平行なトレンドラインを追加して計算する。出力は必ず見つけることができます。

 
Uladzimir Izerski:

ObjectGetValueByTime価格で 計算され、ファンの任意の割合を 見つけることができます。

テスターでは動作しています。テストはしていない。

コード形式で表示できますか?

 
Aleksey Vyazmikin:

コード形式で表示できますか?

コードで確認しただけです。チャンネルで動作します。扇風機でも検知しています。

 F_Draw_Object("FAN",OBJ_FIBOFAN,Time[20],High[20],Time[5],Low[5],0,0,0,2,C'00,00,200',OBJPROP_FILL,false);
 PriseCLv=ObjectGetValueByTime(0,"FAN",Time[10],0);

トレンドラインをファンにバインドすれば、それも検出できる。でも、そのまま使えるんです。

 
Uladzimir Izerski:

コードで確認しただけです。チャンネルで動作します。扇風機でも検知しています。

トレンドラインをファンにバインドすれば、それも検知できる。でも、そのまま使えるんです。

どのような効果があるのでしょうか?

少なくともビジュアルテスターでは動作しないのですが...。

bool fiboFanCreate(string ffname, datetime tm1, double pr1, datetime tm2, double pr2)
{
   Print(__FUNCSIG__);
   
   //if(!ObjectCreate(0,ffname,OBJ_FIBOFAN,0,tm1,pr1,tm2,pr2))
   if(!ObjectCreate(0,ffname,OBJ_FIBOFAN,0,tm1,pr1,tm2,pr2,0,0,0,2,C'00,00,200',OBJPROP_FILL,false))
   {
      Print(__FUNCSIG__,
            ": не удалось создать \"Веер Фибоначчи\"! Код ошибки = ",GetLastError());
      return(false);
   }
   
   ChartRedraw();
   Sleep(1000);
   
   return(true);
}
//+------------------------------------------------------------------+
bool fiboFanLevelsSet(double  &values[],  // значения линий уровня
                      string  name)       // имя веера
{
   Print(__FUNCSIG__);
   
   levels = ArraySize(values);
   ArrayPrint(values);
   //--- установим количество уровней
   ObjectSetInteger(0,name,OBJPROP_LEVELS,levels);
   
   //--- установим свойства уровней в цикле
   for(int i=0;i<levels;i++)
   {
      //--- значение уровня
      ObjectSetDouble(0,name,OBJPROP_LEVELVALUE,i,values[i]);
      //--- описание уровня
      ObjectSetString(0,name,OBJPROP_LEVELTEXT,i,IntegerToString(i+1));
   }
   ChartRedraw();
   Sleep(1000);
   //--- успешное выполнение
   return(true);
}

チェック

void OnTick()
{
   new_bars    = current_chart.isNewBar();   // проверить появление нового бара
   
   if(new_bars > 0)
   {
      if(ObjectFind(0,ff_name) >= 0) Print(ff_name,"4 = ",NormalizeDouble(ObjectGetValueByTime(0,ff_name,TimeCurrent(),4),Digits()));

....

2020.01.19 19:38:50.208 2019.09.19 11:15:00   bool fiboFanCreate(string,datetime,double,datetime,double)
2020.01.19 19:38:50.208 2019.09.19 11:15:01   bool fiboFanLevelsSet(double&[],string)
2020.01.19 19:38:51.365 2019.09.19 11:30:00   FFan4 = 0.0
 

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

2問目 MT5

セルゲイ・タボリン さん 2020.01.20 11:52

EAからインジケータを呼び出す 際にエラーが発生した原因は何ですか?インジケータは通常、チャート上に手動で配置されます。

   ResetLastError();
   handle_ICTMP1 = iCustom(Symbol(),0,"my_used\\ICTMP_3.01",0,in_symb1,false,false,in_smoothing);
   if(handle_ICTMP1 == INVALID_HANDLE)                                                 // проверяем наличие хендла индикатора
   {
      Print("Не удалось получить хендл индикатора handle_ICTMP1...",GetLastError());   // если хендл не получен, то выводим сообщение в лог об ошибке
      return(INIT_FAILED);                                                             // завершаем работу с ошибкой
   }
   else
   {
      Print("Получен хендл индикатора handle_ICTMP1");
      if(!MQLInfoInteger(MQL_OPTIMIZATION))
      {
         if(!ChartIndicatorAdd(ChartID(),0,handle_ICTMP1)) Print("Ошибка подключения индикатора к графику"); // подключаем индикатор к графику
      }
   }
2020.01.20 13:42:09.390 Core 1  file Indicators\my_used\ICTMP_3.01 read error
2020.01.20 13:42:09.390 Core 1  loading of ICTMP_  EURGBP,M15 failed [557]
2020.01.20 13:42:09.390 Core 1  2019.09.19 00:00:00   cannot load custom indicator 'my_used\ICTMP_3.01' [4802]
2020.01.20 13:42:09.390 Core 1  2019.09.19 00:00:00   Не удалось получить хендл индикатора handle_ICTMP1...4802
2020.01.20 13:42:09.390 Core 1  tester stopped because OnInit returns non-zero code
P.S. テスターに収録されています。

しかも、チャート上でリアルタイムにEAが動作しているにもかかわらず、です。インジケータをレンダリングしない。(((

特に、これは ですか?

 

親愛なる友人たちよ、誰も何も提案できないのか?

別途、テスターとチャート上の両方でインジケーターが動作します。テスターのEAから実行すると、不明なエラーが出ます。このインジケータを搭載したExpert Advisorは、通常、チャート上で起動し動作します。

どこを掘ればいいんだ?

 
Сергей Таболин:

親愛なる友人たちよ、誰も何も提案できないのか?

別途、テスターとチャート上の両方でインジケーターが動作します。テスターのEAから実行すると、不明なエラーが出ます。このインジケータを搭載したExpert Advisorは、通常、チャート上で起動し動作します。

どこを掘ればいいんだ?

テスターのインジケーターの パスに向かってかな?
 
Artyom Trishkin:
テスターのインジケーターパスの方かな?

どうですか?

このように必要な指標はすべて揃っています。

handle_ICTMP1 = iCustom(Symbol(),0,"my_used\\ICTMP_3.01"
handle_HMA7C = iCustom(Symbol(),0,"my_used\\my_HMA7C_201",

こんなことは今までなかったことです。あと、テスターでインジケーターへの パスが別にあるのは初めて知りました...。

他のインジケーターでは動作するが、このインジケーターでは動作しないのか?

 

あらかじめ別のインジケータを特別に追加しておく。

   ResetLastError();
      handle_HMA7C = iCustom(Symbol(),0,"my_used\\my_HMA7C_201",45,9);
      if(handle_HMA7C == INVALID_HANDLE)                                                  // проверяем наличие хендла индикатора
      {
         Print("Не удалось получить хендл индикатора handle_HMA7C...",GetLastError());    // если хендл не получен, то выводим сообщение в лог об ошибке
         return(INIT_FAILED);                                                             // завершаем работу с ошибкой
      }
      else
      {
         Print("Получен хендл индикатора handle_HMA7C");
         if(!MQLInfoInteger(MQL_OPTIMIZATION))
         {
            if(!ChartIndicatorAdd(ChartID(),0,handle_HMA7C)) Print("Ошибка подключения индикатора к графику"); // подключаем индикатор к графику
         }
      }
   
   handle_ICTMP1 = iCustom(Symbol(),0,"my_used\\ICTMP_3.01",0,in_symb1,false,false,in_smoothing);
   if(handle_ICTMP1 == INVALID_HANDLE)                                                 // проверяем наличие хендла индикатора
   {
      Print("Не удалось получить хендл индикатора handle_ICTMP1...",GetLastError());   // если хендл не получен, то выводим сообщение в лог об ошибке
      return(INIT_FAILED);                                                             // завершаем работу с ошибкой
   }
   else
   {
      Print("Получен хендл индикатора handle_ICTMP1");
      if(!MQLInfoInteger(MQL_OPTIMIZATION))
      {
         if(!ChartIndicatorAdd(ChartID(),0,handle_ICTMP1)) Print("Ошибка подключения индикатора к графику"); // подключаем индикатор к графику
      }
   }
2020.01.20 20:15:34.713 program file added: Indicators\my_used\my_HMA7C_201.ex5. 41715 bytes loaded
2020.01.20 20:15:34.920 2019.09.19 00:00:00   Получен хендл индикатора handle_HMA7C
2020.01.20 20:15:34.921 file Indicators\my_used\ICTMP_3.01 read error
2020.01.20 20:15:34.921 loading of ICTMP_ EURGBP,M15 failed [557]
2020.01.20 20:15:34.921 2019.09.19 00:00:00   cannot load custom indicator 'my_used\ICTMP_3.01' [4802]
2020.01.20 20:15:34.921 2019.09.19 00:00:00   Не удалось получить хендл индикатора handle_ICTMP1...4802
2020.01.20 20:15:34.921 tester stopped because OnInit returns non-zero code

EAが普通にチャートに載ったままです。すべてのインジケーターがロードされ、動作している......。

 
Сергей Таболин:

親愛なる友人たちよ、誰も何も提案できないのか?

どこを掘るの?

ライブグラフの方はゆっくりやっていて、メモリが一杯になる時間がない。テスターの方は1秒間に何度もやっていて、すぐにメモリが一杯になる。

理由: