新しいMT5はデフォルトでこれらの機能をサポートしているので、コードから削除すればよい。
再アップロードしました。
ありがとう。うまくいったよ!
こんにちは。
indicatorsフォルダにコピーしても、なぜかmt5ナビゲータに表示されません。
コンパイルしても表示されません。
何か解決策はありますか?
kehrman:
こんにちは
インディケータをindicatorsフォルダにコピーしても、なぜかmt5ナビゲータに表示されません。
コンパイルしても表示されません。
何か解決策はありますか?
こんにちは、
このスクリプトを修正してテストしてみました。うまくいきました。
ファイル:
mn1_w1_levels.mq5
18 kb
スクリプトをダウンロードしました。
おそらく作者がEAコードを再アップロードしなかったか、その他の理由だと思うが、27-03-2023のスクリプトは動作しない。
コンパイル後、14のエラーについてのメッセージが表示された。
私は3つのコードブロックをコメントアウトし、それについて作者は削除してもよいと書いている。
その後、コンパイル中に構文エラーが現れた(220行目の余分なカンマ)。
コンマを削除してコードをコンパイルした。
すべてのエラーが消え、スクリプトはチャート上で動作するようになった。
修正したコードは以下の通り:
//+------------------------------------------------------------------+ //|MN1_W1_Levels.mq4 //|© Tecciztecatl|テチズテカトル //+------------------------------------------------------------------+ #property copyright "© Tecciztecatl 2016" #property link "113411@bk.ru" #property version "1.00" #property description "The script shows the highs and lows of weeks and months." #property script_show_inputs #property strict input int days=200; //日数 extern string comm0=""; //- - - - - - - - - - - - - - - - - - - - - - 週 extern color W1_Color=LimeGreen; //W1 線の色 input int W1_Width=3; //W1 線幅 extern ENUM_LINE_STYLE W1_style=STYLE_SOLID; //W1 行のスタイル extern string comm1=""; //- 月数 extern color MN1_Color=Orange; //MN1 線の色 input int MN1_Width=3; //MN1 線幅 extern ENUM_LINE_STYLE MN1_style=STYLE_SOLID;//MN1 行のスタイル enum choice0 {Trend_Line=0,Horizontal_Line=1}; input choice0 object=Trend_Line; //トレンドまたは水平線 datetime ArrDate[1]; double ArrDouble[1]; MqlDateTime time; //+------------------------------------------------------------------+ //| スクリプト番組開始機能| //+------------------------------------------------------------------+ void OnStart() { DelObject(); int weeks=(int)MathCeil(days/7)+1; if(weeks>Bars(_Symbol,PERIOD_W1)) weeks=Bars(_Symbol,PERIOD_W1)-1; if(weeks<0) {Alert("No historical data!"); return;} for(int i=weeks; i>=0; i--) { datetime w1=iTime(_Symbol,PERIOD_W1,i); TimeToStruct(w1,time); if(object==Trend_Line) { SetTrendLine("W1_High_"+(string)i+"_ln", w1+86400, iHigh(_Symbol,PERIOD_W1,i), w1+7*86400, W1_Color, W1_Width, W1_style, 0x0007ffff); SetTrendLine("W1_Low_"+(string)i+"_ln", w1+86400, iLow(_Symbol,PERIOD_W1,i), w1+7*86400, W1_Color, W1_Width, W1_style, 0x0007ffff); } else { SetHLine("W1_High_"+(string)i+"_ln", iHigh(_Symbol,PERIOD_W1,i), W1_Color, W1_Width, W1_style); SetHLine("W1_Low_"+(string)i+"_ln", iLow(_Symbol,PERIOD_W1,i), W1_Color, W1_Width, W1_style); } } TimeToStruct(TimeCurrent(),time); int month=(int)MathCeil((days-time.day)/30)+1; if(month>Bars(_Symbol,PERIOD_MN1)) month=Bars(_Symbol,PERIOD_MN1)-1; if(month<0) {Alert("No historical data!"); return;} for(int i=month; i>=0; i--) { datetime mn=iTime(_Symbol,PERIOD_MN1,i); TimeToStruct(mn,time); if(object==Trend_Line) { SetTrendLine("MN1_High_"+(string)i+"_ln", mn, iHigh(_Symbol,PERIOD_MN1,i), mn+DayMonth(time.mon,mn)*86400, MN1_Color, MN1_Width, MN1_style, 0x000fffff); SetTrendLine("MN1_Low_"+(string)i+"_ln", mn, iLow(_Symbol,PERIOD_MN1,i), mn+DayMonth(time.mon,mn)*86400, MN1_Color, MN1_Width, MN1_style, 0x000fffff); } else { SetHLine("MN1_High_"+(string)i+"_ln", iHigh(_Symbol,PERIOD_MN1,i), MN1_Color, MN1_Width, MN1_style); SetHLine("MN1_Low_"+(string)i+"_ln", iLow(_Symbol,PERIOD_MN1,i), MN1_Color, MN1_Width, MN1_style); } } ChartRedraw(); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ int DayMonth(int mon,datetime ttime) { int leap_year; TimeToStruct(ttime,time); switch(mon) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return(31); case 2: leap_year=time.year; if(time.year%100==0) leap_year/=100; return((leap_year%4==0)? 29 : 28); case 4: case 6: case 9: case 11: return(30); } return(0); } //// 行の作成 void SetTrendLine( const string name, datetime time1, double price1, datetime time2, color cvet, int widthL, ENUM_LINE_STYLE styleL, int hide_TF ) { if(ObjectFind(0,name)<0) ObjectCreate(0,name,OBJ_TREND,0,time1,price1,time2,price1); ObjectMove(0,name,0,time1,price1); ObjectMove(0,name,1,time2,price1); ObjectSetInteger(0,name,OBJPROP_COLOR,cvet); ObjectSetInteger(0,name,OBJPROP_STYLE,styleL); ObjectSetInteger(0,name,OBJPROP_WIDTH,widthL); ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false); ObjectSetInteger(0,name,OBJPROP_SELECTED,false); ObjectSetInteger(0,name,OBJPROP_BACK,false); ObjectSetInteger(0,name,OBJPROP_ZORDER,1); ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false); ObjectSetInteger(0,name,OBJPROP_HIDDEN,true); ObjectSetInteger(0,name,OBJPROP_TIMEFRAMES,hide_TF); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ /* datetime iTime(string symbol,ENUM_TIMEFRAMES timeframe,int index) { if(index<0) index=0; if(CopyTime(symbol,timeframe,index,1,ArrDate)>0) return(ArrDate[0]); else return(-1); } */. //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ /* double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index) { if(index < 0) return(-1); if(CopyLow(symbol,timeframe,index,1,ArrDouble)>0) return(ArrDouble[0]); else return(-1); } */. //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ /* double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index) { if(index < 0) return(-1); if(CopyHigh(symbol,timeframe,index,1,ArrDouble)>0) return(ArrDouble[0]); else return(-1); } */. //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void SetHLine( const string name, double price1, color cvet, int widthL, ENUM_LINE_STYLE styleL ) { if(ObjectFind(0,name)<0) ObjectCreate(0,name,OBJ_HLINE,0,0,price1); ObjectSetDouble(0,name,OBJPROP_PRICE,price1); ObjectSetInteger(0,name,OBJPROP_COLOR,cvet); ObjectSetInteger(0,name,OBJPROP_STYLE,styleL); ObjectSetInteger(0,name,OBJPROP_WIDTH,widthL); ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false); ObjectSetInteger(0,name,OBJPROP_SELECTED,false); ObjectSetInteger(0,name,OBJPROP_BACK,false); ObjectSetInteger(0,name,OBJPROP_ZORDER,1); ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false); ObjectSetInteger(0,name,OBJPROP_HIDDEN,true); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void DelObject() { for(int i=ObjectsTotal(0,0,-1)-1;i>=0;i--) { string temp=ObjectName(0,i,0,-1); if(StringFind(temp,"_ln",0)>=0) ObjectDelete(0,temp); } } //+------------------------------------------------------------------+
このスクリプトは、1、中のif条件が常に真で、それ以外がない、2、配列の定義が後で反映されない、といったシステムの一部なのかもしれない。個人的には、単純に月単位で線を引く、週単位で線を引くというだけで、特に使い道は感じなかったが、スクリプトの関数呼び出し、うるう年のロジックは、やはり学ぶ価値があると思う。
取引の機会を逃しています。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
Monthly Weekly Levels:
このスクリプトは、チャートの月ごとおよび週ごとのレベルを表示します。
作者: Taras Slobodyanik