エラー、バグ、質問 - ページ 2133 1...212621272128212921302131213221332134213521362137213821392140...3185 新しいコメント fxsaber 2018.02.18 12:19 #21321 CCanvas::Attach でエラーが発生しました。ハイライト行の欠落//+------------------------------------------------------------------+ //| Attach new object without bitmap resource | //+------------------------------------------------------------------+ bool CCanvas::Attach(const long chart_id,const string objname,const int width,const int height,ENUM_COLOR_FORMAT clrfmt=COLOR_FORMAT_XRGB_NOALPHA) { if(OBJ_BITMAP_LABEL==ObjectGetInteger(chart_id,objname,OBJPROP_TYPE)) { string rcname=ObjectGetString(chart_id,objname,OBJPROP_BMPFILE); if(StringLen(rcname)==0 && width>0 && height>0 && ArrayResize(m_pixels,width*height)>0) { ZeroMemory(m_pixels); if(ResourceCreate("::"+objname,m_pixels,width,height,0,0,0,clrfmt) && ObjectSetString(chart_id,objname,OBJPROP_BMPFILE,"::"+objname)) { m_chart_id = chart_id; m_width=width; m_height=height; m_objname=objname; m_rcname="::"+objname; m_format=clrfmt; m_objtype=OBJ_BITMAP_LABEL; //--- success return(true); } } } //--- failed return(false); } TheXpert 2018.02.18 12:21 #21322 そうだ、Nikolay Semkoに頼んで、アンチエイリアスをうまく使った別バージョンのkanvasを書いてもらって、記事を書いてもらおうかな。 Vladimir Karputov 2018.02.18 12:44 #21323 Aleksandr Teleguz:こんにちは。このエラーの原因究明をお願いします。mql4からmql5にインジケータを変換しようとしています。iHighの機能については、以下の「シェル」を使用しています。 その結果、Symbol()関数が 返す文字列がsymbolパラメータとして渡されるにもかかわらず、エラー4301: "Unknown symbol "が発生しました。以下は、iHighを呼び出す関数のコードの一部です。 i "とは?ループの前の値は何ですか? iHighの 前にResetLastErrorコールを行っていませんか? Aleksandr Teleguz 2018.02.18 13:32 #21324 Vladimir Karputov:その "i "とは誰なのか?ループの前の値は何ですか? iHighの 前にResetLastErrorコールを行っていますか?i の値はOnCalculate 関数で ループ処理されます。 for(int i=rates_total-prev_calculated; i>0 && !IsStopped(); i--) { if(i>rates_total-10) continue; ResetLastErrorの呼び出しを 行わなかったのですが、呼び出したところ、エラーコードが同じになりました。OnCalculate関数ではlow[i]、high[i]などの配列を、外部関数ではiHigh、iLowなどの配列を使っています。 Vladimir Karputov 2018.02.18 13:34 #21325 Aleksandr Teleguz:iの値はOnCalculate関数で ループされる ResetLastErrorを呼び出さなかった のですが、呼び出したところ、エラーコードが同じになりました。OnCalculate関数でlow[i]、high[i]などの配列を使い、外部関数でiHigh、iLowなどの配列を使っています。実行可能なMQL5コードを提供し、エラーが発生する条件を記述してください。 Aleksandr Teleguz 2018.02.18 14:36 #21326 Vladimir Karputov:実行可能なMQL5コードを提供し、エラーが発生する条件を記述してください。私の端末に何か問題があるようです。ネットブックで別のMT5、同じデモ口座で 同じコードを実行 - エラーなし。 以下は、コードそのものです。 /+------------------------------------------------------------------+ //| Strelka.mq4 | //| Alexander Teleguz | //| https://investmany.ru | //+------------------------------------------------------------------+ #property indicator_chart_window #property indicator_buffers 12 #property indicator_plots 6 #define OP_SELL 1 int OnInit() { return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ 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[]) { ArraySetAsSeries(time,true); ArraySetAsSeries(open,true); ArraySetAsSeries(high,true); ArraySetAsSeries(low,true); ArraySetAsSeries(close,true); for(int i = rates_total-prev_calculated; i>0 && !IsStopped(); i--) { if(i>rates_total-10) continue; bool filtr = Filtr1(OP_SELL, i); } return(rates_total); } //+------------------------------------------------------------------+ bool Filtr1(int type, int i) { ENUM_TIMEFRAMES tf = Period(); string symbol = Symbol(); int i1, i2=0; //индекс внешнего бара, счетчик for(i1=i+1; i2<6; i1++) { if(iLow(symbol, tf, i1)<=iLow(symbol, tf, i1+1)&& iHigh(symbol, tf, i1)>=iHigh(symbol, tf, i1+1)) //если бар внешний { break; //выход из цикла } else { i2++; } } return(false); } //+------------------------------------------------------------------+ double iHigh(string symbol, ENUM_TIMEFRAMES tf,int index) { if(index < 0) return(-1); double Arr[1]; if(CopyHigh(symbol,tf, index, 1, Arr)>0) return(Arr[0]); else { Print(__FUNCTION__, GetLastError()); return(-1); } } //+------------------------------------------------------------------+ double iLow(string symbol, ENUM_TIMEFRAMES tf,int index) { if(index < 0) return(-1); double Arr[1]; if(CopyLow(symbol,tf, index, 1, Arr)>0) return(Arr[0]); else { Print(__FUNCTION__, GetLastError()); return(-1); } } //+------------------------------------------------------------------+ Vladimir Karputov 2018.02.18 14:50 #21327 Aleksandr Teleguz:私の端末がおかしいようです。ネットブックで別のMT5、同じデモ口座で 同じコードを実行 - エラーなし。 以下は、コードそのものです。 注意:あなたが書き込んでいるのはMQL5フォーラムのメインセクションで、ここはMQL5について議論される場所です。MQL4については、MQL4とMetaTrader4という 特別なセクションがあります。コードは適切なセクションで公開してください。出版社がユーザーを尊重し、言語タイプを表示するヘッダーにコードを公開すると、さらによいでしょう。 fxsaber 2018.02.18 14:57 #21328 これがMQL5です。 oEdwardo 2018.02.19 02:53 #21329 こんにちは。 グラフィカルなオブジェクトのタイムフレームを変更できない - ターミナルがしくじったのか、私がしくじったのかがわからない。 以下はチェックコードです。 int OnStart(void) { double price; datetime time0, time1; string obj_name= "test_of_line_timeframe_setting"; ENUM_TIMEFRAMES tf1, tf2; // берем последнюю цену и время MqlRates rates[]; int copied=CopyRates(NULL,0,0,3,rates); price= rates[0].open; time0= rates[0].time; // рисуем линию ObjectCreate(0, obj_name, OBJ_HLINE, 0, time0, price); // --- отображение на переднем плане (false) или background (true) ObjectSetInteger (0, obj_name, OBJPROP_BACK , false); // --- Включить (true) или отключить (false) режим для перемещения меток с помощью мыши ObjectSetInteger (0, obj_name, OBJPROP_SELECTABLE , true); ObjectSetInteger (0, obj_name, OBJPROP_SELECTED , false); // --- Скрыть (true) или отобразить (false) графический объект в списке объектов ObjectSetInteger (0, obj_name, OBJPROP_HIDDEN , false); // --- Установите порядок приоритета для получения события щелчка мыши по диаграмме ObjectSetInteger (0, obj_name, OBJPROP_ZORDER , 0); // устанавливаем видимость на дневном таймфрэйме ObjectSetInteger(0,obj_name,OBJPROP_PERIOD,PERIOD_D1); // считываем видимость tf1= ObjectGetInteger(0,obj_name,OBJPROP_PERIOD); // устанавливаем видимость на часовом таймфрэйме ObjectSetInteger(0,obj_name,OBJPROP_PERIOD,PERIOD_H1); // считываем видимость tf2= ObjectGetInteger(0,obj_name,OBJPROP_PERIOD); if (tf1==tf2) Alert("таймфрейм изменить не удается"); else Alert("таймфрейм успешно изменен"); ObjectDelete(0,obj_name); return(0); } fxsaber 2018.02.19 11:56 #21330 OBJ_CHARTのバグ。インジケーター#property indicator_chart_window #property indicator_buffers 0 #property indicator_plots indicator_buffers #define PRINT(A) Print(#A + " = " + (string)(A)) // Создаем OBJ_CHART const string Name = __FILE__; const bool Init = ObjectCreate(0, Name, OBJ_CHART, 0, 0, 0) && EventSetTimer(1); const long Chart = ObjectGetInteger(0, Name, OBJPROP_CHART_ID); void OnInit() { // Задаем свойства объекта ObjectSetInteger(0, Name, OBJPROP_XSIZE, 400); // Ширина ObjectSetInteger(0, Name, OBJPROP_YSIZE, 250); // Высота ChartSetInteger(Chart, CHART_SHOW, false); ChartGetInteger(Chart, CHART_WIDTH_IN_PIXELS); // Если закомментировать строку, то все будет работать правильно } void OnDeinit( const int ) { ObjectDelete(0, Name); } void OnTimer() { // Считываем свойства объекта PRINT(ChartGetInteger(Chart, CHART_WIDTH_IN_PIXELS)); // Правильное значение - 400 PRINT(ChartGetInteger(Chart, CHART_HEIGHT_IN_PIXELS)); // Правильное значение - 250 EventKillTimer(); } int OnCalculate( const int, const int, const int, const double& [] ) { return(0); } 結果が正しくありません ChartGetInteger(Chart,CHART_WIDTH_IN_PIXELS) = 330 ChartGetInteger(Chart,CHART_HEIGHT_IN_PIXELS) = 226 しかし、選択した行をコメントアウトすると、すぐにインジケータは正しく動作し始めます。 ChartGetInteger(Chart,CHART_WIDTH_IN_PIXELS) = 400 ChartGetInteger(Chart,CHART_HEIGHT_IN_PIXELS) = 250 OnInitのChartGetIntegerは、なぜかグラフィカルオブジェクトのプロパティに影響を与えます。 1...212621272128212921302131213221332134213521362137213821392140...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
こんにちは。このエラーの原因究明をお願いします。mql4からmql5にインジケータを変換しようとしています。iHighの機能については、以下の「シェル」を使用しています。
その結果、Symbol()関数が 返す文字列がsymbolパラメータとして渡されるにもかかわらず、エラー4301: "Unknown symbol "が発生しました。以下は、iHighを呼び出す関数のコードの一部です。
i "とは?ループの前の値は何ですか?
iHighの 前にResetLastErrorコールを行っていませんか?
その "i "とは誰なのか?ループの前の値は何ですか?
iHighの 前にResetLastErrorコールを行っていますか?
i の値はOnCalculate 関数で ループ処理されます。
ResetLastErrorの呼び出しを 行わなかったのですが、呼び出したところ、エラーコードが同じになりました。OnCalculate関数ではlow[i]、high[i]などの配列を、外部関数ではiHigh、iLowなどの配列を使っています。
iの値はOnCalculate関数で ループされる
ResetLastErrorを呼び出さなかった のですが、呼び出したところ、エラーコードが同じになりました。OnCalculate関数でlow[i]、high[i]などの配列を使い、外部関数でiHigh、iLowなどの配列を使っています。
実行可能なMQL5コードを提供し、エラーが発生する条件を記述してください。
実行可能なMQL5コードを提供し、エラーが発生する条件を記述してください。
私の端末に何か問題があるようです。ネットブックで別のMT5、同じデモ口座で 同じコードを実行 - エラーなし。
以下は、コードそのものです。
私の端末がおかしいようです。ネットブックで別のMT5、同じデモ口座で 同じコードを実行 - エラーなし。
以下は、コードそのものです。
注意:あなたが書き込んでいるのはMQL5フォーラムのメインセクションで、ここはMQL5について議論される場所です。MQL4については、MQL4とMetaTrader4という 特別なセクションがあります。コードは適切なセクションで公開してください。出版社がユーザーを尊重し、言語タイプを表示するヘッダーにコードを公開すると、さらによいでしょう。
こんにちは。
グラフィカルなオブジェクトのタイムフレームを変更できない - ターミナルがしくじったのか、私がしくじったのかがわからない。
以下はチェックコードです。
結果が正しくありません
しかし、選択した行をコメントアウトすると、すぐにインジケータは正しく動作し始めます。
OnInitのChartGetIntegerは、なぜかグラフィカルオブジェクトのプロパティに影響を与えます。