MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1607 1...160016011602160316041605160616071608160916101611161216131614...1953 新しいコメント Vitaly Muzichenko 2021.09.01 20:29 #16061 Андрей #:おやすみなさい! フォーラムユーザーの皆様、助けてください。MQL4で、チャート上の与えられた3つのポイントを元に、数式で線を引くスクリプトを書きました。インデントやスペースを含めて130行かかる。最近、MQL5に移植することにしたのですが、プログラミングの拙い知識では、もう一度勉強する必要があり、役に立たないことに気づきました。 ゼロ除算の コードにエラーがあるので、まずそれを修正すること a1=(y3-(x3*(y2-y1)+x2*y1-x1*y2)/(x2-x1))/(x3*(x3-x1-x2)+x1*x2); ここで、x1とx2が "1 "になるので、"0 "で除算すると、"0 "になる。 マトリクス操作の前にチェックを行う Alexey Viktorov 2021.09.02 06:01 #16062 Manter84 #:ジョーカーなんですね。しかし、問題は現実で、PrintコマンドがExpertsタブに2回印刷され、Allertも2回出るという話題があるが、どうすれば解決できるのか、残念ながら回答はない。また、今後のために、わからなければ黙って通り過ぎればいいのですが、専門外の回答で自ら評価を得るのは愚かなことです。はい、それにしても、皆さんの回答は本当に弱いですね。 どんな質問でも、どんな答えでも。 Alexey Viktorov 2021.09.02 06:08 #16063 Андрей #:おやすみなさい! フォーラムユーザーの皆様、助けてください。MQL4で、チャート上の与えられた3つのポイントを元に、数式で線を引くスクリプトを書きました。インデントやスペースを含めて130行かかる。最近、MQL5に移植することにしたのですが、私のプログラミングの乏しい知識ではどうにもならないことに気づき、もう一度勉強し直さなければなりません。どなたか、このスクリプトをMQL5に移植してくださる方がいらっしゃれば、ありがたいのですが。どなたか、このスクリプトをMQL5に変換していただけるとありがたいのですが。 スクリプトを書いたのなら、なぜコードにそれが必要なのですか? //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() {SetIndexBuffer(0,Buffer1); SetIndexStyle(0,DRAW_LINE); //---- indicators //---- return(0); } Manter84 2021.09.02 07:11 #16064 #property indicator_chart_window int FR_handle; int OnInit() { FR_handle = iFractals(NULL,PERIOD_CURRENT); return(INIT_SUCCEEDED); } 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[]) { Print("Проверка 111 "); return(rates_total); } Alexey Viktorov #: 問いがそうであるように、答えもそうです。 まあ、もっと詳細が必要だと書けばよかったんですけどね。一番シンプルなインジケータのコードを書いたのですが(これ以上シンプルにはできない)、Printコマンドのところでも2つのメッセージを生成してしまいます。また、Handleの取得を省略した場合は、1つのメッセージを表示します。 *** ファイル: 111.png 15 kb Андрей 2021.09.02 07:18 #16065 Alexey Viktorov #:スクリプトを書いたのであれば、なぜコードの中に 私は小学生レベルのプログラミングスキルしかないので、実際に動いているコードからルールを作ってみました。干渉しなかったもの、触れなかったもの) Alexey Viktorov 2021.09.02 07:24 #16066 Manter84 #:まあ、もっと詳細が必要だと書けばよかったんですけどね。一番シンプルなインジケータのコードを書いたのですが(これ以上シンプルにはできない)、Printコマンドのところでも2つのメッセージを生成してしまいます。そして、Handleを取得しない場合は、1つを取得します。 やれやれ・・・汚い言葉しか出てきませんね。だから、黙っていたほうがいいんです。 Alexey Viktorov 2021.09.02 07:30 #16067 Андрей #: 私のプログラミングスキルは小学生レベルなので、いくつかの動くコードやルールを参考にしました。干渉しなかったもの、触れなかったもの) 了解です。 アンドリュー#: 誰か助けてくれたら、とりあえずウィスキーをお借りします!) のウイスキーは30ドルより安くはないと思います。だから、フリーランスのサイトでアプリケーションを作成する方が簡単だし、20人くらいは喜んでくれるだろう...そして、これはあなたのメッセージであり、あなたはルールを破るために人々を挑発する。誰が必要としているのか?じゃあ、タダでやれよ、それでどうする?結局のところ、あなたが合格していないボトルなので、それはお金のための仕事です迂回フリーランス。 Valeriy Yastremskiy 2021.09.02 07:36 #16068 Андрей #: #property strict //+------------------------------------------------------------------+ #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 clrBlue #property indicator_width1 2 #property indicator_style1 0 #property indicator_label1 "3T" #property indicator_type1 DRAW_LINE #property indicator_style1 STYLE_SOLID #define Point _Point #define Period() _Period #define Symbol _Symbol #define TimeToStr TimeToStruct // Позволяет, как в MT4, работать с таймсериями: Open[Pos], High[Pos], Low[Pos], Close[Pos], Time[Pos], Volume[Pos]. // А так же задает привычные MT4-функции: iOpen, iHigh, iLow, iClose, iTime, iVolume. #define DEFINE_TIMESERIE(NAME,FUNC,T) \ class CLASS##NAME \ { \ public: \ static T Get(const string Symb,const int TimeFrame,const int iShift) \ { \ T tValue[]; \ return((Copy##FUNC((Symb == NULL) ? _Symbol : Symb, _Period, iShift, 1, tValue) > 0) ? tValue[0] : -1); \ } \ T operator[](const int iPos) const \ { \ return(CLASS##NAME::Get(_Symbol, _Period, iPos)); \ } \ }; \ CLASS##NAME NAME; \ T i##NAME(const string Symb,const int TimeFrame,const int iShift) \ { \ return(CLASS##NAME::Get(Symb, TimeFrame, iShift)); \ } //+------------------------------------------------------------------+ DEFINE_TIMESERIE(Volume, TickVolume, long) DEFINE_TIMESERIE(Time, Time, datetime) DEFINE_TIMESERIE(Open, Open, double) DEFINE_TIMESERIE(High, High, double) DEFINE_TIMESERIE(Low, Low, double) DEFINE_TIMESERIE(Close, Close, double) //+------------------------------------------------------------------+ double Buffer1[]; //+------------------------------------------------------------------+ //| Объявляем внешние переменные | //+------------------------------------------------------------------+ datetime point_1; datetime point_2; datetime point_3; datetime LastBarTime; string line_name[10]; int gg=1; int x1; int x2; int x3; int xx1; // В эту переменную сохраняется значение номера бара вершины перед прогоном при появлении нового бара. int xx2; // Если линии стоят, значит при поялвении нового бара номер бара вершины должен увеличиться на 1. int xx3; // Если этого не произошло и xx1=x1 после прогона, значит увеличиваем вручную. int max; int maxx; double y1; double y2; double y3; double y11; double y22; double y33; double x11; double x22; double x33; double y; double a1; double a2; double a3; bool Deinit = true; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ MqlDateTime str; //-------------------------------------------------------------------- int OnInit() // Специальная функция init() { {SetIndexBuffer(0,Buffer1); //---- indicators //---- return(0); } return(INIT_SUCCEEDED); // Выход из спец. ф-ии init() } //-------------------------------------------------------------------- //int start() // Специальная функция start() 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[]) { // Пересчитываем инликатор только при появлении нового бара if(LastBarTime == iTime(Symbol, 0, 0)) return(0); LastBarTime = iTime(Symbol, 0, 0); // Присваиваем значения переменных времени int obj_total=ObjectsTotal(0,0,-1); for(int ii=0;ii<100;ii++) {string name = ObjectName(0,0,ii,OBJ_VLINE); if(ObjectGetInteger(0, name,OBJPROP_TYPE)!=OBJ_VLINE) continue; line_name[gg] = ObjectName(0,0,ii,OBJ_VLINE); gg=gg+1; } point_1=ObjectGetTimeByValue(0,line_name[1],0, OBJPROP_TIME); point_2=ObjectGetTimeByValue(0,line_name[2],0, OBJPROP_TIME); point_3=ObjectGetTimeByValue(0,line_name[3],0, OBJPROP_TIME); // Запоминаем текущий номер бара вершины xx1=x1; //Определяем номера баров ключевых точек for (int j=0;j<500; j++) { if (Time[j]==point_1) x1=j;} // Если после прогона сдвиг по вершине не произошел, значит линий нет, добавляем +1 вручную. if (x1==xx1) x1=x1+1; xx2=x2; for (int k=0;k<500; k++) {if (Time[k]==point_2) x2=k; } if (x2==xx2) x2=x2+1; xx3=x3; for (int l=0;l<500; l++) {if (Time[l]==point_3) x3=l; } if (x3==xx3) x3=x3+1; // Comment ("n1=", j," n2=", k, " n3=", l); //Находим "высоту" вершин { y1=High[x1]; y2=High[x2]; y3=High[x3]; //Comment ("y1=", y1," x1=", x1, " y2=", y2, "x2=", x2," y3=", y3, " x3=", x3); //Принимаем первую из них за начало координат a1=(y3-(x3*(y2-y1)+x2*y1-x1*y2)/(x2-x1))/(x3*(x3-x1-x2)+x1*x2); a2=((y2-y1)/(x2-x1))-a1*(x1+x2); a3=((x2*y1-x1*y2)/(x2-x1))+a1*x1*x2; max=MathMax(x1,x2); maxx=MathMax(max,x3); for (int i=maxx; i>=0; i--) { y=a1*i*i+a2*i+a3; Buffer1[i]=y;} return(0); } //-------------------------------------------------------------------- return(rates_total); // Выход из спец. ф-ии start() } //-------------------------------------------------------------------- void OnDeinit(const int reason) { if( Deinit == true) // Стираем с графика, если включена функция очистки графика { int obj_total=ObjectsTotal(0,0,-1); PrintFormat("Всего %d объектов",obj_total); for(int i=obj_total-1; i>=0; i--) { string name=ObjectName(0,i,-1,-1); // PrintFormat("Объект %d: %s",i,name); ObjectDelete(0,name); } } Comment(""); //--- destroy timer EventKillTimer(); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ エラーはないが、タイミング機能が正しく動作していない、時間が足りなかった) また、5で0による除算は、除算演算の前に検証した方が良い 除算子が0であれば、・・・・。 Tretyakov Rostyslav 2021.09.02 07:46 #16069 Manter84 #:はい、ところで、皆さんの回答は本当に弱いですね。 Manter84#: 以下は、最もシンプルなインダクタのコードです(これ以上ないほどシンプルです)。 6文字で5つの間違いがある...。 と訂正するのは弱すぎです。 Manter84 2021.09.02 08:15 #16070 Alexey Viktorov #:ガッカリ・・・汚い言葉しか残っていない。だから、何も言わない方がいいんです。 私はあなたに何をしたのですか?それとも、皆さんそんなに積極的なんですか? 1...160016011602160316041605160616071608160916101611161216131614...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
おやすみなさい!
フォーラムユーザーの皆様、助けてください。MQL4で、チャート上の与えられた3つのポイントを元に、数式で線を引くスクリプトを書きました。インデントやスペースを含めて130行かかる。最近、MQL5に移植することにしたのですが、プログラミングの拙い知識では、もう一度勉強する必要があり、役に立たないことに気づきました。
ゼロ除算の コードにエラーがあるので、まずそれを修正すること
a1=(y3-(x3*(y2-y1)+x2*y1-x1*y2)/(x2-x1))/(x3*(x3-x1-x2)+x1*x2);
ここで、x1とx2が "1 "になるので、"0 "で除算すると、"0 "になる。
マトリクス操作の前にチェックを行う
ジョーカーなんですね。しかし、問題は現実で、PrintコマンドがExpertsタブに2回印刷され、Allertも2回出るという話題があるが、どうすれば解決できるのか、残念ながら回答はない。また、今後のために、わからなければ黙って通り過ぎればいいのですが、専門外の回答で自ら評価を得るのは愚かなことです。はい、それにしても、皆さんの回答は本当に弱いですね。
おやすみなさい!
フォーラムユーザーの皆様、助けてください。MQL4で、チャート上の与えられた3つのポイントを元に、数式で線を引くスクリプトを書きました。インデントやスペースを含めて130行かかる。最近、MQL5に移植することにしたのですが、私のプログラミングの乏しい知識ではどうにもならないことに気づき、もう一度勉強し直さなければなりません。
どなたか、このスクリプトをMQL5に移植してくださる方がいらっしゃれば、ありがたいのですが。どなたか、このスクリプトをMQL5に変換していただけるとありがたいのですが。
スクリプトを書いたのなら、なぜコードにそれが必要なのですか?
問いがそうであるように、答えもそうです。
まあ、もっと詳細が必要だと書けばよかったんですけどね。一番シンプルなインジケータのコードを書いたのですが(これ以上シンプルにはできない)、Printコマンドのところでも2つのメッセージを生成してしまいます。また、Handleの取得を省略した場合は、1つのメッセージを表示します。
***
スクリプトを書いたのであれば、なぜコードの中に
まあ、もっと詳細が必要だと書けばよかったんですけどね。一番シンプルなインジケータのコードを書いたのですが(これ以上シンプルにはできない)、Printコマンドのところでも2つのメッセージを生成してしまいます。そして、Handleを取得しない場合は、1つを取得します。
やれやれ・・・汚い言葉しか出てきませんね。だから、黙っていたほうがいいんです。
私のプログラミングスキルは小学生レベルなので、いくつかの動くコードやルールを参考にしました。干渉しなかったもの、触れなかったもの)
了解です。
誰か助けてくれたら、とりあえずウィスキーをお借りします!)
のウイスキーは30ドルより安くはないと思います。だから、フリーランスのサイトでアプリケーションを作成する方が簡単だし、20人くらいは喜んでくれるだろう...そして、これはあなたのメッセージであり、あなたはルールを破るために人々を挑発する。誰が必要としているのか?じゃあ、タダでやれよ、それでどうする?結局のところ、あなたが合格していないボトルなので、それはお金のための仕事です迂回フリーランス。
エラーはないが、タイミング機能が正しく動作していない、時間が足りなかった)
また、5で0による除算は、除算演算の前に検証した方が良い 除算子が0であれば、・・・・。
はい、ところで、皆さんの回答は本当に弱いですね。
以下は、最もシンプルなインダクタのコードです(これ以上ないほどシンプルです)。
6文字で5つの間違いがある...。
と訂正するのは弱すぎです。
ガッカリ・・・汚い言葉しか残っていない。だから、何も言わない方がいいんです。
私はあなたに何をしたのですか?それとも、皆さんそんなに積極的なんですか?