MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1519 1...151215131514151515161517151815191520152115221523152415251526...1953 新しいコメント DYM 2021.06.29 18:59 #15181 またまたお邪魔して申し訳ないのですが、質問が出てきました。MT4用のColor Levelインジケータがあり、そのセットにはTrendCreateトレンドラインから作成された線分があり、日付と価格の4つのアンカーポイントがあり、レベルとしてさらに伸ばす場合は、Shiftを押さなければなりません。HLineCreateのようにTrendCreateのプロパティを変更する、つまり、レベルからセグメントを持つことは可能でしょうか、あるいは、HLineCreate自体でセグメントを作る方法があるのでしょうか?セグメントをトレンドライン ではなく、レベルのように動作させるということです Tretyakov Rostyslav 2021.06.29 19:44 #15182 DYM: またまたお邪魔して申し訳ないのですが、質問が出てきました。MT4用のColor Levelというインジケータがありますが、これはTrendCreate lineから作成された線分がセットになっていて、日付と価格の4つのアンカーポイントを持ち、さらにそれをレベルとして伸ばすとShiftを押さなければなりません。HLineCreateのようにTrendCreateのプロパティを変更する、つまり、レベルからセグメントを持つことは可能でしょうか、あるいは、HLineCreate自体でセグメントを作る方法があるのでしょうか?セグメントをトレンドライン ではなく、レベルのように動作させるということです 質問が明確でない... なぜShiftキーを押したままなのか?線は好きなように動きます。中心点によって移動しても、傾きは変わりません。 インジケーターの線の長さを変更したい場合は、コードに黄色いハイライトを追加してください extern int x_coor = 10; // Coordinate X extern int y_coor = 20; // Coordinate Y extern int x_size = 155; // длина объектов jarikn 2021.06.29 20:43 #15183 わああああああああああああああああああああああああああああああああ問題を解決するのを手伝ってください。何が問題なのかがわからない。テスターでのテストもできていない。そこに欠けているものは何でしょうか?なぜ、矢印ではなく、ローソク足ごとに実行されるのですか?もう気が狂いそうです((( ファイル: 123.mq4 10 kb DYM 2021.06.29 20:48 #15184 MakarFX:質問が明確でない...なぜShiftキーを押したままなのか?線は好きなように動きます。中心点によって移動しても、傾きは変わりません。インジケーターの線の長さを変更したい場合は、ハイライトされた黄色の線をコードに追加します。 gifを作りましたが、1本目はトレンドラインのプロパティ、2本目はレベルのプロパティを持っています(私にはそのように見えます)。線分に2本目の線分の性質を持たせる方法を理解したいのですが。 ファイル: line.gif 2022 kb Tretyakov Rostyslav 2021.06.29 21:40 #15185 DYM:GIFを作りましたが、1本目の線はトレンドラインのプロパティを持ち、2本目の線はレベルのプロパティを持っています(まあ、私にはそう見えますが)。線分が2本目の線分の性質を持つようになる仕組みを理解したい。 double a=ObjectGetDouble(ChartID,name,OBJPROP_PRICE1); double b=ObjectGetDouble(ChartID,name,OBJPROP_PRICE2); if(b!=a) ObjectSetDouble(ChartID,name,OBJPROP_PRICE2,a); Igor Makanu 2021.06.30 07:41 #15186 MakarFX:Igorさん、ありがとうございます。しかし、MT4は正しく動作しません。 何を直せばいいのか、教えてください。 このコードで動作するはずです。 #property copyright "IgorM" #property link "https://www.mql5.com/ru/users/igorm" #property version "1.00" #property strict #property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 1 // plot ZigZagZZ #property indicator_label1 "ZigZagZZ" #property indicator_type1 DRAW_SECTION #property indicator_color1 clrDarkBlue #property indicator_style1 STYLE_SOLID #property indicator_width1 3 // input parameters input int Deviation=10; // indicator buffers double ZZBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { // indicator buffers mapping SetIndexBuffer(0,ZZBuffer,INDICATOR_DATA); IndicatorSetInteger(INDICATOR_DIGITS,_Digits); SetIndexEmptyValue(0,0.0); //PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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[]) { static bool UP; static double max,min; static int LastExt=rates_total - 1; static const double dev=NormalizeDouble(Deviation*_Point,_Digits); int limit=LastExt; if(prev_calculated==0) { ArrayInitialize(ZZBuffer,0.0); limit = LastExt = rates_total - 1; if(low[0]<high[1]) { min=low[limit]; max=high[limit - 1]; UP=true; } else { max=high[limit]; min = low[limit - 1]; UP=false; } } for(int i=limit; i>=0; i--) { ZZBuffer[i]=0.0; if(UP) { if(low[i]-min<=0.0) { min=low[i]; ZZBuffer[LastExt]=0.0; LastExt=i; ZZBuffer[i]=min; } else { if(high[i]-min-dev>0.0) { max=high[i]; LastExt=i; ZZBuffer[i]=max; UP=false; } } } else { if(high[i]-max>=0.0) { max=high[i]; ZZBuffer[LastExt]=0.0; LastExt=i; ZZBuffer[i]=max; } else { if(low[i]-max+dev<0.0) { min=low[i]; LastExt=i; ZZBuffer[i]=min; UP=true; } } } } return(rates_total); } //+------------------------------------------------------------------+ Tretyakov Rostyslav 2021.06.30 07:52 #15187 Igor Makanu:このコードで動作するはずです。 ありがとうございました。全てうまくいった...あとは理屈を考えてみる(ジグザグ構造が私には難しい)。 Igor Makanu 2021.06.30 07:55 #15188 MakarFX: 本当にありがとうございました。あとはロジックを考える(ジグザグを作るのは難しくて理解できない)。 確認せず、実行したところ、描画されました。 ロジックは簡単で、いずれかの条件が発生したバーの数を探し、それをコードに格納します。 static int LastExt で、このバーと次のバーを比較し、ブレイクインフェーズであれば、このバーを静的 int LastExt に記憶させることになります。 Tretyakov Rostyslav 2021.06.30 08:40 #15189 Igor Makanu:確認せず、実行したところ、描画されました。ロジックは簡単で、いずれかの条件が発生したバーの数を探し、それをコードに格納します。に格納 し、このバーと次のバーを比較し、位相が途切れた場合は静的 int LastExt 今、私の頭の中ですべてが整列しています)イゴールさん、ありがとうございました。 DYM 2021.06.30 12:45 #15190 MakarFX: 困っています。price1というアンカー ポイントは理解できるのですが、条件の作り方がわかりません。私のバリアントが効かないんです。 extern ENUM_LINE_STYLE line_st = STYLE_SOLID; // 9. Стиль линий extern int line_wd = 2; // 10. Толщина линий // Координаты extern int x_coor = 7; // Сдвиг по оси X extern int y_coor = 10; // Сдвиг по оси Y //-- глобальные переменные string line[6] = {"line_1","line_2","line_3","line_4","line_5","line_6"}; void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { datetime dt1 = 0; double price1 = 0; datetime dt2 = 0; double price2 = 0; int window = 0; int x = 0; int y = 0; //+------------------------------------------------------------------+ //--- Клик по 1 линии if(id==CHARTEVENT_OBJECT_CLICK) { string clickObject=sparam; if(clickObject==line[0]) { string name="line_"+IntegerToString(MathRand()+100,0,' '); y=210; ChartXYToTimePrice(0,x_coor+25,y,window,dt1,price1); ChartXYToTimePrice(0,x_coor+157,y,window,dt2,price2); TrendCreate(0,name,0,dt1,price1,dt2,price2,color2,line_st,line_wd,false,true,false,false,false,0); price1=ObjectGetDouble(id,name,OBJPROP_PRICE1); price2=ObjectGetDouble(id,name,OBJPROP_PRICE2); if(price2!=price1) { ObjectSetDouble(id,name,OBJPROP_PRICE2,price1); } } } } //+------------------------------------------------------------------+ 1...151215131514151515161517151815191520152115221523152415251526...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
またまたお邪魔して申し訳ないのですが、質問が出てきました。MT4用のColor Levelというインジケータがありますが、これはTrendCreate lineから作成された線分がセットになっていて、日付と価格の4つのアンカーポイントを持ち、さらにそれをレベルとして伸ばすとShiftを押さなければなりません。HLineCreateのようにTrendCreateのプロパティを変更する、つまり、レベルからセグメントを持つことは可能でしょうか、あるいは、HLineCreate自体でセグメントを作る方法があるのでしょうか?セグメントをトレンドライン ではなく、レベルのように動作させるということです
質問が明確でない...
なぜShiftキーを押したままなのか?線は好きなように動きます。中心点によって移動しても、傾きは変わりません。
インジケーターの線の長さを変更したい場合は、コードに黄色いハイライトを追加してください
質問が明確でない...
なぜShiftキーを押したままなのか?線は好きなように動きます。中心点によって移動しても、傾きは変わりません。
インジケーターの線の長さを変更したい場合は、ハイライトされた黄色の線をコードに追加します。
gifを作りましたが、1本目はトレンドラインのプロパティ、2本目はレベルのプロパティを持っています(私にはそのように見えます)。線分に2本目の線分の性質を持たせる方法を理解したいのですが。
GIFを作りましたが、1本目の線はトレンドラインのプロパティを持ち、2本目の線はレベルのプロパティを持っています(まあ、私にはそう見えますが)。線分が2本目の線分の性質を持つようになる仕組みを理解したい。
Igorさん、ありがとうございます。しかし、MT4は正しく動作しません。
何を直せばいいのか、教えてください。
このコードで動作するはずです。
このコードで動作するはずです。
本当にありがとうございました。あとはロジックを考える(ジグザグを作るのは難しくて理解できない)。
確認せず、実行したところ、描画されました。
ロジックは簡単で、いずれかの条件が発生したバーの数を探し、それをコードに格納します。
で、このバーと次のバーを比較し、ブレイクインフェーズであれば、このバーを静的 int LastExt に記憶させることになります。
確認せず、実行したところ、描画されました。
ロジックは簡単で、いずれかの条件が発生したバーの数を探し、それをコードに格納します。
に格納 し、このバーと次のバーを比較し、位相が途切れた場合は静的 int LastExt
今、私の頭の中ですべてが整列しています)イゴールさん、ありがとうございました。
困っています。price1というアンカー ポイントは理解できるのですが、条件の作り方がわかりません。私のバリアントが効かないんです。