"ダミー "からの質問 - ページ 262 1...255256257258259260261262263264265266267268269...277 新しいコメント Sergey Pavlov 2013.07.04 05:38 #2611 agvozdezkiy:MQLの勉強を始めたばかりですが、ここではiMAを描き、時間軸上のマウスポインタのある地点でiMAのチャートに接線(非常に近い)を引くEAを書きました。問題点1Expert Advisorの動作が非常に遅い。接線の再描画時間が長く、マウスの動きに追従しない...ということです。私のバージョンを見てください。//+------------------------------------------------------------------+ //| Antonio_Mouse.mq5 | //| 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" //--- int Handle_iMA; double Buffer_iMA[]; string Name_iMA; datetime TimeArray[]; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit() { //---Устанавливаем свойство графика посылать события при движении мышы ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true); //---Рисуем индикатор iMA Handle_iMA=iMA(NULL,0,10,0,MODE_SMA,PRICE_CLOSE); if(Handle_iMA!=INVALID_HANDLE) { ChartIndicatorAdd(0,0,Handle_iMA); Print("iMA скопировано в буффер."); } //--- string name="Line"; ObjectCreate(0,name,OBJ_TREND,0,0,0); ObjectSetInteger(0,name,OBJPROP_COLOR,clrRed); ObjectSetInteger(0,name,OBJPROP_WIDTH,10); ObjectSetInteger(0,name,OBJPROP_BACK,true); ObjectSetInteger(0,name,OBJPROP_RAY_LEFT,false); ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,true); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { IndicatorRelease(Handle_iMA); } datetime CarrentBarTime[]; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnTick() { } double PriceCoord,Angle; datetime TimeCoord; int SubWindow,BarPos,X1,Y1,X2,Y2; int prevX=-1; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &XCoord, const double &YCoord, const string &SParam) { if(id==CHARTEVENT_MOUSE_MOVE) { int x=(int)XCoord; int y=(int)YCoord; if(x==prevX) return; CopyTime(NULL,0,0,1,CarrentBarTime); //--- ChartXYToTimePrice(NULL,x,y,SubWindow,TimeCoord,PriceCoord); if(TimeCoord>CarrentBarTime[0]) return; CopyBuffer(Handle_iMA,0,TimeCoord+PeriodSeconds(),2,Buffer_iMA); //--- string name="Line"; ObjectSetDouble(0,name,OBJPROP_PRICE,0,Buffer_iMA[0]); ObjectSetInteger(0,name,OBJPROP_TIME,0,TimeCoord); ObjectSetDouble(0,name,OBJPROP_PRICE,1,Buffer_iMA[1]); ObjectSetInteger(0,name,OBJPROP_TIME,1,TimeCoord+PeriodSeconds()); //--- ChartRedraw(); prevX=x; } }私のノートパソコンでは、すべてが飛びます Andrew Petras 2013.07.04 10:35 #2612 オブジェクト作成 関数を初めて呼び出すと、エラー5040(Corrupted parameter of type string)が発生します。void CreateTL(string name,datetime time1,double price1,datetime time2,double price2,bool ray_left,bool ray_right,color color_TL) { //------------ nTL,nTLh,nTLl,nTLe nTL="nTL_"+IntegerToString(MathRand()); nTLh="nTLh_"+IntegerToString(MathRand()); nTLl="nTLl_"+IntegerToString(MathRand()); nTLe="nTLe_"+IntegerToString(MathRand()); //------------ ObjectCreate(0,name,OBJ_TREND,0,time1,price1,time2,price2); ObjectSetInteger(0,name,OBJPROP_COLOR,color_TL); ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_DOT); ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,ray_left); ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,ray_right); ObjectSetInteger(0,name,OBJPROP_BACK,true); };通話設定前の場合nTL="";error 4002 (Invalid parameter when calling client terminal function internally) クライアント端末の機能を内部で呼び出す際、パラメータが不正です。呼び出し前に設定した場合nTL="a";の場合、最初のオブジェクトはaという名前になります。私はこのように呼んでいます。if(hlp_var==high_low) { //CreateTL(nTL,dt[0],pr[0],dt[0],pr[1],false,false,nTL_color); CreateTL(nTL,dt[0],pr[0],dt[0],pr[1],false,false,nTL_color); CreateTL(nTLe,dt[1],pr[0],dt[1],pr[1],false,false,nTL_color); CreateTL(nTLh,dt[0],pr[0],dt[1],pr[0],false,true,nTL_color); CreateTL(nTLl,dt[0],pr[1],dt[1],pr[1],false,true,nTL_color); CreateTL(nTL,dt[0],pr[0],dt[1],pr[1],false,true,nTL_color); CreateTL(nTL,dt[0],pr[1],dt[1],pr[0],false,true,nTL_color); Print("CreateTL GetLastError "+IntegerToString(GetLastError())); };どこがエラーなのか教えてください。 Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new www.mql5.com Основы языка / Операторы / Оператор создания объекта new - Документация по MQL5 Andrew Petras 2013.07.04 10:52 #2613 旧バージョンではObjectCreate(0,nTL="nTL_"+IntegerToString(MathRand()),OBJ_TREND,0,time1,price1,time2,price2);は、一度も失敗したことがありません。コードや端末のバグでしょうか? TheXpert 2013.07.04 10:55 #2614 Silent:エラーの発生箇所を教えてください。 どこがエラーなのか分かりませんが、オブジェクト名の 扱いははっきり言って非常に疑問です。 Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Свойства объектов www.mql5.com Стандартные константы, перечисления и структуры / Константы объектов / Свойства объектов - Документация по MQL5 Vasiliy Smirnov 2013.07.04 10:58 #2615 オブジェクトの名前に乱数を入れる理由が不明ですが、これもエラーになる可能性があります。 削除済み 2013.07.04 11:01 #2616 Silent:オブジェクト作成 関数を初めて呼び出すと、エラー5040(Corrupted parameter of type string)が発生します。通話設定前の場合error 4002 (Invalid parameter when calling client terminal function internally) クライアント端末の関数を内部で呼び出す際に発生したエラーです。通話前に設定した場合の場合、最初のオブジェクトはaという名前になります。私はこう呼んでいます。エラーの発生箇所を教えてください。 Get LastError が 0 以外を表示するので、心配ですか?もしそうなら、関数が失敗を報告した場合のみ、エラーを呼び出すようにします。また、プロットの最後にエラーを求めるべきではない、ゴミのような値が出るかもしれない。MT4ではこうなのですが、もしかしたらこちらでは違うかもしれません。疑似コードです。if( ! ObjectCreate(...) ) Print( GetLastError() ); Sergey Gridnev 2013.07.04 11:02 #2617 Silent: オブジェクト作成 関数を初めて呼び出すと、エラー5040(Corrupted parameter of type string)が発生します。 通話設定前の場合 error 4002 (Invalid parameter when calling client terminal function internally) クライアント端末の機能を内部で呼び出す際、パラメータが不正です。 呼び出し前に設定した場合 の場合、最初のオブジェクトはaという名前になります。 私はこのように呼んでいます。 エラーの発生箇所を教えてください。 StringConcatenate()で文字列を "接着 "してみる。 Andrew Petras 2013.07.04 11:03 #2618 TheXpert: どこがエラーなのかわからないが、オブジェクト名の 扱いは控えめに言っても非常に疑問である。 あと1週間、頭を悩ませることになりそうです。もう少し詳しく教えてください。(下品でもいいんです :))zfs です。 オブジェクト名に乱数が必要な理由が不明です、エラーになる可能性があります。ユニークな名前を持つ数百のオブジェクトのための他のオプションはありますか?(オブジェクトのグループは、グループを削除するために、名前に同じ部分の文字列が含まれている必要があります)。 Andrew Petras 2013.07.04 11:05 #2619 220Volt: Get Last Errorが0以外を表示するので心配ですか?もしそうなら、関数が失敗を報告した場合のみ、エラーを求めるようにします。また、プロットの最後にエラーを求めるべきではない、ゴミのような値が出るかもしれない。MT4ではそうなのですが、もしかしたらこちらでは違うかもしれません。 いいえ、最初の呼び出しがエラーでオブジェクトが作成されないからです。1回目の呼び出しの行を(とりあえず)複製し、2回目からはそれが作成されます。 TheXpert 2013.07.04 11:14 #2620 220Volt: Get Last Errorsが0以外を表示するので心配ですか?さて、論理的には、もし関数が最後のエラーを設定するならば、関数が正常に終了すると、ゼロエラーまたはドキュメントに記述されている 値が発生するはずです。それ以外の方法はない。つまり、呼び出しが成功し、エラーがゼロでない場合、このケースはドキュメントに記述されなければならない。サイレントあと1週間はこうして頭を悩ませることになりそうです。もう少し詳しく説明してもいいですか?(下品かもしれませんが :))さて、通常、同じ型のオブジェクトの名前は、削除しやすいように共通の部分(あなたの場合は "nTL_")と相違点から形成されています。また、チャート上に複数のモジュールが同時に存在する場合は、モジュール識別子を使用します。差分はカウンタでも何でもよく、オブジェクトを作成するたびに増やします。しかし、論理的に区別したほうがいい。オブジェクトの時間、オブジェクトの座標、目標は一意性を保証することだ。副作用として、名前を再度構成することで、すでに作成されたオブジェクトの プロパティを変更することができます。ランダムは、この「一意性の保証」を提供しない。 Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new www.mql5.com Основы языка / Операторы / Оператор создания объекта new - Документация по MQL5 1...255256257258259260261262263264265266267268269...277 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
MQLの勉強を始めたばかりですが、ここではiMAを描き、時間軸上のマウスポインタのある地点でiMAのチャートに接線(非常に近い)を引くEAを書きました。
問題点1Expert Advisorの動作が非常に遅い。接線の再描画時間が長く、マウスの動きに追従しない...ということです。
私のバージョンを見てください。
私のノートパソコンでは、すべてが飛びます
オブジェクト作成 関数を初めて呼び出すと、エラー5040(Corrupted parameter of type string)が発生します。
通話設定前の場合
nTL="";
error 4002 (Invalid parameter when calling client terminal function internally) クライアント端末の機能を内部で呼び出す際、パラメータが不正です。
呼び出し前に設定した場合
nTL="a";
の場合、最初のオブジェクトはaという名前になります。
私はこのように呼んでいます。
どこがエラーなのか教えてください。
旧バージョンでは
は、一度も失敗したことがありません。
コードや端末のバグでしょうか?
エラーの発生箇所を教えてください。
オブジェクト作成 関数を初めて呼び出すと、エラー5040(Corrupted parameter of type string)が発生します。
通話設定前の場合
error 4002 (Invalid parameter when calling client terminal function internally) クライアント端末の関数を内部で呼び出す際に発生したエラーです。
通話前に設定した場合
の場合、最初のオブジェクトはaという名前になります。
私はこう呼んでいます。
エラーの発生箇所を教えてください。
Get LastError が 0 以外を表示するので、心配ですか?もしそうなら、関数が失敗を報告した場合のみ、エラーを呼び出すようにします。また、プロットの最後にエラーを求めるべきではない、ゴミのような値が出るかもしれない。MT4ではこうなのですが、もしかしたらこちらでは違うかもしれません。
疑似コードです。
オブジェクト作成 関数を初めて呼び出すと、エラー5040(Corrupted parameter of type string)が発生します。
通話設定前の場合
error 4002 (Invalid parameter when calling client terminal function internally) クライアント端末の機能を内部で呼び出す際、パラメータが不正です。
呼び出し前に設定した場合
の場合、最初のオブジェクトはaという名前になります。
私はこのように呼んでいます。
エラーの発生箇所を教えてください。
StringConcatenate()で文字列を "接着 "してみる。
どこがエラーなのかわからないが、オブジェクト名の 扱いは控えめに言っても非常に疑問である。
オブジェクト名に乱数が必要な理由が不明です、エラーになる可能性があります。
ユニークな名前を持つ数百のオブジェクトのための他のオプションはありますか?
(オブジェクトのグループは、グループを削除するために、名前に同じ部分の文字列が含まれている必要があります)。
Get Last Errorが0以外を表示するので心配ですか?もしそうなら、関数が失敗を報告した場合のみ、エラーを求めるようにします。また、プロットの最後にエラーを求めるべきではない、ゴミのような値が出るかもしれない。MT4ではそうなのですが、もしかしたらこちらでは違うかもしれません。
Get Last Errorsが0以外を表示するので心配ですか?
さて、論理的には、もし関数が最後のエラーを設定するならば、関数が正常に終了すると、ゼロエラーまたはドキュメントに記述されている 値が発生するはずです。それ以外の方法はない。
つまり、呼び出しが成功し、エラーがゼロでない場合、このケースはドキュメントに記述されなければならない。
あと1週間はこうして頭を悩ませることになりそうです。もう少し詳しく説明してもいいですか?(下品かもしれませんが :))
さて、通常、同じ型のオブジェクトの名前は、削除しやすいように共通の部分(あなたの場合は "nTL_")と相違点から形成されています。また、チャート上に複数のモジュールが同時に存在する場合は、モジュール識別子を使用します。
差分はカウンタでも何でもよく、オブジェクトを作成するたびに増やします。しかし、論理的に区別したほうがいい。オブジェクトの時間、オブジェクトの座標、目標は一意性を保証することだ。副作用として、名前を再度構成することで、すでに作成されたオブジェクトの プロパティを変更することができます。
ランダムは、この「一意性の保証」を提供しない。