インディケータ: MACD発散 - ページ 5 12345 新しいコメント Stephen Paul 2020.05.05 08:39 #41 Alain Verleyen:あなたはポイントを見逃しました。あなたが言及している投稿は、EAからシグナルを取得する方法に関するもので、直近の2本のローソク足の値を取得するだけでは明らかに取得できません。ダイバージェンスを検出するには、ピーク/トラフが必要であり、そのためには、クローズする追加のローソク足が必要であるため、早期にシグナルを得ることは不可能です。つまり、ローソク足0がオープンしたばかりのときは、ローソク足1がクローズしていることを意味し、ローソク足2でピーク/トラフを確認することができます。もし、未確定のピーク/トラフを利用して早期にシグナルを出すようにインジケータを修正したい人がいれば、それは可能ですが、それは悪いシグナルがたくさん出てしまうので、私はそのようなことには協力しません。ローソク足1本目、あるいはローソク足0本目にシグナルを出すこともできますが、それでは何も変わりません。 コードを変更してみましたが、おっしゃるとおりです。あなたは実際のダイバージェンスの前に偽の動きを取得します。お忙しい中、ありがとうございました。 bk7 2021.01.16 16:31 #42 Alain Verleyen:あなたはポイントを見逃しました。あなたが言及している投稿は、EAからシグナルを取得する方法に関するもので、直近の2本のローソク足の値を取得するだけでは明らかに取得できません。ダイバージェンスを検出するには、ピーク/トラフが必要であり、そのためには、クローズする追加のローソク足が必要であるため、早期にシグナルを得ることは不可能です。つまり、ローソク足0がオープンしたばかりのときは、ローソク足1がクローズしていることを意味し、ローソク足2でピーク/トラフを確認することができます。もし、未確定のピーク/トラフを利用して早期にシグナルを出すようにインジケータを修正したい人がいれば、それは可能ですが、それは悪いシグナルがたくさん出てしまうので、私はそのようなことには協力しません。ローソク足1本目、あるいはローソク足0本目にシグナルを出すこともできますが、それでは何も変わりません。 しかし、これでは何も変わりません。 renkoチャートの場合、現在のバーは(ほとんど)すでに閉じているので、ローソク足を1本減らす必要があります。それとも、私が何かを見逃しているのでしょうか? Hristo 2021.04.06 23:07 #43 アラン、とても良いインジケーターだね。アラート機能があるのは良いことですが、私に欠けているのは、携帯電話にプッシュ通知を送信 する機能です。ポップアップアラートに表示されるメッセージと同じものをスマホに送信させたいのです。この機能を追加することはできますか?そうしていただけると助かります。 Zeke Yaeger 2021.04.12 05:14 #44 アラン、ありがとう。 Vladimir Karputov 2021.09.12 13:50 #45 取引、自動取引システム、取引戦略のテストに関するフォーラム マックダイブジェンス エネザ・ピーター・ムキラムウェニ, 2021.09.12 12:26 このインジケーターは3つのバーの後にアラートを表示しますが、1つのバーの直後にアラートを表示したいのですが。 //+------------------------------------------------------------------+ //|MACD_Divergence.mq5 //|アラン・ヴェルレーエン //|http:alamga.be|//www.alamga.be //+------------------------------------------------------------------+ #property copyright "Alain Verleyen (mql5) - Original author FX5 (mql4)" #property link "http://codebase.mql4.com/1115" #property version "1.01" #property description "The original indicator was totally rewrite to improve performance and" #property description "to correct a little bug. Also it's more funny that simply converting it." #property indicator_separate_window #property indicator_buffers 4 #property indicator_plots 4 //--- プロット1:強気 #property indicator_type1 DRAW_ARROW #property indicator_color1 clrGreen #property indicator_label1 "Bullish divergence" //--- プロット2:弱気 #property indicator_type2 DRAW_ARROW #property indicator_color2 clrRed #property indicator_label2 "Bearish divergence" //--- プロット3:MACDメイン #property indicator_type3 DRAW_LINE #property indicator_style3 STYLE_SOLID #property indicator_width3 2 #property indicator_color3 clrMagenta #property indicator_label3 "Main" //--- プロット4:MACDシグナル #property indicator_type4 DRAW_LINE #property indicator_style4 STYLE_SOLID #property indicator_width4 1 #property indicator_color4 clrNONE #property indicator_label4 "Signal" //--- 入力パラメータ input string s1="-----------------------------------------------"; // ----------- MACDの設定 ---------------------- input int fastEMA = 12; input int slowEMA = 26; input int signalSMA = 9; input string s2="-----------------------------------------------"; // インジケーターの設定 input bool drawIndicatorTrendLines = true; input bool drawPriceTrendLines = true; input bool displayAlert = true; //--- 定数 #define OBJECT_PREFIX "MACD_DivergenceLine" #define ARROWS_DISPLACEMENT 0.0001 //--- バッファ double bullishDivergence[]; double bearishDivergence[]; double macdBuffer[]; double signalBuffer[]; //--- ハンドル int macdHandle=INVALID_HANDLE; //--- グローバル変数 static datetime lastAlertTime; //+------------------------------------------------------------------+ //| カスタムインジケータ初期化関数 //+------------------------------------------------------------------+ int OnInit() { //--- インジケーター・ハンドル macdHandle=iMACD(NULL,0,fastEMA,slowEMA,signalSMA,PRICE_CLOSE); if(macdHandle==INVALID_HANDLE) { Print("The iMACD handle is not created: Error ",GetLastError()); return(INIT_FAILED); } //--- インジケータ・バッファのマッピング SetIndexBuffer(0,bullishDivergence); SetIndexBuffer(1,bearishDivergence); SetIndexBuffer(2,macdBuffer); SetIndexBuffer(3,signalBuffer); //--- 矢印のコードhttp://www.mql5.com/en/docs/constants/objectconstants/wingdings を参照 PlotIndexSetInteger(0,PLOT_ARROW,233); PlotIndexSetInteger(1,PLOT_ARROW,234); //--- インジケータのプロパティ string indicatorName=StringFormat("MACD_Divergence(%i, %i, %i)",fastEMA,slowEMA,signalSMA); PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,signalSMA); IndicatorSetInteger(INDICATOR_DIGITS,_Digits+2); IndicatorSetString(INDICATOR_SHORTNAME,indicatorName); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| チャートの洗浄| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ObjectDeleteByName("MACD_DivergenceLine"); } //+------------------------------------------------------------------+ //| カスタム・インジケータ反復関数| //+------------------------------------------------------------------+ 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 datetime lastCandleTime=0; if(lastCandleTime==time[rates_total-1]) return(rates_total); else lastCandleTime=time[rates_total-1]; //--- 最初の計算またはバーの数が変更された int start; if(prev_calculated<=0) { start=slowEMA; ArrayInitialize(bullishDivergence,EMPTY_VALUE); // ダイバージェンス・バッファは初期化されなければならない ArrayInitialize(bearishDivergence,EMPTY_VALUE); } else { start=prev_calculated-2; bullishDivergence[rates_total-1]=EMPTY_VALUE; bearishDivergence[rates_total-1]=EMPTY_VALUE; } //--- コピーするデータ(macdバッファ)数 int toCopy=rates_total-prev_calculated+(prev_calculated<=0 ? 0 : 1); //--- すべてのデータが計算されるとは限らない int calculated=BarsCalculated(macdHandle); if(calculated<rates_total) { Print("Not all data of macdHandle is calculated (",calculated,"bars ). Error",GetLastError()); return(0); } //--- メインMACDバッファの取得 if(IsStopped()) return(0); //停止フラグのチェック if(CopyBuffer(macdHandle,MAIN_LINE,0,toCopy,macdBuffer)<=0) { Print("Getting MACD Main is failed! Error : ",GetLastError()); return(0); } //--- シグナルMACDバッファの取得 if(IsStopped()) return(0); //停止フラグのチェック if(CopyBuffer(macdHandle,SIGNAL_LINE,0,toCopy,signalBuffer)<=0) { Print("Getting MACD Signal is failed! Error : ",GetLastError()); return(0); } //--- 計算のメインループ for(int shift=start; shift<rates_total-2; shift++) { int currentExtremum,lastExtremum; bool isBullishDivergence,isBearishDivergence; string divergenceMsg; ENUM_LINE_STYLE divergenceStyle=0; //--- 強気ダイバージェンス isBullishDivergence=false; if(macdBuffer[shift]<=macdBuffer[shift-1] && macdBuffer[shift]<macdBuffer[shift-2] && macdBuffer[shift]<macdBuffer[shift+1]) //--- 現在のmacdメインがボトム(前2回、次1回より低い)なら { currentExtremum=shift; lastExtremum=GetIndicatorLastTrough(shift); //--- if(macdBuffer[currentExtremum]>macdBuffer[lastExtremum] && low[currentExtremum]<low[lastExtremum]) { isBullishDivergence=true; divergenceMsg="Classical bullish divergence on: "; divergenceStyle=STYLE_SOLID; } //--- if(macdBuffer[currentExtremum]<macdBuffer[lastExtremum] && low[currentExtremum]>low[lastExtremum]) { isBullishDivergence=true; divergenceMsg="Reverse bullish divergence on: "; divergenceStyle=STYLE_DOT; } //--- 強気の乖離が見つかる if(isBullishDivergence) { bullishDivergence[currentExtremum]=macdBuffer[currentExtremum]-ARROWS_DISPLACEMENT; //--- if(drawPriceTrendLines==true) DrawTrendLine(TRENDLINE_MAIN,time[currentExtremum],time[lastExtremum],low[currentExtremum],low[lastExtremum],Green,divergenceStyle); //--- if(drawIndicatorTrendLines==true) DrawTrendLine(TRENDLINE_INDICATOR,time[currentExtremum],time[lastExtremum],macdBuffer[currentExtremum],macdBuffer[lastExtremum],Green,divergenceStyle); //--- if(displayAlert==true && shift>=rates_total-3 && time[currentExtremum]!=lastAlertTime) DisplayAlert(divergenceMsg,time[currentExtremum]); } } //--- ベアリッシュ・ダイバージェンス isBearishDivergence=false; if(macdBuffer[shift]>=macdBuffer[shift-1] && macdBuffer[shift]>macdBuffer[shift-2] && macdBuffer[shift]>macdBuffer[shift+1]) //--- 現在のmacdメインがトップ(前2回と次1回より高い)なら { currentExtremum=shift; lastExtremum=GetIndicatorLastPeak(shift); //--- if(macdBuffer[currentExtremum]<macdBuffer[lastExtremum] && high[currentExtremum]>high[lastExtremum]) { isBearishDivergence=true; divergenceMsg="Classical bearish divergence on: "; divergenceStyle=STYLE_SOLID; } if(macdBuffer[currentExtremum]>macdBuffer[lastExtremum] && high[currentExtremum]<high[lastExtremum]) { isBearishDivergence=true; divergenceMsg="Reverse bearish divergence on: "; divergenceStyle=STYLE_DOT; } //--- 弱気の乖離が見つかる if(isBearishDivergence) { bearishDivergence[currentExtremum]=macdBuffer[currentExtremum]+ARROWS_DISPLACEMENT; //--- if(drawPriceTrendLines==true) DrawTrendLine(TRENDLINE_MAIN,time[currentExtremum],time[lastExtremum],high[currentExtremum],high[lastExtremum],Red,STYLE_SOLID); //--- if(drawIndicatorTrendLines==true) DrawTrendLine(TRENDLINE_INDICATOR,time[currentExtremum],time[lastExtremum],macdBuffer[currentExtremum],macdBuffer[lastExtremum],Red,STYLE_SOLID); //--- if(displayAlert==true && shift>=rates_total-3 && time[currentExtremum]!=lastAlertTime) DisplayAlert(divergenceMsg,time[currentExtremum]); } } } //--- 次の呼び出しのためにprev_calculatedの値を返す return(rates_total); } //+------------------------------------------------------------------+ //| 最後の谷を検索| //+------------------------------------------------------------------+ int GetIndicatorLastTrough(int shift) { for(int i=shift-5; i>=2; i--) { if(signalBuffer[i] <= signalBuffer[i-1] && signalBuffer[i] <= signalBuffer[i-2] && signalBuffer[i] <= signalBuffer[i+1] && signalBuffer[i] <= signalBuffer[i+2]) { for(int j=i; j>=2; j--) { if(macdBuffer[j] <= macdBuffer[j-1] && macdBuffer[j] < macdBuffer[j-2] && macdBuffer[j] <= macdBuffer[j+1] && macdBuffer[j] < macdBuffer[j+2]) return(j); } } } return(0); } //+------------------------------------------------------------------+ //| 最後のピークを検索| //+------------------------------------------------------------------+ int GetIndicatorLastPeak(int shift) { for(int i=shift-5; i>=2; i--) { if(signalBuffer[i] >= signalBuffer[i-1] && signalBuffer[i] >= signalBuffer[i-2] && signalBuffer[i] >= signalBuffer[i+1] && signalBuffer[i] >= signalBuffer[i+2]) { for(int j=i; j>=2; j--) { if(macdBuffer[j] >= macdBuffer[j-1] && macdBuffer[j] > macdBuffer[j-2] && macdBuffer[j] >= macdBuffer[j+1] && macdBuffer[j] > macdBuffer[j+2]) return(j); } } } return(0); } //+------------------------------------------------------------------+ //| DrawTrendLineで使用されるENUM_TRENDLINE_TYPE。 //+------------------------------------------------------------------+ enum ENUM_TRENDLINE_TYPE { TRENDLINE_MAIN, TRENDLINE_INDICATOR }; //+------------------------------------------------------------------+ //| メインチャートまたはインジケータにトレンドラインを引く。 //+------------------------------------------------------------------+ void DrawTrendLine(ENUM_TRENDLINE_TYPE window,datetime x1,datetime x2,double y1,double y2,color lineColor,ENUM_LINE_STYLE style) { string label=OBJECT_PREFIX+"#"+IntegerToString(window)+DoubleToString(x1,0); int subwindow=(window==TRENDLINE_MAIN) ? 0 : ChartWindowFind(); ObjectDelete(0,label); ObjectCreate(0,label,OBJ_TREND,subwindow,x1,y1,x2,y2,0,0); ObjectSetInteger(0,label,OBJPROP_RAY,false); ObjectSetInteger(0,label,OBJPROP_COLOR,lineColor); ObjectSetInteger(0,label,OBJPROP_STYLE,style); } //+------------------------------------------------------------------+ //| 乖離が見つかったらアラートを表示する| //+------------------------------------------------------------------+ void DisplayAlert(string message,const datetime alertTime) { lastAlertTime=alertTime; Alert(message,Symbol()," , ",EnumToString(Period())," minutes chart"); } //+------------------------------------------------------------------+ //| インジケータによって描画されたすべてのオブジェクトを削除します。 //+------------------------------------------------------------------+ void ObjectDeleteByName(string prefix) { int total=ObjectsTotal(0), length=StringLen(prefix); //--- インジケータが使用するすべてのオブジェクトの削除 for(int i=total-1; i>=0; i--) { string objName=ObjectName(0,i); if(StringSubstr(objName,0,length)==prefix) { ObjectDelete(0,objName); } } } //+------------------------------------------------------------------+ Alain Verleyen 2021.09.12 13:55 #46 取引、自動取引システム、取引戦略のテストに関するフォーラム インジケーターMACDダイバージェンス Alain Verleyen, 2013.11.05 19:14 とてもフレンドリーですね。 シグナルはローソク足の終値で表示されます。それは正常であり、それが動作するように持っている方法です。ダイバージェンスは、極端(トップ/ボトム)の研究に基づいています。もし現在のローソク足で極値を検出する方法をお持ちでしたら、プログラミングを学び、私たちに無料でこの素晴らしい技術革新を提供することをお勧めします。 ご意見ありがとうございました。 lego9955 2021.12.14 01:18 #47 こんにちは、アラン。とても良いインジケーターだ。正しいシグナルを出してくれる。 ところで、"//---弱気のダイバージェンスが 見つかった "の部分は、"STYLE_SOLID "ではなく、"divergenceStyle "のはずでした。 インジケータは全く再描画しない。そこで、インジケータの最後のバーをダイバージェンスシグナルと同様に再描画できるように少し修正することにしました。 これは前のバーのダイバージェンスシグナルを表示するもので、再描画可能なシグナルであることは確かです。バーが閉じる直前にシグナルを使用することは、速いタイムフレームでは役に立つでしょう。 変更を加えました: - "//---トータル再描画を除き、新しいローソク足でのみ更新されるインジケーター" の部分をすべて削除。 - "start=prev_calculated-2; "を "start=prev_calculated-1; "に変更。 - "//--- 計算のメインループ "の "for(int shift=start; shift<rates_total-2; shift++) "は "for(int shift=start; shift<rates_total-1; shift++) "に変更されました。 ダイバージェンスシグナルが前のバーで表示されるようになりましたが、表示された瞬間にフリーズしてしまい、このバーのインジケータラインに従いません。 これを解決する方法を教えてください。 MetaTrader 5の継続的な先物取引 通貨バスケットをトレードするときに利用可能なパターン。 パート2 インディケータ間のデータ交換:簡単です lego9955 2021.12.15 21:10 #48 この部分を変更して解決した。もっと簡単でいい方法があるかもしれないが、うまくいった。矢印は1小節先に移動した。矢印のない線は未確認シグナルです。 //--- インジケータは、合計の再描画を除き、新しいローソク足でのみ更新されます。 // static datetime lastCandleTime=0; // if(lastCandleTime==time[rates_total-1]) // return(rates_total); // さもなければ // lastCandleTime=time[rates_total-1]; //--- 最初の計算またはバーの数が変更された int start; if(prev_calculated<=0) { start=slowEMA; ArrayInitialize(bullishDivergence,EMPTY_VALUE); // ダイバージェンス・バッファは初期化されなければならない ArrayInitialize(bearishDivergence,EMPTY_VALUE); } else { start=prev_calculated-1; bullishDivergence[rates_total-1]=EMPTY_VALUE; bearishDivergence[rates_total-1]=EMPTY_VALUE; } //--- コピーするデータ(macdバッファ)数 int toCopy=rates_total-prev_calculated+(prev_calculated<=0 ? 0 : 1); //--- すべてのデータが計算されるとは限らない int calculated=BarsCalculated(macdHandle); if(calculated<rates_total) { Print("Not all data of macdHandle is calculated (",calculated,"bars ). Error",GetLastError()); return(0); } //--- メインMACDバッファの取得 if(IsStopped()) return(0); //停止フラグのチェック if(CopyBuffer(macdHandle,MAIN_LINE,0,toCopy,macdBuffer)<=0) { Print("Getting MACD Main is failed! Error : ",GetLastError()); return(0); } //--- シグナルMACDバッファの取得 if(IsStopped()) return(0); //停止フラグのチェック if(CopyBuffer(macdHandle,SIGNAL_LINE,0,toCopy,signalBuffer)<=0) { Print("Getting MACD Signal is failed! Error : ",GetLastError()); return(0); } //--- 計算のメインループ for(int shift=start; shift<rates_total; shift++) { int currentExtremum,lastExtremum; bool isBullishDivergence,isBearishDivergence; string divergenceMsg; ENUM_LINE_STYLE divergenceStyle=0; //--- 強気ダイバージェンス isBullishDivergence=false; if(macdBuffer[shift-1]<=macdBuffer[shift-2] && macdBuffer[shift-1]<macdBuffer[shift-3] && macdBuffer[shift-1]<macdBuffer[shift]) //--- 現在のmacdメインがボトム(前2回、次1回より低い)なら { currentExtremum=shift; lastExtremum=GetIndicatorLastTrough(shift); //--- if(macdBuffer[currentExtremum-1]>macdBuffer[lastExtremum] && low[currentExtremum-1]<low[lastExtremum]) { isBullishDivergence=true; divergenceMsg="Classical bullish divergence on: "; divergenceStyle=STYLE_SOLID; } //--- if(macdBuffer[currentExtremum-1]<macdBuffer[lastExtremum] && low[currentExtremum-1]>low[lastExtremum]) { isBullishDivergence=true; divergenceMsg="Reverse bullish divergence on: "; divergenceStyle=STYLE_DOT; } //--- 強気の乖離が見つかる if(isBullishDivergence) { bullishDivergence[currentExtremum]=macdBuffer[currentExtremum]-ARROWS_DISPLACEMENT; //--- if(drawPriceTrendLines==true) DrawTrendLine(TRENDLINE_MAIN,time[currentExtremum-1],time[lastExtremum],low[currentExtremum-1],low[lastExtremum],Green,divergenceStyle); //--- if(drawIndicatorTrendLines==true) DrawTrendLine(TRENDLINE_INDICATOR,time[currentExtremum-1],time[lastExtremum],macdBuffer[currentExtremum-1],macdBuffer[lastExtremum],Green,divergenceStyle); //--- if(displayAlert==true && shift>=rates_total-3 && time[currentExtremum-1]!=lastAlertTime) DisplayAlert(divergenceMsg,time[currentExtremum-1]); } } //--- ベアリッシュ・ダイバージェンス isBearishDivergence=false; if(macdBuffer[shift-1]>=macdBuffer[shift-2] && macdBuffer[shift-1]>macdBuffer[shift-3] && macdBuffer[shift-1]>macdBuffer[shift]) //--- 現在のmacdメインがトップ(前2回と次1回より高い)なら { currentExtremum=shift; lastExtremum=GetIndicatorLastPeak(shift); //--- if(macdBuffer[currentExtremum-1]<macdBuffer[lastExtremum] && high[currentExtremum-1]>high[lastExtremum]) { isBearishDivergence=true; divergenceMsg="Classical bearish divergence on: "; divergenceStyle=STYLE_SOLID; } if(macdBuffer[currentExtremum-1]>macdBuffer[lastExtremum] && high[currentExtremum-1]<high[lastExtremum]) { isBearishDivergence=true; divergenceMsg="Reverse bearish divergence on: "; divergenceStyle=STYLE_DOT; } //--- 弱気の乖離が見つかる if(isBearishDivergence) { bearishDivergence[currentExtremum]=macdBuffer[currentExtremum]+ARROWS_DISPLACEMENT; //--- if(drawPriceTrendLines==true) DrawTrendLine(TRENDLINE_MAIN,time[currentExtremum-1],time[lastExtremum],high[currentExtremum-1],high[lastExtremum],Red,divergenceStyle); //--- if(drawIndicatorTrendLines==true) DrawTrendLine(TRENDLINE_INDICATOR,time[currentExtremum-1],time[lastExtremum],macdBuffer[currentExtremum-1],macdBuffer[lastExtremum],Red,divergenceStyle); //--- if(displayAlert==true && shift>=rates_total-3 && time[currentExtremum-1]!=lastAlertTime) DisplayAlert(divergenceMsg,time[currentExtremum-1]); } } } //--- 次の呼び出しのためにprev_calculatedの値を返す return(rates_total); } //+------------------------------------------------------------------+ //| 最後の谷を検索| //+------------------------------------------------------------------+ int GetIndicatorLastTrough(int shift) { for(int i=shift-6; i>=2; i--) { if(signalBuffer[i] <= signalBuffer[i-1] && signalBuffer[i] <= signalBuffer[i-2] && signalBuffer[i] <= signalBuffer[i+1] && signalBuffer[i] <= signalBuffer[i+2]) { for(int j=i; j>=2; j--) { if(macdBuffer[j] <= macdBuffer[j-1] && macdBuffer[j] < macdBuffer[j-2] && macdBuffer[j] <= macdBuffer[j+1] && macdBuffer[j] < macdBuffer[j+2]) return(j); } } } return(0); } //+------------------------------------------------------------------+ //| 最後のピークを検索| //+------------------------------------------------------------------+ int GetIndicatorLastPeak(int shift) { for(int i=shift-6; i>=2; i--) { if(signalBuffer[i] >= signalBuffer[i-1] && signalBuffer[i] >= signalBuffer[i-2] && signalBuffer[i] >= signalBuffer[i+1] && signalBuffer[i] >= signalBuffer[i+2]) { for(int j=i; j>=2; j--) { if(macdBuffer[j] >= macdBuffer[j-1] && macdBuffer[j] > macdBuffer[j-2] && macdBuffer[j] >= macdBuffer[j+1] && macdBuffer[j] > macdBuffer[j+2]) return(j); } } } return(0); } //+------------------------------------------------------------------+ //| DrawTrendLineで使用されるENUM_TRENDLINE_TYPE。 //+------------------------------------------------------------------+ Vraja Sudhakar 2021.12.16 05:40 #49 Vladimir Karputov #: ダイバージェンスゼロラインも価格形成HLボトム(価格は再びLLを作らなかった場合)ヒストグラムを下回ると、他の任意の5 30 60 240 tf 3 tfは実りあるに署名した。 Tony Sampietro 2022.05.27 01:19 #50 こんにちは、アラン、 この素晴らしいインジケーターをありがとうございます! このインジケータのデータウィンドウの値をEAの中で使おうとしています(添付ファイルをご覧ください)。 4つの指標全てに同じロジックを使用していますが、最後の2つ(MainとSignal)のみ正しい値を得ることができます。 最初の2つについては、常に固定値が表示されます。 添付の例では、1つは正しい値で、もう1つは0/空白のはずです。 なぜこのような問題が起こるのかわかりますか? ありがとうございました。 ファイル: Screenshot.PNG 85 kb 12345 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
あなたはポイントを見逃しました。あなたが言及している投稿は、EAからシグナルを取得する方法に関するもので、直近の2本のローソク足の値を取得するだけでは明らかに取得できません。
ダイバージェンスを検出するには、ピーク/トラフが必要であり、そのためには、クローズする追加のローソク足が必要であるため、早期にシグナルを得ることは不可能です。つまり、ローソク足0がオープンしたばかりのときは、ローソク足1がクローズしていることを意味し、ローソク足2でピーク/トラフを確認することができます。もし、未確定のピーク/トラフを利用して早期にシグナルを出すようにインジケータを修正したい人がいれば、それは可能ですが、それは悪いシグナルがたくさん出てしまうので、私はそのようなことには協力しません。
ローソク足1本目、あるいはローソク足0本目にシグナルを出すこともできますが、それでは何も変わりません。
あなたはポイントを見逃しました。あなたが言及している投稿は、EAからシグナルを取得する方法に関するもので、直近の2本のローソク足の値を取得するだけでは明らかに取得できません。
ダイバージェンスを検出するには、ピーク/トラフが必要であり、そのためには、クローズする追加のローソク足が必要であるため、早期にシグナルを得ることは不可能です。つまり、ローソク足0がオープンしたばかりのときは、ローソク足1がクローズしていることを意味し、ローソク足2でピーク/トラフを確認することができます。もし、未確定のピーク/トラフを利用して早期にシグナルを出すようにインジケータを修正したい人がいれば、それは可能ですが、それは悪いシグナルがたくさん出てしまうので、私はそのようなことには協力しません。
ローソク足1本目、あるいはローソク足0本目にシグナルを出すこともできますが、それでは何も変わりません。
しかし、これでは何も変わりません。
renkoチャートの場合、現在のバーは(ほとんど)すでに閉じているので、ローソク足を1本減らす必要があります。それとも、私が何かを見逃しているのでしょうか?
取引、自動取引システム、取引戦略のテストに関するフォーラム
マックダイブジェンス
エネザ・ピーター・ムキラムウェニ, 2021.09.12 12:26
このインジケーターは3つのバーの後にアラートを表示しますが、1つのバーの直後にアラートを表示したいのですが。
取引、自動取引システム、取引戦略のテストに関するフォーラム
インジケーターMACDダイバージェンス
Alain Verleyen, 2013.11.05 19:14
とてもフレンドリーですね。
シグナルはローソク足の終値で表示されます。それは正常であり、それが動作するように持っている方法です。ダイバージェンスは、極端(トップ/ボトム)の研究に基づいています。もし現在のローソク足で極値を検出する方法をお持ちでしたら、プログラミングを学び、私たちに無料でこの素晴らしい技術革新を提供することをお勧めします。
ご意見ありがとうございました。
この部分を変更して解決した。もっと簡単でいい方法があるかもしれないが、うまくいった。矢印は1小節先に移動した。矢印のない線は未確認シグナルです。
ダイバージェンスゼロラインも価格形成HLボトム(価格は再びLLを作らなかった場合)ヒストグラムを下回ると、他の任意の5 30 60 240 tf 3 tfは実りあるに署名した。
こんにちは、アラン、
この素晴らしいインジケーターをありがとうございます!
このインジケータのデータウィンドウの値をEAの中で使おうとしています(添付ファイルをご覧ください)。
4つの指標全てに同じロジックを使用していますが、最後の2つ(MainとSignal)のみ正しい値を得ることができます。
最初の2つについては、常に固定値が表示されます。
添付の例では、1つは正しい値で、もう1つは0/空白のはずです。
なぜこのような問題が起こるのかわかりますか?
ありがとうございました。