MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 745 1...738739740741742743744745746747748749750751752...1953 新しいコメント Konstantin Lebedev 2019.01.20 10:26 #7441 テストされていないインジケーターと残りのすべての反転レベルバンドを非表示にし、テスト済みのバンドのみを残すことは可能ですか?つまり、 extern bool zone_show_weak=true;を非表示にします。以下のコードでは、(zone_strength [i] == ZONE_WEAK && zone_show_weak == false)などを非表示にできません。たぶん誰かがコードを理解して修正するか、私が上で説明したレベルを削除します。インジケーターコード: #propertycopyright"Copyright©2017AndrewSumner" #property link "" #プロパティindicator_chart_window #property Indicator_buffers 4 #propertyindicator_color1赤#propertyindicator_color2赤#プロパティindicator_color3 DodgerBlue #プロパティindicator_color4 DodgerBlue extern int BackLimit = 300; //バックバックextern int TimeFrame = 0; extern string TimeString = "0 =現在、60 = H1、240 = H4、1440 =日、10080 =週、43200=月"; extern color color_support_weak = MediumAquamarine; //サポート-弱いDarkSlateGrayのサポートextern color color_support_untested = SeaGreen; //チェックを外しますextern colorcolor_support_verified=緑; extern color color_support_proven = LimeGreen; extern colorcolor_support_turncoat=オリーブドラブ; extern colorcolor_resist_weak=シエナ; extern colorcolor_resist_untested=オーキッド; extern colorcolor_resist_verified=クリムゾン; extern colorcolor_resist_proven=赤; extern color color_resist_turncoat = DarkOrange; extern bool zone_show_weak = true; extern double zone_fuzzfactor = 0.2; extern bool zone_solid = false; // falseの場合はtrue、フルストライプゾーンはありませんが、幅幅の長方形で囲まれますextern int zone_linewidth = 2; extern int zone_style = 0; extern bool zone_show_info = true; extern int zone_label_shift = 22; //ラベルの水平オフセット。ただし、インジケーターを削除した後のみextern bool zone_show_alerts = false; extern bool zone_alert_popups = true; extern bool zone_alert_sounds = true; extern bool send_email = false; extern int zone_alert_waitseconds = 300; extern bool zone_merge = true; extern bool zone_extend = true; extern bool fractals_show = false; extern double fractal_fast_factor = 3.0; extern double fractal_slow_factor = 6.0; extern bool SetGlobals = true; double FastDnPts []、FastUpPts []; double SlowDnPts []、SlowUpPts []; double zone_hi [1000]、zone_lo [1000]; int zone_start [1000]、zone_hits [1000]、zone_type [1000]、zone_strength [1000]、zone_count = 0; boolzone_turn [1000]; #define ZONE_SUPPORT 1 #define ZONE_RESIST 2 #define ZONE_WEAK 0 #define ZONE_TURNCOAT 1 #define ZONE_UNTESTED 2 #define ZONE_VERIFIED 3 #define ZONE_PROVEN 4 #define UP_POINT 1 #define DN_POINT -1 int time_offset = 0; int init() {{ IndicatorBuffers(4); SetIndexBuffer(0、SlowDnPts); SetIndexBuffer(1、SlowUpPts); SetIndexBuffer(2、FastDnPts); SetIndexBuffer(3、FastUpPts); if(fractals_show == true) {{ SetIndexStyle(0、DRAW_ARROW、0、3); SetIndexStyle(1、DRAW_ARROW、0、3); SetIndexStyle(2、DRAW_ARROW、0、1); SetIndexStyle(3、DRAW_ARROW、0、1); SetIndexArrow(0、218); SetIndexArrow(1、217); SetIndexArrow(2、218); SetIndexArrow(3、217); }そうしないと{{ SetIndexStyle(0、DRAW_NONE); SetIndexStyle(1、DRAW_NONE); SetIndexStyle(2、DRAW_NONE); SetIndexStyle(3、DRAW_NONE); } if(TimeFrame!= 1 && TimeFrame!= 5 && TimeFrame!= 15 && TimeFrame!= 60 && TimeFrame!= 240 && TimeFrame!= 1440 && TimeFrame!= 10080 && TimeFrame!= 43200)時間枠=0; if(TimeFrame <Period())時間枠=期間(); return(0); } int deinit() {{ DeleteZones(); DeleteGlobalVars(); return(0); } int start() {{ if(NewBar()== true) {{ int old_zone_count = zone_count;高速フラクタル(); SlowFractals(); DeleteZones(); FindZones(); DrawZones(); if(zone_count <old_zone_count) DeleteOldGlobalVars(old_zone_count); } if(zone_show_info == true) {{ for(int i = 0; i <zone_count; i ++) {{文字列lbl; if(zone_strength [i] == ZONE_PROVEN) lbl = ""; //実証済みelse if(zone_strength [i] == ZONE_VERIFIED) lbl = ""; //チェック済みelse if(zone_strength [i] == ZONE_UNTESTED) lbl = ""; //テストしないelse if(zone_strength [i] == ZONE_TURNCOAT) lbl = ""; //逆転そうしないとlbl = ""; // 弱いif(zone_type [i] == ZONE_SUPPORT) lbl = lbl + "under"; //サポートそうしないとlbl = lbl + "sop"; //抵抗if(zone_hits [i]> 0 && zone_strength [i]> ZONE_UNTESTED) {{ if(zone_hits [i] == 1) lbl = lbl + "、T =" + zone_hits [i]; //テストカウントそうしないとlbl = lbl + "、T =" + zone_hits [i]; //テストカウント} int Adjust_hpos; int wbpc = WindowBarsPerChart(); int k; k = Period()* 60 +(20 + StringLen(lbl)); if(wbpc <80) Adjust_hpos = Time [0] + k * 4; else if(wbpc <125) Adjust_hpos = Time [0] + k * 8;それ以外の場合(wbpc <250) Adjust_hpos = Time [0] + k * 15; else if(wbpc <480) Adjust_hpos = Time [0] + k * 29; else if(wbpc <950) Adjust_hpos = Time [0] + k * 58;そうしないとAdjust_hpos = Time [0] + k * 115; int shift = k * zone_label_shift; double vpos = zone_hi [i]-(zone_hi [i] --zone_lo [i])/ 2; //レベルの説明のテキスト文字列s="SSSR#" + i + "LBL"; ObjectCreate(s、OBJ_TEXT、0、0、0); ObjectSet(s、OBJPROP_TIME1、adjust_hpos + shift); ObjectSet(s、OBJPROP_PRICE1、vpos); ObjectSetText(s、StringRightPad(lbl、36、 "")、11、 "Courier New"、clrWhite); //黒} } CheckAlerts(); return(0); } void CheckAlerts() {{ static int lastalert = 0; if(zone_show_alerts == false)戻る; if(Time [0]-lastalert> zone_alert_waitseconds) if(CheckEntryAlerts()== true) lastalert = Time [0]; } bool CheckEntryAlerts() {{ //レコードを確認しますfor(int i = 0; i <zone_count; i ++) {{ if(Close [0]> = zone_lo [i] && Close [0] <zone_hi [i]) {{ if(zone_show_alerts == true) {{ if(zone_alert_popups == true) {{ if(zone_type [i] == ZONE_SUPPORT) Alert(Symbol()+ TimeFrameToString(TimeFrame)+ ":サポートゾーンが入力されました"); //サポートゾーンを導入そうしないとAlert(Symbol()+ TimeFrameToString(TimeFrame)+ ":レジスタンスゾーンが入力されました"); //抵抗ゾーンを導入} if(zone_alert_sounds == true) PlaySound( "alert.wav"); } if(send_email == true) {{ string dir = ""; string msg = StringConcatenate(Symbol()、 "-"、TimeFrameToString(TimeFrame)、 "at"、TimeToStr(Time [0]、TIME_DATE | TIME_SECONDS)、 ""、dir、 "ゾーンが入力されました"); if(zone_type [i] == ZONE_SUPPORT) {{ dir="サポート"; SendMail( "SS_SupRes_v04c alert"、msg); }そうしないと{{ dir="抵抗"; SendMail( "SS_SupRes_v04c alert"、msg); } } return(true); } } return(false); } void DeleteGlobalVars() {{ if(SetGlobals == false)戻る; GlobalVariableDel( "SSSR_Count _" + Symbol()+ TimeFrame); GlobalVariableDel( "SSSR_Updated _" + Symbol()+ TimeFrame); int old_count = zone_count; zone_count = 0; DeleteOldGlobalVars(old_count); } void DeleteOldGlobalVars(int old_count) {{ if(SetGlobals == false)戻る; for(int i = zone_count; i <old_count; i ++) {{ GlobalVariableDel( "SSSR_HI _" + Symbol()+ TimeFrame + i); GlobalVariableDel( "SSSR_LO _" + Symbol()+ TimeFrame + i); GlobalVariableDel( "SSSR_HITS _" + Symbol()+ TimeFrame + i); GlobalVariableDel( "SSSR_STRENGTH _" + Symbol()+ TimeFrame + i); GlobalVariableDel( "SSSR_AGE _" + Symbol()+ TimeFrame + i); } } void FindZones() {{ int i、j、shift、bustcount = 0、testcount = 0;ダブルハイバル、ローバル; bool turn = false、hasturned = false; double temp_hi [1000]、temp_lo [1000]; int temp_start [1000]、temp_hits [1000]、temp_strength [1000]、temp_count = 0; bool temp_turn [1000]、temp_merge [1000]; int merge1 [1000]、merge2 [1000]、merge_count = 0; //ゾーンを最も古いものから最も小さいものへとループします(最後の5つのバーは無視します)。 //現在まで生き残った人を見つける... for(shift = MathMin(iBars(NULL、TimeFrame)-1、BackLimit); shift> 5; shift--) {{ double atr = iATR(NULL、TimeFrame、7、shift); double fu = atr / 2 * zone_fuzzfactor; bool isWeak; bool touchOk = false; bool isBust = false; double close = iClose(NULL、TimeFrame、shift);ダブルハイ=iHigh(NULL、TimeFrame、shift);ダブルロー=iLow(NULL、TimeFrame、shift);ダブルhi_i; double lo_i; if(FastUpPts [shift]> 0.001) {{ //ハイポイントジグザグisWeak = true; if(SlowUpPts [shift]> 0.001) isWeak = false; hival = high; if(zone_extend == true) hival + = fu; loval = MathMax(MathMin(close、high-fu)、high-fu * 2); turn = false; hasturned = false; isbust = false;バスカウント=0; testcount = 0; for(i = shift-1; i> = 0; i--) {{ hi_i = iHigh(NULL、TimeFrame、i); lo_i = iLow(NULL、TimeFrame、i); if((turned == false && FastUpPts [i]> = loval && FastUpPts [i] <= hival)|| (turned == true && FastDnPts [i] <= hival && FastDnPts [i]> = loval)) {{ //潜在的なタッチ、最後から10本以上のキャンドルであることを確認してくださいtouchOk = true; for(j = i + 1; j <i + 11; j ++) {{ if((turned == false && FastUpPts [j]> = loval && FastUpPts [j] <= hival)|| (turned == true && FastDnPts [j] <= hival && FastDnPts [j]> = loval)) {{ touchOk = false;壊す; } } if(touchOk == true) {{ //タッチがあります。一度バストされた場合は、バストカウントを削除します//このレベルはまだ有効であり、サイドを切り替えただけであることがわかっているためバスカウント=0; testcount ++; } } if((turned == false && hi_i> hival)|| (turned == true && lo_i <loval)) {{ //このレベルは少なくとも1回は無効になっていますbustcount ++; if(bustcount> 1 || isWeak == true) {{ //2つ以上isBust = true;壊す; } if(turned == true) turn = false; else if(turned == false) turn = true; hasturned = true; //以前のヒットを忘れるtestcount = 0; } } if(isBust == false) {{ //レベルはまだ有効です、リストに追加してくださいtemp_hi [temp_count] = hival; temp_lo [temp_count] = loval; temp_turn [temp_count] = hasturned; temp_hits [temp_count] = testcount; temp_start[temp_count]=シフト; temp_merge [temp_count] = false; if(testcount> 3) temp_strength [temp_count] = ZONE_PROVEN; else if(testcount> 0) temp_strength [temp_count] = ZONE_VERIFIED; else if(hasturned == true) temp_strength [temp_count] = ZONE_TURNCOAT; else if(isWeak == false) temp_strength [temp_count] = ZONE_UNTESTED;そうしないとtemp_strength [temp_count] = ZONE_WEAK; temp_count ++; } } else if(FastDnPts [shift]> 0.001) {{ //低いジグザグポイントisWeak = true; if(SlowDnPts [shift]> 0.001) isWeak = false; loval=低; if(zone_extend == true) loval = fu; hival = MathMin(MathMax(close、low + fu)、low + fu * 2); turn = false; hasturned = false;バスカウント=0; testcount = 0; isbust = false; for(i = shift-1; i> = 0; i--) {{ hi_i = iHigh(NULL、TimeFrame、i); lo_i = iLow(NULL、TimeFrame、i); if((turned == true && FastUpPts [i]> = loval && FastUpPts [i] <= hival)|| (turned == false && FastDnPts [i] <= hival && FastDnPts [i]> = loval)) {{ //潜在的なタッチ、最後から10本以上のキャンドルであることを確認してくださいtouchOk = true; for(j = i + 1; j <i + 11; j ++) {{ if((turned == true && FastUpPts [j]> = loval && FastUpPts [j] <= hival)|| (turned == false && FastDnPts [j] <= hival && FastDnPts [j]> = loval)) {{ touchOk = false;壊す; } } if(touchOk == true) {{ //タッチがあります。一度バストされた場合は、バストカウントを削除します//このレベルはまだ有効であり、サイドを切り替えただけであることがわかっているためバスカウント=0; testcount ++; } } if((turned == true && hi_i> hival)|| (turned == false && lo_i <loval)) {{ //このレベルは少なくとも1回は無効になっていますbustcount ++; if(bustcount> 1 || isWeak == true) {{ //2つ以上isBust = true;壊す; } if(turned == true) turn = false; else if(turned == false) turn = true; hasturned = true; //以前のヒットを忘れるtestcount = 0; } } if(isBust == false) {{ //レベルはまだ有効です、リストに追加してくださいtemp_hi [temp_count] = hival; temp_lo [temp_count] = loval; temp_turn [temp_count] = hasturned; temp_hits [temp_count] = testcount; temp_start[temp_count]=シフト; temp_merge [temp_count] = false; if(testcount> 3) temp_strength [temp_count] = ZONE_PROVEN; else if(testcount> 0) temp_strength [temp_count] = ZONE_VERIFIED; else if(hasturned == true) temp_strength [temp_count] = ZONE_TURNCOAT; else if(isWeak == false) temp_strength [temp_count] = ZONE_UNTESTED;そうしないとtemp_strength [temp_count] = ZONE_WEAK; temp_count ++; } } } //重複するゾーンを探します... if(zone_merge == true) {{ merge_count = 1; int反復=0; while(merge_count> 0&&反復<3) {{ merge_count = 0;反復++; for(i = 0; i <temp_count; i ++) temp_merge [i] = false; for(i = 0; i <temp_count-1; i ++) {{ if(temp_hits [i] == -1 || temp_merge [j] == true)継続する; for(j = i + 1; j <temp_count; j ++) {{ if(temp_hits [j] == -1 || temp_merge [j] == true)継続する; if((temp_hi [i]> = temp_lo [j] && temp_hi [i] <= temp_hi [j])|| (temp_lo [i] <= temp_hi [j] && temp_lo [i]> = temp_lo [j])|| (temp_hi [j]> = temp_lo [i] && temp_hi [j] <= temp_hi [i])|| (temp_lo [j] <= temp_hi [i] && temp_lo [j]> = temp_lo [i])) {{ merge1 [merge_count] = i; merge2 [merge_count] = j; temp_merge [i] = true; temp_merge [j] = true; merge_count ++; } } } //...そしてそれらを組み合わせる..。 for(i = 0; i <merge_count; i ++) {{ int target = merge1 [i]; int source = merge2 [i]; temp_hi [target] = MathMax(temp_hi [target]、temp_hi [source]); temp_lo [target] = MathMin(temp_lo [target]、temp_lo [source]); temp_hits[ターゲット]+=temp_hits[ソース]; temp_start [target] = MathMax(temp_start [target]、temp_start [source]); temp_strength [target] = MathMax(temp_strength [target]、temp_strength [source]); if(temp_hits [target]> 3) temp_strength [target] = ZONE_PROVEN; if(temp_hits [target] == 0 && temp_turn [target] == false) {{ temp_hits [target] = 1; if(temp_strength [target] <ZONE_VERIFIED) temp_strength [target] = ZONE_VERIFIED; } if(temp_turn [target] == false || temp_turn [source] == false) temp_turn [target] = false; if(temp_turn [target] == true) temp_hits [target] = 0; temp_hits[ソース]=-1; } } } //リストの残りを公式ゾーンにコピーしますzone_count = 0; for(i = 0; i <temp_count; i ++) {{ if(temp_hits [i]> = 0 && zone_count <1000) {{ zone_hi [zone_count] = temp_hi [i]; zone_lo [zone_count] = temp_lo [i]; zone_hits [zone_count] = temp_hits [i]; zone_turn [zone_count] = temp_turn [i]; zone_start [zone_count] = temp_start [i]; zone_strength [zone_count] = temp_strength [i]; if(zone_hi [zone_count] <Close [4]) zone_type [zone_count] = ZONE_SUPPORT; else if(zone_lo [zone_count]> Close [4]) zone_type [zone_count] = ZONE_RESIST;そうしないと{{ for(j = 5; j <1000; j ++) {{ if(iClose(NULL、TimeFrame、j)<zone_lo [zone_count]) {{ zone_type [zone_count] = ZONE_RESIST;壊す; } else if(iClose(NULL、TimeFrame、j)> zone_hi [zone_count]) {{ zone_type [zone_count] = ZONE_SUPPORT;壊す; } } if(j == 1000) zone_type [zone_count] = ZONE_SUPPORT; } zone_count ++; } } } void DrawZones() {{ if(SetGlobals == true) {{ GlobalVariableSet( "SSSR_Count _" + Symbol()+ TimeFrame、zone_count); GlobalVariableSet( "SSSR_Updated _" + Symbol()+ TimeFrame、TimeCurrent()); } for(int i = 0; i <zone_count; i ++) {{ if(zone_strength [i] == ZONE_WEAK && zone_show_weak == false)継続する; string s = "SSSR#" + i + "Strength ="; if(zone_strength [i] == ZONE_PROVEN) s = s + "実証済み、テストカウント=" + zone_hits [i]; else if(zone_strength [i] == ZONE_VERIFIED) s = s + "検証済み、テストカウント=" + zone_hits [i]; else if(zone_strength [i] == ZONE_UNTESTED) s = s+"未テスト"; else if(zone_strength [i] == ZONE_TURNCOAT) s = s+"ターンコート";そうしないとs = s+"弱い"; ObjectCreate(s、 OBJ_RECTANGLE 、0、0、0、0、0); ObjectSet(s、OBJPROP_TIME1、iTime(NULL、TimeFrame、zone_start [i])); ObjectSet(s、OBJPROP_TIME2、TimeCurrent()); ObjectSet(s、OBJPROP_PRICE1、zone_hi [i]); ObjectSet(s、OBJPROP_PRICE2、zone_lo [i]); ObjectSet(s、OBJPROP_BACK、zone_solid); ObjectSet(s、OBJPROP_WIDTH、zone_linewidth); ObjectSet(s、OBJPROP_STYLE、zone_style); if(zone_type [i] == ZONE_SUPPORT) {{ //サポートゾーンif(zone_strength [i] == ZONE_TURNCOAT) ObjectSet(s、OBJPROP_COLOR、color_support_turncoat); else if(zone_strength [i] == ZONE_PROVEN) ObjectSet(s、OBJPROP_COLOR、color_support_proven); else if(zone_strength [i] == ZONE_VERIFIED) ObjectSet(s、OBJPROP_COLOR、color_support_verified); else if(zone_strength [i] == ZONE_UNTESTED) ObjectSet(s、OBJPROP_COLOR、color_support_untested);そうしないとObjectSet(s、OBJPROP_COLOR、color_support_weak); }そうしないと{{ //抵抗ゾーンif(zone_strength [i] == ZONE_TURNCOAT) ObjectSet(s、OBJPROP_COLOR、color_resist_turncoat); else if(zone_strength [i] == ZONE_PROVEN) ObjectSet(s、OBJPROP_COLOR、color_resist_proven); else if(zone_strength [i] == ZONE_VERIFIED) ObjectSet(s、OBJPROP_COLOR、color_resist_verified); else if(zone_strength [i] == ZONE_UNTESTED) ObjectSet(s、OBJPROP_COLOR、color_resist_untested);そうしないとObjectSet(s、OBJPROP_COLOR、color_resist_weak); } if(SetGlobals == true) {{ GlobalVariableSet( "SSSR_HI _" + Symbol()+ TimeFrame + i、zone_hi [i]); GlobalVariableSet( "SSSR_LO _" + Symbol()+ TimeFrame + i、zone_lo [i]); GlobalVariableSet( "SSSR_HITS _" + Symbol()+ TimeFrame + i、zone_hits [i]); GlobalVariableSet( "SSSR_STRENGTH _" + Symbol()+ TimeFrame + i、zone_strength [i]); GlobalVariableSet( "SSSR_AGE _" + Symbol()+ TimeFrame + i、zone_start [i]); } } } boolフラクタル(int M、int P、intシフト) {{ if(TimeFrame> P) P=時間枠; P = P / TimeFrame * 2 + MathCeil(P / TimeFrame / 2); if(shift <p) return(false); if(shift> iBars(Symbol()、TimeFrame)-P) return(false); for(int i = 1; i <= P; i ++) {{ if(M == UP_POINT) {{ if(iHigh(NULL、TimeFrame、shift + i)> iHigh(NULL、TimeFrame、shift)) return(false); if(iHigh(NULL、TimeFrame、shift-i)> = iHigh(NULL、TimeFrame、shift)) return(false); } if(M == DN_POINT) {{ if(iLow(NULL、TimeFrame、shift + i)<iLow(NULL、TimeFrame、shift)) return(false); if(iLow(NULL、TimeFrame、shift-i)<= iLow(NULL、TimeFrame、shift)) return(false); } } return(true); } void FastFractals() {{ int-shift; int limit = MathMin(Bars-1、BackLimit); int P = TimeFrame * fractal_fast_factor; FastUpPts [0] = 0.0; FastUpPts [1] = 0.0; FastDnPts [0] = 0.0; FastDnPts [1] = 0.0; for(shift = limit; shift> 1; shift--) {{ if(Fractal(UP_POINT、P、shift)== true) FastUpPts [shift] = iHigh(NULL、TimeFrame、shift);そうしないとFastUpPts [shift] = 0.0; if(Fractal(DN_POINT、P、shift)== true) FastDnPts [shift] = iLow(NULL、TimeFrame、shift);そうしないとFastDnPts [shift] = 0.0; } } void SlowFractals() {{ int-shift; int limit = MathMin(iBars(Symbol()、TimeFrame)-1、BackLimit); int P = TimeFrame * fractal_slow_factor; SlowUpPts [0] = 0.0; SlowUpPts [1] = 0.0; SlowDnPts [0] = 0.0; SlowDnPts [1] = 0.0; for(shift = limit; shift> 1; shift--) {{ if(Fractal(UP_POINT、P、shift)== true) SlowUpPts [shift] = iHigh(NULL、TimeFrame、shift);そうしないとSlowUpPts [shift] = 0.0; if(Fractal(DN_POINT、P、shift)== true) SlowDnPts [shift] = iLow(NULL、TimeFrame、shift);そうしないとSlowDnPts [shift] = 0.0; } } bool NewBar() {{ static datetime LastTime = 0; if(iTime(NULL、TimeFrame、0)!= LastTime) {{ LastTime = iTime(NULL、TimeFrame、0)+ time_offset; return(true); }そうしないとreturn(false); } void DeleteZones() {{ intlen = 5; int i; while(i <ObjectsTotal()) {{文字列objName=ObjectName(i); if(StringSubstr(objName、0、len)!= "SSSR#") {{ i ++;継続する; } ObjectDelete(objName); } } string TimeFrameToString(int tf)//TROからのコード{{文字列tfs; switch(tf) {{ケースPERIOD_M1: tfs = "M1";壊す;ケースPERIOD_M5: tfs = "M5";壊す;ケースPERIOD_M15: tfs = "M15";壊す;ケースPERIOD_M30: tfs = "M30";壊す;ケースPERIOD_H1: tfs = "H1";壊す;ケースPERIOD_H4: tfs = "H4";壊す;ケースPERIOD_D1: tfs = "D1";壊す;ケースPERIOD_W1: tfs = "W1";壊す;ケースPERIOD_MN1: tfs = "MN"; } return(tfs); } string StringRepeat(string str、int n = 1) {{ string outstr = ""; for(int i = 0; i <n; i ++)outstr = outstr + str; return(outstr); } string StringRightPad(string str、int n = 1、string str2 = "") {{ return(str + StringRepeat(str2、n-StringLen(str))); マルチタイムフレーム・インディケーター コーディングのヘルプ コーディングの方法は? kopeyka2 2019.01.20 18:50 #7442 MT5への乗り換え。一言お願いします。MT5ではどのようにコードで書かれているのですか、何が間違っているのですか? //+------------------------------------------------------------------+ //| 123.mq5 | //| Copyright 2019, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2018, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 1 //+----------------------------------------------+ //| Параметры отрисовки индикатора 1 | //+----------------------------------------------+ #property indicator_type1 DRAW_ARROW #property indicator_color1 Blue #property indicator_style1 STYLE_DASHDOTDOT #property indicator_width1 0 #property indicator_label1 "Label 1" //---- input int MAPeriod=13; //---= int handle_ma; double ExtLineBuffer[]; double BufferPrice[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { SetIndexBuffer(0,ExtLineBuffer,INDICATOR_DATA); SetIndexBuffer(3,BufferPrice,INDICATOR_CALCULATIONS); //---- символы для индикатора PlotIndexSetInteger(0,PLOT_ARROW,108); //---- создание метки для отображения в DataWindow PlotIndexSetString(0,PLOT_LABEL,"PROBA"); //---- IndicatorSetInteger(INDICATOR_DIGITS,_Digits); IndicatorSetString(INDICATOR_SHORTNAME," 123"); //---- массива будет производиться как в таймсериях ArraySetAsSeries(ExtLineBuffer,true); ArraySetAsSeries(BufferPrice,true); //--- create MA's handles ResetLastError(); handle_ma=iMA(NULL,Period(),MAPeriod,0,MODE_SMA,PRICE_CLOSE); if(handle_ma==INVALID_HANDLE) { Print("The iMA (1) object was not created: Error ",GetLastError()); return INIT_FAILED; } //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { Comment(""); } //+------------------------------------------------------------------+ //| 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[]) { //--- //--- Проверка количества доступных баров if(rates_total<4) return 0; //--- Проверка и расчёт количества просчитываемых баров int limit=rates_total-prev_calculated; if(limit>1) { limit=rates_total-1; ArrayInitialize(ExtLineBuffer,EMPTY_VALUE); ArrayInitialize(BufferPrice,0); } //--- Подготовка данных int count=(limit>1 ? rates_total : 2),copied=0; copied=CopyBuffer(handle_ma,0,0,count,BufferPrice); if(copied!=count) return 0; //---- for(int i=limit; i>0 && !IsStopped(); i--) { //----------------------------------------- ОСНОВНОЙ МОДУЛЬ КОТОРЫЙ НЕ РАБОТАЕТ ---------------------------- if(PERIOD_H1==Period()) { //--- High signal if(BufferPrice[i]>open[i] && BufferPrice[i]<close[i]) ExtLineBuffer[i]=high[i]; //--- Low signal if(BufferPrice[i]<open[i] && BufferPrice[i]>close[i]) ExtLineBuffer[i]=low[i]; } /* else { ExtLineBuffer[i]=0.0; ExtLineBuffer[i]=0.0; } */ } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ 質問:なぜ、バッファにいろいろなゴミが落ちているのですか? 今はレゴコンストラクター、つまりモジュールをコピーしてMT5の特性を体感的に理解しようとする段階です。コースのドキュメント Taras Slobodyanik 2019.01.20 18:54 #7443 kopeyka2:MT5への乗り換え。一言お願いします。MT5ではどのようにコードで書かれているのですか、何が間違っているのですか?QUESTION: なぜ、いろいろなゴミがバッファに落ちているのでしょうか?mt5 の時系列は逆になっています もし mt4 と同じ方法で必要なら、ArraySetAsSeries を使用します。 Artyom Trishkin 2019.01.20 21:25 #7444 kopeyka2:MT5への乗り換え。一言お願いします。MT5ではどのようにコードで書かれているのですか、何が間違っているのですか? 質問:なぜ、バッファにいろいろなゴミが落ちているのですか? 今はレゴコンストラクターの段階、つまりモジュールをコピーしてMT%のクセを体感的に理解している段階です。コースのドキュメント//+------------------------------------------------------------------+ //| 123.mq5 | //| Copyright 2019, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2018, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 1 //+----------------------------------------------+ //| Параметры отрисовки индикатора 1 | //+----------------------------------------------+ #property indicator_type1 DRAW_ARROW #property indicator_color1 clrBlue #property indicator_width1 1 #property indicator_label1 "Label 1" //---- input int MAPeriod=13; //---= int handle_ma; double ExtLineBuffer[]; double BufferPrice[]; //--- int period; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- period=(MAPeriod<1 ? 1 : MAPeriod); //--- SetIndexBuffer(0,ExtLineBuffer,INDICATOR_DATA); SetIndexBuffer(1,BufferPrice,INDICATOR_CALCULATIONS); //---- символы для индикатора PlotIndexSetInteger(0,PLOT_ARROW,108); //---- создание метки для отображения в DataWindow PlotIndexSetString(0,PLOT_LABEL,"PROBA"); //---- IndicatorSetInteger(INDICATOR_DIGITS,_Digits); IndicatorSetString(INDICATOR_SHORTNAME," 123"); //---- массива будет производиться как в таймсериях ArraySetAsSeries(ExtLineBuffer,true); ArraySetAsSeries(BufferPrice,true); //--- create MA's handles ResetLastError(); handle_ma=iMA(NULL,PERIOD_CURRENT,period,0,MODE_SMA,PRICE_CLOSE); if(handle_ma==INVALID_HANDLE) { Print("The iMA (",(string)period,") object was not created: Error ",GetLastError()); return INIT_FAILED; } //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { Comment(""); } //+------------------------------------------------------------------+ //| 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[]) { //--- ArraySetAsSeries(high,true); ArraySetAsSeries(low,true); //--- Проверка количества доступных баров if(rates_total<4) return 0; //--- Проверка и расчёт количества просчитываемых баров int limit=rates_total-prev_calculated; if(limit>1) { limit=rates_total-1; ArrayInitialize(ExtLineBuffer,EMPTY_VALUE); ArrayInitialize(BufferPrice,0); } //--- Подготовка данных int count=(limit>1 ? rates_total : 2),copied=0; copied=CopyBuffer(handle_ma,0,0,count,BufferPrice); if(copied!=count) return 0; //---- for(int i=limit; i>=0 && !IsStopped(); i--) { //----------------------------------------- ОСНОВНОЙ МОДУЛЬ КОТОРЫЙ НЕ РАБОТАЕТ ---------------------------- if(Period()==PERIOD_H1) { //--- High signal if(BufferPrice[i]>open[i] && BufferPrice[i]<close[i]) ExtLineBuffer[i]=high[i]; //--- Low signal if(BufferPrice[i]<open[i] && BufferPrice[i]>close[i]) ExtLineBuffer[i]=low[i]; } /* else { ExtLineBuffer[i]=0.0; ExtLineBuffer[i]=0.0; } */ } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ kopeyka2 2019.01.21 08:48 #7445 Artyom Trishkin: 返信ありがとうございました。 MT5で確認したところ...なんということでしょう・・・。ポイントがチャートのあちこちに妙に散らばっている、どこか歴史の深いところにあるような...。私は何を、なぜMT5が好きではないのか理解できないのですか?問題は簡単です!!! MT4で取る . MT5でもそうです。もちろん1つのバッファーで。ただ、問題は、インジケータがポイントをキャッチしているのに、あれもダメ、これもダメということです・・・(( また教えてください。MT5のコードに何か間違いがあったのでしょうか? MT5で何か出た。しかし、バッファー ...なぞなぞ Alexey Viktorov 2019.01.21 10:04 #7446 kopeyka2:返信ありがとうございました。 MT5で確認したところ...なんということでしょう・・・。ポイントがチャートのあちこちに妙に散らばっている、どこか歴史の深いところにあるような...。私は何を、なぜMT5が好きではないのか理解できないのですか?問題は簡単です!!! MT4で取る . というように、mt5では .もちろん1つのバッファーで。ただ、問題は、インジケータがポイントをキャッチしているのに、あれもダメ、これもダメということです・・・(( またよろしくお願いします。MT5のコードに何か間違いがあったのでしょうか? MT5で何か出た。しかし、バッファー ...なぞなぞ謎はない。mql4とはナンバリングが異なり、インジケータ・バッファは 自動的にゼロになりません。ゴミ」を片付けるために、プログラマはインデックスに値が含まれないように、インデックスの清浄度に気をつけなければなりません。 kopeyka2 2019.01.21 15:49 #7447 Alexey Viktorov:謎はない。mql4とはナンバリングが異なり、インジケータ・バッファは 自動的にゼロになりません。ゴミ」を片付けるために、プログラマはインデックスに値が含まれないようにするために、インデックスの純度に気をつけなければなりません。問題は、なぜマーク(点)がどこに置かれているのか、ということです。コードでアルゴリズムを定義しました!!!!ローソク足本体のMA条件。これだけでは不十分なのでしょうか? Alexey Viktorov 2019.01.21 16:25 #7448 kopeyka2:問題は、なぜマーク(点)がどこに置かれているのか、ということです。コードでアルゴリズムを定義しました!!!!ローソク足本体のMA条件。これだけでは不十分なのでしょうか?ほら、見てください。 kopeyka2 さん MT5への乗り換え。 一言、助けてください。 アルテムは、ヘルプという言葉ではなく、完全なコードを示しました。アプローチの仕方は人それぞれ。出来合いのコードは渡さないようにしているのですが、それでも時々失敗してしまいます。 kopeyka2 さん返信ありがとうございました。 MT5で確認したところ...ちょっとごちゃごちゃしてますね...。 しかし、比較のためのグラフは全く別の時間帯のものです。ドットの正誤はどう判断すればいいのか? それゆえ、一言で言えば「助かる」のです。 トレーディング、自動売買システム、ストラテジーテストに関するフォーラム MQL4初心者の質問、ヘルプ、アルゴリズムやコードに関するディスカッションなど何でもOK アレクセイ・ビクトロフ 2019.01.21 11:04 謎はない。mql4とはナンバリングが異なり、インジケータバッファは 自動でゼロになるわけではありません。ゴミ」を片付けるために、もしインデックスに値が含まれないとしたら、プログラマー自身がインデックスのクリーンさに気を配る必要があります。 ヘルプ: MT5では、OnInitとOnDeinitの実行順序が不適切なため、問題が発生する可能性があります。しかし、それは一部の特殊なケースであり、指標の再計算は常に連続して行われる必要があります。prev_calculated == 0 の場合,すべてのバーで再計算し,ループの各繰り返しにおいて,バッファに値がない場合,配列のこのインデックスを PLOT_EMPTY_VALUE の設定に従って EMPTY_VALUE または 0 で埋めます. kopeyka2 2019.01.21 17:59 #7449 Alexey Viktorov:ここでは、その様子をご紹介します。 アルティオムは、言葉の助けの代わりに、完全な暗号を与えた。アプローチの仕方は人それぞれです。既成のコードは与えないようにしていますが、それでも失敗することがあります。 しかし、比較のためのグラフは全く別の時間帯のものです。その指摘が正しいか間違っているかは、どのように判断すればよいのでしょうか。 それゆえ、一言で言えば「助かる」のです。 MT5では、OnInitとOnDeinitの実行順序が不適切であったため、問題が発生する可能性があります。しかし、それは特殊なケースであり、指標の再計算は常に連続して行われる必要があります。prev_calculated == 0 の場合,すべてのバーで再計算し,ループの各繰り返しにおいて,バッファに値がない場合,配列のこのインデックスを PLOT_EMPTY_VALUE の設定に従って EMPTY_VALUE または 0 で埋めます.ハレルヤ!! open[i]とclose[i]をiOpen(NULL,PERIOD_H1,i)に変更しました。 Artyom Trishkin 2019.01.21 18:16 #7450 kopeyka2:ハレルヤ!! open[i]とclose[i]をiOpen(NULL,PERIOD_H1,i)に変更しました。 何が違うの?インジケータがH1、アクセス速度のみ点灯している場合 - 低速のものがあります。私の例では、配列のopenとcloseをシリアルインデックスに設定する必要があることを、おそらく見逃していたでしょう。あなたが持っていないものを強調しました。最初から最後まで、つまり限界から0までのループがあり、配列のインデックスを 付けなかったため、前後逆に描画されてしまったのですね。 1...738739740741742743744745746747748749750751752...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
テストされていないインジケーターと残りのすべての反転レベルバンドを非表示にし、テスト済みのバンドのみを残すことは可能ですか?つまり、 extern bool zone_show_weak=true;を非表示にします。以下のコードでは、(zone_strength [i] == ZONE_WEAK && zone_show_weak == false)などを非表示にできません。たぶん誰かがコードを理解して修正するか、私が上で説明したレベルを削除します。インジケーターコード:
#propertycopyright"Copyright©2017AndrewSumner"
#property link ""
#プロパティindicator_chart_window
#property Indicator_buffers 4
#propertyindicator_color1赤
#propertyindicator_color2赤
#プロパティindicator_color3 DodgerBlue
#プロパティindicator_color4 DodgerBlue
extern int BackLimit = 300; //バックバック
extern int TimeFrame = 0;
extern string TimeString = "0 =現在、60 = H1、240 = H4、1440 =日、10080 =週、43200=月";
extern color color_support_weak = MediumAquamarine; //サポート-弱いDarkSlateGrayのサポート
extern color color_support_untested = SeaGreen; //チェックを外します
extern colorcolor_support_verified=緑;
extern color color_support_proven = LimeGreen;
extern colorcolor_support_turncoat=オリーブドラブ;
extern colorcolor_resist_weak=シエナ;
extern colorcolor_resist_untested=オーキッド;
extern colorcolor_resist_verified=クリムゾン;
extern colorcolor_resist_proven=赤;
extern color color_resist_turncoat = DarkOrange;
extern bool zone_show_weak = true;
extern double zone_fuzzfactor = 0.2;
extern bool zone_solid = false; // falseの場合はtrue、フルストライプゾーンはありませんが、幅幅の長方形で囲まれます
extern int zone_linewidth = 2;
extern int zone_style = 0;
extern bool zone_show_info = true;
extern int zone_label_shift = 22; //ラベルの水平オフセット。ただし、インジケーターを削除した後のみ
extern bool zone_show_alerts = false;
extern bool zone_alert_popups = true;
extern bool zone_alert_sounds = true;
extern bool send_email = false;
extern int zone_alert_waitseconds = 300;
extern bool zone_merge = true;
extern bool zone_extend = true;
extern bool fractals_show = false;
extern double fractal_fast_factor = 3.0;
extern double fractal_slow_factor = 6.0;
extern bool SetGlobals = true;
double FastDnPts []、FastUpPts [];
double SlowDnPts []、SlowUpPts [];
double zone_hi [1000]、zone_lo [1000];
int zone_start [1000]、zone_hits [1000]、zone_type [1000]、zone_strength [1000]、zone_count = 0;
boolzone_turn [1000];
#define ZONE_SUPPORT 1
#define ZONE_RESIST 2
#define ZONE_WEAK 0
#define ZONE_TURNCOAT 1
#define ZONE_UNTESTED 2
#define ZONE_VERIFIED 3
#define ZONE_PROVEN 4
#define UP_POINT 1
#define DN_POINT -1
int time_offset = 0;
int init()
{{
IndicatorBuffers(4);
SetIndexBuffer(0、SlowDnPts);
SetIndexBuffer(1、SlowUpPts);
SetIndexBuffer(2、FastDnPts);
SetIndexBuffer(3、FastUpPts);
if(fractals_show == true)
{{
SetIndexStyle(0、DRAW_ARROW、0、3);
SetIndexStyle(1、DRAW_ARROW、0、3);
SetIndexStyle(2、DRAW_ARROW、0、1);
SetIndexStyle(3、DRAW_ARROW、0、1);
SetIndexArrow(0、218);
SetIndexArrow(1、217);
SetIndexArrow(2、218);
SetIndexArrow(3、217);
}
そうしないと
{{
SetIndexStyle(0、DRAW_NONE);
SetIndexStyle(1、DRAW_NONE);
SetIndexStyle(2、DRAW_NONE);
SetIndexStyle(3、DRAW_NONE);
}
if(TimeFrame!= 1 && TimeFrame!= 5 && TimeFrame!= 15 &&
TimeFrame!= 60 && TimeFrame!= 240 && TimeFrame!= 1440 &&
TimeFrame!= 10080 && TimeFrame!= 43200)
時間枠=0;
if(TimeFrame <Period())
時間枠=期間();
return(0);
}
int deinit()
{{
DeleteZones();
DeleteGlobalVars();
return(0);
}
int start()
{{
if(NewBar()== true)
{{
int old_zone_count = zone_count;
高速フラクタル();
SlowFractals();
DeleteZones();
FindZones();
DrawZones();
if(zone_count <old_zone_count)
DeleteOldGlobalVars(old_zone_count);
}
if(zone_show_info == true)
{{
for(int i = 0; i <zone_count; i ++)
{{
文字列lbl;
if(zone_strength [i] == ZONE_PROVEN)
lbl = ""; //実証済み
else if(zone_strength [i] == ZONE_VERIFIED)
lbl = ""; //チェック済み
else if(zone_strength [i] == ZONE_UNTESTED)
lbl = ""; //テストしない
else if(zone_strength [i] == ZONE_TURNCOAT)
lbl = ""; //逆転
そうしないと
lbl = ""; // 弱い
if(zone_type [i] == ZONE_SUPPORT)
lbl = lbl + "under"; //サポート
そうしないと
lbl = lbl + "sop"; //抵抗
if(zone_hits [i]> 0 && zone_strength [i]> ZONE_UNTESTED)
{{
if(zone_hits [i] == 1)
lbl = lbl + "、T =" + zone_hits [i]; //テストカウント
そうしないと
lbl = lbl + "、T =" + zone_hits [i]; //テストカウント
}
int Adjust_hpos;
int wbpc = WindowBarsPerChart();
int k;
k = Period()* 60 +(20 + StringLen(lbl));
if(wbpc <80)
Adjust_hpos = Time [0] + k * 4;
else if(wbpc <125)
Adjust_hpos = Time [0] + k * 8;
それ以外の場合(wbpc <250)
Adjust_hpos = Time [0] + k * 15;
else if(wbpc <480)
Adjust_hpos = Time [0] + k * 29;
else if(wbpc <950)
Adjust_hpos = Time [0] + k * 58;
そうしないと
Adjust_hpos = Time [0] + k * 115;
int shift = k * zone_label_shift;
double vpos = zone_hi [i]-(zone_hi [i] --zone_lo [i])/ 2;
//レベルの説明のテキスト
文字列s="SSSR#" + i + "LBL";
ObjectCreate(s、OBJ_TEXT、0、0、0);
ObjectSet(s、OBJPROP_TIME1、adjust_hpos + shift);
ObjectSet(s、OBJPROP_PRICE1、vpos);
ObjectSetText(s、StringRightPad(lbl、36、 "")、11、 "Courier New"、clrWhite); //黒
}
}
CheckAlerts();
return(0);
}
void CheckAlerts()
{{
static int lastalert = 0;
if(zone_show_alerts == false)
戻る;
if(Time [0]-lastalert> zone_alert_waitseconds)
if(CheckEntryAlerts()== true)
lastalert = Time [0];
}
bool CheckEntryAlerts()
{{
//レコードを確認します
for(int i = 0; i <zone_count; i ++)
{{
if(Close [0]> = zone_lo [i] && Close [0] <zone_hi [i])
{{
if(zone_show_alerts == true)
{{
if(zone_alert_popups == true)
{{
if(zone_type [i] == ZONE_SUPPORT)
Alert(Symbol()+ TimeFrameToString(TimeFrame)+ ":サポートゾーンが入力されました"); //サポートゾーンを導入
そうしないと
Alert(Symbol()+ TimeFrameToString(TimeFrame)+ ":レジスタンスゾーンが入力されました"); //抵抗ゾーンを導入
}
if(zone_alert_sounds == true)
PlaySound( "alert.wav");
}
if(send_email == true)
{{
string dir = "";
string msg = StringConcatenate(Symbol()、 "-"、TimeFrameToString(TimeFrame)、 "at"、TimeToStr(Time [0]、TIME_DATE | TIME_SECONDS)、
""、dir、 "ゾーンが入力されました");
if(zone_type [i] == ZONE_SUPPORT)
{{
dir="サポート";
SendMail( "SS_SupRes_v04c alert"、msg);
}
そうしないと
{{
dir="抵抗";
SendMail( "SS_SupRes_v04c alert"、msg);
}
}
return(true);
}
}
return(false);
}
void DeleteGlobalVars()
{{
if(SetGlobals == false)
戻る;
GlobalVariableDel( "SSSR_Count _" + Symbol()+ TimeFrame);
GlobalVariableDel( "SSSR_Updated _" + Symbol()+ TimeFrame);
int old_count = zone_count;
zone_count = 0;
DeleteOldGlobalVars(old_count);
}
void DeleteOldGlobalVars(int old_count)
{{
if(SetGlobals == false)
戻る;
for(int i = zone_count; i <old_count; i ++)
{{
GlobalVariableDel( "SSSR_HI _" + Symbol()+ TimeFrame + i);
GlobalVariableDel( "SSSR_LO _" + Symbol()+ TimeFrame + i);
GlobalVariableDel( "SSSR_HITS _" + Symbol()+ TimeFrame + i);
GlobalVariableDel( "SSSR_STRENGTH _" + Symbol()+ TimeFrame + i);
GlobalVariableDel( "SSSR_AGE _" + Symbol()+ TimeFrame + i);
}
}
void FindZones()
{{
int i、j、shift、bustcount = 0、testcount = 0;
ダブルハイバル、ローバル;
bool turn = false、hasturned = false;
double temp_hi [1000]、temp_lo [1000];
int temp_start [1000]、temp_hits [1000]、temp_strength [1000]、temp_count = 0;
bool temp_turn [1000]、temp_merge [1000];
int merge1 [1000]、merge2 [1000]、merge_count = 0;
//ゾーンを最も古いものから最も小さいものへとループします(最後の5つのバーは無視します)。
//現在まで生き残った人を見つける...
for(shift = MathMin(iBars(NULL、TimeFrame)-1、BackLimit); shift> 5; shift--)
{{
double atr = iATR(NULL、TimeFrame、7、shift);
double fu = atr / 2 * zone_fuzzfactor;
bool isWeak;
bool touchOk = false;
bool isBust = false;
double close = iClose(NULL、TimeFrame、shift);
ダブルハイ=iHigh(NULL、TimeFrame、shift);
ダブルロー=iLow(NULL、TimeFrame、shift);
ダブルhi_i;
double lo_i;
if(FastUpPts [shift]> 0.001)
{{
//ハイポイントジグザグ
isWeak = true;
if(SlowUpPts [shift]> 0.001)
isWeak = false;
hival = high;
if(zone_extend == true)
hival + = fu;
loval = MathMax(MathMin(close、high-fu)、high-fu * 2);
turn = false;
hasturned = false;
isbust = false;
バスカウント=0;
testcount = 0;
for(i = shift-1; i> = 0; i--)
{{
hi_i = iHigh(NULL、TimeFrame、i);
lo_i = iLow(NULL、TimeFrame、i);
if((turned == false && FastUpPts [i]> = loval && FastUpPts [i] <= hival)||
(turned == true && FastDnPts [i] <= hival && FastDnPts [i]> = loval))
{{
//潜在的なタッチ、最後から10本以上のキャンドルであることを確認してください
touchOk = true;
for(j = i + 1; j <i + 11; j ++)
{{
if((turned == false && FastUpPts [j]> = loval && FastUpPts [j] <= hival)||
(turned == true && FastDnPts [j] <= hival && FastDnPts [j]> = loval))
{{
touchOk = false;
壊す;
}
}
if(touchOk == true)
{{
//タッチがあります。一度バストされた場合は、バストカウントを削除します
//このレベルはまだ有効であり、サイドを切り替えただけであることがわかっているため
バスカウント=0;
testcount ++;
}
}
if((turned == false && hi_i> hival)||
(turned == true && lo_i <loval))
{{
//このレベルは少なくとも1回は無効になっています
bustcount ++;
if(bustcount> 1 || isWeak == true)
{{
//2つ以上
isBust = true;
壊す;
}
if(turned == true)
turn = false;
else if(turned == false)
turn = true;
hasturned = true;
//以前のヒットを忘れる
testcount = 0;
}
}
if(isBust == false)
{{
//レベルはまだ有効です、リストに追加してください
temp_hi [temp_count] = hival;
temp_lo [temp_count] = loval;
temp_turn [temp_count] = hasturned;
temp_hits [temp_count] = testcount;
temp_start[temp_count]=シフト;
temp_merge [temp_count] = false;
if(testcount> 3)
temp_strength [temp_count] = ZONE_PROVEN;
else if(testcount> 0)
temp_strength [temp_count] = ZONE_VERIFIED;
else if(hasturned == true)
temp_strength [temp_count] = ZONE_TURNCOAT;
else if(isWeak == false)
temp_strength [temp_count] = ZONE_UNTESTED;
そうしないと
temp_strength [temp_count] = ZONE_WEAK;
temp_count ++;
}
}
else if(FastDnPts [shift]> 0.001)
{{
//低いジグザグポイント
isWeak = true;
if(SlowDnPts [shift]> 0.001)
isWeak = false;
loval=低;
if(zone_extend == true)
loval = fu;
hival = MathMin(MathMax(close、low + fu)、low + fu * 2);
turn = false;
hasturned = false;
バスカウント=0;
testcount = 0;
isbust = false;
for(i = shift-1; i> = 0; i--)
{{
hi_i = iHigh(NULL、TimeFrame、i);
lo_i = iLow(NULL、TimeFrame、i);
if((turned == true && FastUpPts [i]> = loval && FastUpPts [i] <= hival)||
(turned == false && FastDnPts [i] <= hival && FastDnPts [i]> = loval))
{{
//潜在的なタッチ、最後から10本以上のキャンドルであることを確認してください
touchOk = true;
for(j = i + 1; j <i + 11; j ++)
{{
if((turned == true && FastUpPts [j]> = loval && FastUpPts [j] <= hival)||
(turned == false && FastDnPts [j] <= hival && FastDnPts [j]> = loval))
{{
touchOk = false;
壊す;
}
}
if(touchOk == true)
{{
//タッチがあります。一度バストされた場合は、バストカウントを削除します
//このレベルはまだ有効であり、サイドを切り替えただけであることがわかっているため
バスカウント=0;
testcount ++;
}
}
if((turned == true && hi_i> hival)||
(turned == false && lo_i <loval))
{{
//このレベルは少なくとも1回は無効になっています
bustcount ++;
if(bustcount> 1 || isWeak == true)
{{
//2つ以上
isBust = true;
壊す;
}
if(turned == true)
turn = false;
else if(turned == false)
turn = true;
hasturned = true;
//以前のヒットを忘れる
testcount = 0;
}
}
if(isBust == false)
{{
//レベルはまだ有効です、リストに追加してください
temp_hi [temp_count] = hival;
temp_lo [temp_count] = loval;
temp_turn [temp_count] = hasturned;
temp_hits [temp_count] = testcount;
temp_start[temp_count]=シフト;
temp_merge [temp_count] = false;
if(testcount> 3)
temp_strength [temp_count] = ZONE_PROVEN;
else if(testcount> 0)
temp_strength [temp_count] = ZONE_VERIFIED;
else if(hasturned == true)
temp_strength [temp_count] = ZONE_TURNCOAT;
else if(isWeak == false)
temp_strength [temp_count] = ZONE_UNTESTED;
そうしないと
temp_strength [temp_count] = ZONE_WEAK;
temp_count ++;
}
}
}
//重複するゾーンを探します...
if(zone_merge == true)
{{
merge_count = 1;
int反復=0;
while(merge_count> 0&&反復<3)
{{
merge_count = 0;
反復++;
for(i = 0; i <temp_count; i ++)
temp_merge [i] = false;
for(i = 0; i <temp_count-1; i ++)
{{
if(temp_hits [i] == -1 || temp_merge [j] == true)
継続する;
for(j = i + 1; j <temp_count; j ++)
{{
if(temp_hits [j] == -1 || temp_merge [j] == true)
継続する;
if((temp_hi [i]> = temp_lo [j] && temp_hi [i] <= temp_hi [j])||
(temp_lo [i] <= temp_hi [j] && temp_lo [i]> = temp_lo [j])||
(temp_hi [j]> = temp_lo [i] && temp_hi [j] <= temp_hi [i])||
(temp_lo [j] <= temp_hi [i] && temp_lo [j]> = temp_lo [i]))
{{
merge1 [merge_count] = i;
merge2 [merge_count] = j;
temp_merge [i] = true;
temp_merge [j] = true;
merge_count ++;
}
}
}
//...そしてそれらを組み合わせる..。
for(i = 0; i <merge_count; i ++)
{{
int target = merge1 [i];
int source = merge2 [i];
temp_hi [target] = MathMax(temp_hi [target]、temp_hi [source]);
temp_lo [target] = MathMin(temp_lo [target]、temp_lo [source]);
temp_hits[ターゲット]+=temp_hits[ソース];
temp_start [target] = MathMax(temp_start [target]、temp_start [source]);
temp_strength [target] = MathMax(temp_strength [target]、temp_strength [source]);
if(temp_hits [target]> 3)
temp_strength [target] = ZONE_PROVEN;
if(temp_hits [target] == 0 && temp_turn [target] == false)
{{
temp_hits [target] = 1;
if(temp_strength [target] <ZONE_VERIFIED)
temp_strength [target] = ZONE_VERIFIED;
}
if(temp_turn [target] == false || temp_turn [source] == false)
temp_turn [target] = false;
if(temp_turn [target] == true)
temp_hits [target] = 0;
temp_hits[ソース]=-1;
}
}
}
//リストの残りを公式ゾーンにコピーします
zone_count = 0;
for(i = 0; i <temp_count; i ++)
{{
if(temp_hits [i]> = 0 && zone_count <1000)
{{
zone_hi [zone_count] = temp_hi [i];
zone_lo [zone_count] = temp_lo [i];
zone_hits [zone_count] = temp_hits [i];
zone_turn [zone_count] = temp_turn [i];
zone_start [zone_count] = temp_start [i];
zone_strength [zone_count] = temp_strength [i];
if(zone_hi [zone_count] <Close [4])
zone_type [zone_count] = ZONE_SUPPORT;
else if(zone_lo [zone_count]> Close [4])
zone_type [zone_count] = ZONE_RESIST;
そうしないと
{{
for(j = 5; j <1000; j ++)
{{
if(iClose(NULL、TimeFrame、j)<zone_lo [zone_count])
{{
zone_type [zone_count] = ZONE_RESIST;
壊す;
}
else if(iClose(NULL、TimeFrame、j)> zone_hi [zone_count])
{{
zone_type [zone_count] = ZONE_SUPPORT;
壊す;
}
}
if(j == 1000)
zone_type [zone_count] = ZONE_SUPPORT;
}
zone_count ++;
}
}
}
void DrawZones()
{{
if(SetGlobals == true)
{{
GlobalVariableSet( "SSSR_Count _" + Symbol()+ TimeFrame、zone_count);
GlobalVariableSet( "SSSR_Updated _" + Symbol()+ TimeFrame、TimeCurrent());
}
for(int i = 0; i <zone_count; i ++)
{{
if(zone_strength [i] == ZONE_WEAK && zone_show_weak == false)
継続する;
string s = "SSSR#" + i + "Strength =";
if(zone_strength [i] == ZONE_PROVEN)
s = s + "実証済み、テストカウント=" + zone_hits [i];
else if(zone_strength [i] == ZONE_VERIFIED)
s = s + "検証済み、テストカウント=" + zone_hits [i];
else if(zone_strength [i] == ZONE_UNTESTED)
s = s+"未テスト";
else if(zone_strength [i] == ZONE_TURNCOAT)
s = s+"ターンコート";
そうしないと
s = s+"弱い";
ObjectCreate(s、 OBJ_RECTANGLE 、0、0、0、0、0);
ObjectSet(s、OBJPROP_TIME1、iTime(NULL、TimeFrame、zone_start [i]));
ObjectSet(s、OBJPROP_TIME2、TimeCurrent());
ObjectSet(s、OBJPROP_PRICE1、zone_hi [i]);
ObjectSet(s、OBJPROP_PRICE2、zone_lo [i]);
ObjectSet(s、OBJPROP_BACK、zone_solid);
ObjectSet(s、OBJPROP_WIDTH、zone_linewidth);
ObjectSet(s、OBJPROP_STYLE、zone_style);
if(zone_type [i] == ZONE_SUPPORT)
{{
//サポートゾーン
if(zone_strength [i] == ZONE_TURNCOAT)
ObjectSet(s、OBJPROP_COLOR、color_support_turncoat);
else if(zone_strength [i] == ZONE_PROVEN)
ObjectSet(s、OBJPROP_COLOR、color_support_proven);
else if(zone_strength [i] == ZONE_VERIFIED)
ObjectSet(s、OBJPROP_COLOR、color_support_verified);
else if(zone_strength [i] == ZONE_UNTESTED)
ObjectSet(s、OBJPROP_COLOR、color_support_untested);
そうしないと
ObjectSet(s、OBJPROP_COLOR、color_support_weak);
}
そうしないと
{{
//抵抗ゾーン
if(zone_strength [i] == ZONE_TURNCOAT)
ObjectSet(s、OBJPROP_COLOR、color_resist_turncoat);
else if(zone_strength [i] == ZONE_PROVEN)
ObjectSet(s、OBJPROP_COLOR、color_resist_proven);
else if(zone_strength [i] == ZONE_VERIFIED)
ObjectSet(s、OBJPROP_COLOR、color_resist_verified);
else if(zone_strength [i] == ZONE_UNTESTED)
ObjectSet(s、OBJPROP_COLOR、color_resist_untested);
そうしないと
ObjectSet(s、OBJPROP_COLOR、color_resist_weak);
}
if(SetGlobals == true)
{{
GlobalVariableSet( "SSSR_HI _" + Symbol()+ TimeFrame + i、zone_hi [i]);
GlobalVariableSet( "SSSR_LO _" + Symbol()+ TimeFrame + i、zone_lo [i]);
GlobalVariableSet( "SSSR_HITS _" + Symbol()+ TimeFrame + i、zone_hits [i]);
GlobalVariableSet( "SSSR_STRENGTH _" + Symbol()+ TimeFrame + i、zone_strength [i]);
GlobalVariableSet( "SSSR_AGE _" + Symbol()+ TimeFrame + i、zone_start [i]);
}
}
}
boolフラクタル(int M、int P、intシフト)
{{
if(TimeFrame> P)
P=時間枠;
P = P / TimeFrame * 2 + MathCeil(P / TimeFrame / 2);
if(shift <p)
return(false);
if(shift> iBars(Symbol()、TimeFrame)-P)
return(false);
for(int i = 1; i <= P; i ++)
{{
if(M == UP_POINT)
{{
if(iHigh(NULL、TimeFrame、shift + i)> iHigh(NULL、TimeFrame、shift))
return(false);
if(iHigh(NULL、TimeFrame、shift-i)> = iHigh(NULL、TimeFrame、shift))
return(false);
}
if(M == DN_POINT)
{{
if(iLow(NULL、TimeFrame、shift + i)<iLow(NULL、TimeFrame、shift))
return(false);
if(iLow(NULL、TimeFrame、shift-i)<= iLow(NULL、TimeFrame、shift))
return(false);
}
}
return(true);
}
void FastFractals()
{{
int-shift;
int limit = MathMin(Bars-1、BackLimit);
int P = TimeFrame * fractal_fast_factor;
FastUpPts [0] = 0.0; FastUpPts [1] = 0.0;
FastDnPts [0] = 0.0; FastDnPts [1] = 0.0;
for(shift = limit; shift> 1; shift--)
{{
if(Fractal(UP_POINT、P、shift)== true)
FastUpPts [shift] = iHigh(NULL、TimeFrame、shift);
そうしないと
FastUpPts [shift] = 0.0;
if(Fractal(DN_POINT、P、shift)== true)
FastDnPts [shift] = iLow(NULL、TimeFrame、shift);
そうしないと
FastDnPts [shift] = 0.0;
}
}
void SlowFractals()
{{
int-shift;
int limit = MathMin(iBars(Symbol()、TimeFrame)-1、BackLimit);
int P = TimeFrame * fractal_slow_factor;
SlowUpPts [0] = 0.0; SlowUpPts [1] = 0.0;
SlowDnPts [0] = 0.0; SlowDnPts [1] = 0.0;
for(shift = limit; shift> 1; shift--)
{{
if(Fractal(UP_POINT、P、shift)== true)
SlowUpPts [shift] = iHigh(NULL、TimeFrame、shift);
そうしないと
SlowUpPts [shift] = 0.0;
if(Fractal(DN_POINT、P、shift)== true)
SlowDnPts [shift] = iLow(NULL、TimeFrame、shift);
そうしないと
SlowDnPts [shift] = 0.0;
}
}
bool NewBar()
{{
static datetime LastTime = 0;
if(iTime(NULL、TimeFrame、0)!= LastTime)
{{
LastTime = iTime(NULL、TimeFrame、0)+ time_offset;
return(true);
}
そうしないと
return(false);
}
void DeleteZones()
{{
intlen = 5;
int i;
while(i <ObjectsTotal())
{{
文字列objName=ObjectName(i);
if(StringSubstr(objName、0、len)!= "SSSR#")
{{
i ++;
継続する;
}
ObjectDelete(objName);
}
}
string TimeFrameToString(int tf)//TROからのコード
{{
文字列tfs;
switch(tf)
{{
ケースPERIOD_M1:
tfs = "M1";
壊す;
ケースPERIOD_M5:
tfs = "M5";
壊す;
ケースPERIOD_M15:
tfs = "M15";
壊す;
ケースPERIOD_M30:
tfs = "M30";
壊す;
ケースPERIOD_H1:
tfs = "H1";
壊す;
ケースPERIOD_H4:
tfs = "H4";
壊す;
ケースPERIOD_D1:
tfs = "D1";
壊す;
ケースPERIOD_W1:
tfs = "W1";
壊す;
ケースPERIOD_MN1:
tfs = "MN";
}
return(tfs);
}
string StringRepeat(string str、int n = 1)
{{
string outstr = "";
for(int i = 0; i <n; i ++)outstr = outstr + str;
return(outstr);
}
string StringRightPad(string str、int n = 1、string str2 = "")
{{
return(str + StringRepeat(str2、n-StringLen(str)));
MT5への乗り換え。一言お願いします。MT5ではどのようにコードで書かれているのですか、何が間違っているのですか?
質問:なぜ、バッファにいろいろなゴミが落ちているのですか?
今はレゴコンストラクター、つまりモジュールをコピーしてMT5の特性を体感的に理解しようとする段階です。コースのドキュメント
MT5への乗り換え。一言お願いします。MT5ではどのようにコードで書かれているのですか、何が間違っているのですか?
QUESTION: なぜ、いろいろなゴミがバッファに落ちているのでしょうか?
mt5 の時系列は逆になっています
もし mt4 と同じ方法で必要なら、ArraySetAsSeries を使用します。
MT5への乗り換え。一言お願いします。MT5ではどのようにコードで書かれているのですか、何が間違っているのですか?
質問:なぜ、バッファにいろいろなゴミが落ちているのですか?
今はレゴコンストラクターの段階、つまりモジュールをコピーしてMT%のクセを体感的に理解している段階です。コースのドキュメント
返信ありがとうございました。
MT5で確認したところ...なんということでしょう・・・。ポイントがチャートのあちこちに妙に散らばっている、どこか歴史の深いところにあるような...。私は何を、なぜMT5が好きではないのか理解できないのですか?問題は簡単です!!!
MT4で取る
.
MT5でもそうです。もちろん1つのバッファーで。ただ、問題は、インジケータがポイントをキャッチしているのに、あれもダメ、これもダメということです・・・((
また教えてください。MT5のコードに何か間違いがあったのでしょうか?
MT5で何か出た。しかし、バッファー ...なぞなぞ
返信ありがとうございました。
MT5で確認したところ...なんということでしょう・・・。ポイントがチャートのあちこちに妙に散らばっている、どこか歴史の深いところにあるような...。私は何を、なぜMT5が好きではないのか理解できないのですか?問題は簡単です!!!
MT4で取る
.
というように、mt5では .もちろん1つのバッファーで。ただ、問題は、インジケータがポイントをキャッチしているのに、あれもダメ、これもダメということです・・・((
またよろしくお願いします。MT5のコードに何か間違いがあったのでしょうか?
MT5で何か出た。しかし、バッファー ...なぞなぞ
謎はない。mql4とはナンバリングが異なり、インジケータ・バッファは 自動的にゼロになりません。ゴミ」を片付けるために、プログラマはインデックスに値が含まれないように、インデックスの清浄度に気をつけなければなりません。
謎はない。mql4とはナンバリングが異なり、インジケータ・バッファは 自動的にゼロになりません。ゴミ」を片付けるために、プログラマはインデックスに値が含まれないようにするために、インデックスの純度に気をつけなければなりません。
問題は、なぜマーク(点)がどこに置かれているのか、ということです。コードでアルゴリズムを定義しました!!!!ローソク足本体のMA条件。これだけでは不十分なのでしょうか?
問題は、なぜマーク(点)がどこに置かれているのか、ということです。コードでアルゴリズムを定義しました!!!!ローソク足本体のMA条件。これだけでは不十分なのでしょうか?
ほら、見てください。
MT5への乗り換え。 一言、助けてください。
アルテムは、ヘルプという言葉ではなく、完全なコードを示しました。アプローチの仕方は人それぞれ。出来合いのコードは渡さないようにしているのですが、それでも時々失敗してしまいます。
返信ありがとうございました。
MT5で確認したところ...ちょっとごちゃごちゃしてますね...。しかし、比較のためのグラフは全く別の時間帯のものです。ドットの正誤はどう判断すればいいのか?
それゆえ、一言で言えば「助かる」のです。
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
MQL4初心者の質問、ヘルプ、アルゴリズムやコードに関するディスカッションなど何でもOK
アレクセイ・ビクトロフ 2019.01.21 11:04
謎はない。mql4とはナンバリングが異なり、インジケータバッファは 自動でゼロになるわけではありません。ゴミ」を片付けるために、もしインデックスに値が含まれないとしたら、プログラマー自身がインデックスのクリーンさに気を配る必要があります。
ここでは、その様子をご紹介します。
アルティオムは、言葉の助けの代わりに、完全な暗号を与えた。アプローチの仕方は人それぞれです。既成のコードは与えないようにしていますが、それでも失敗することがあります。
しかし、比較のためのグラフは全く別の時間帯のものです。その指摘が正しいか間違っているかは、どのように判断すればよいのでしょうか。
それゆえ、一言で言えば「助かる」のです。
ハレルヤ!! open[i]とclose[i]をiOpen(NULL,PERIOD_H1,i)に変更しました。
ハレルヤ!! open[i]とclose[i]をiOpen(NULL,PERIOD_H1,i)に変更しました。
何が違うの?インジケータがH1、アクセス速度のみ点灯している場合 - 低速のものがあります。私の例では、配列のopenとcloseをシリアルインデックスに設定する必要があることを、おそらく見逃していたでしょう。あなたが持っていないものを強調しました。最初から最後まで、つまり限界から0までのループがあり、配列のインデックスを 付けなかったため、前後逆に描画されてしまったのですね。