• 締切済み

フリーのMT4インジケーターのエラー修正したいが?

評判を聞いてMT4でチャートを表示させいくつかのインジケーターの取り込みに成功しています。フリーのMTF_PSAR.mq4というファイルを(c)・・・MQL4→Indicatorsにいれました。 ダブルクリック後のMetaeditorでコンパイルボタンを押すとエラー(`return`-expressions are not allowed on a global scope)が表示されます。この文をダブルクリックすると60行の位置に進入禁止マークの様な物が出てきます。このインジケーターを使えるようにするにはどこをどうすればよいのでしょうか?超初心者でも理解修正できるサイトかズバリの回答を頂ける方宜しくお願い致します。 以下がプログラム内容です。 壱行 //+------------------------------------------------------------------+ //| MTF_PSAR.mq4 | //| Copyright ゥ 2006, Keris2112 | //| | //+------------------------------------------------------------------+ #property copyright "Copyright ゥ 2006, Keris2112" #property link "http://www.forex-tsd.com" #property indicator_chart_window 拾行 #property indicator_buffers 1 #property indicator_color1 Magenta //---- input parameters /************************************************************************* PERIOD_M1 1 PERIOD_M5 5 PERIOD_M15 15 PERIOD_M30 30 PERIOD_H1 60 弐拾行 PERIOD_H4 240 PERIOD_D1 1440 PERIOD_W1 10080 PERIOD_MN1 43200 You must use the numeric value of the timeframe that you want to use when you set the TimeFrame' value with the indicator inputs. **************************************************************************/ extern int TimeFrame=0; extern double Step=0.02; extern double Maximum=0.2; 参拾行  double ExtMapBuffer1[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicator line 四拾行  SetIndexBuffer(0,ExtMapBuffer1); SetIndexStyle(0,DRAW_ARROW); SetIndexArrow(0,159); //---- name for DataWindow and indicator subwindow label switch(TimeFrame) { case 1 : string TimeFrameStr="Period_M1"; break; case 5 : TimeFrameStr="Period_M5"; break; case 15 : TimeFrameStr="Period_M15"; break; case 30 : TimeFrameStr="Period_M30"; break; 五拾行  case 60 : TimeFrameStr="Period_H1"; break; case 240 : TimeFrameStr="Period_H4"; break; case 1440 : TimeFrameStr="Period_D1"; break; case 10080 : TimeFrameStr="Period_W1"; break; case 43200 : TimeFrameStr="Period_MN1"; break; default : TimeFrameStr="Current Timeframe"; } IndicatorShortName("MTF_PSAR ("+TimeFrameStr+")"); } //---- 六拾行  return(0); //+------------------------------------------------------------------+ //| MTF Parabolic Sar | //+------------------------------------------------------------------+ int start() { datetime TimeArray[]; int i,limit,y=0,counted_bars=IndicatorCounted(); // Plot defined time frame on to current time frame ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame); limit=Bars-counted_bars; for(i=0,y=0;i<limit;i++) { if (Time[i]<TimeArray[y]) y++; /*********************************************************** Add your main indicator loop below. You can add the full indicator code or you can just reference an existing indicator with its iValue or iCustom. Rule 1: Add extern inputs above for all neccesary values Rule 2: Use 'TimeFrame' for the indicator time frame Rule 3: Use 'y' for your indicator's shift value **********************************************************/ ExtMapBuffer1[i]=iSAR(NULL,TimeFrame,Step,Maximum,y) ; } // return(0); } //+------------------------------------------------------------------+

みんなの回答

回答No.1

コンパイル済みのex4ファイルをアップロードしましたので使ってみてください。 http://up2.cache.kouploader.jp/koups8787.zip Build600以降で発生した事で書式がどのように変更されたか公式にもアナウンスが無いので みんな苦慮してます。

関連するQ&A

  • MT4 BBandWidthRatio(VT系)

    fhat6014様 この質問の前にADXのMTF化の質問をしているのですが、貴殿に以前紹介頂いた、BBandWidthRatioのVT系のインジケータもMTF化できるのでしょうか?現在、紹介頂いたサイトからインジケータが削除されているため、プログラムを記載させて頂きます。可能であれば、教えていただけないでしょうか。 #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 Purple #property indicator_color2 Blue #property indicator_color3 Red #property indicator_style2 STYLE_DOT #property indicator_style3 STYLE_DOT #property indicator_minimum 0 //---- input parameters extern int BB_Period=18; extern double Deviation=2.0; extern int Bulgeper=150; extern int Squeezeper=150; double buf1[]; //double buf2[]; //double buf3[]; //double buf4[]; double bufBulgeper[]; double bufSqueezeper[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { IndicatorDigits(MarketInfo(Symbol(), MODE_DIGITS)); SetIndexDrawBegin(0,BB_Period); SetIndexLabel(0,"BBandWidthRatio"); SetIndexBuffer(0, buf1); SetIndexDrawBegin(1,BB_Period); SetIndexLabel(1,"Bulgeper"); SetIndexBuffer(1, bufBulgeper); SetIndexDrawBegin(2,BB_Period); SetIndexLabel(2,"Squeezeper"); SetIndexBuffer(2, bufSqueezeper); return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i, j; double ave, sko, sum; int counted_bars=IndicatorCounted(); double MA, Up, Dn; if(Bars<=BB_Period) return(0); if(BB_Period==0) return(0); int limit = Bars - counted_bars; for (i=limit-1; i>=0; i--) { // buf2[i] = iMA(NULL,0,BB_Period,0,MODE_SMA,PRICE_CLOSE,i); MA = iMA(NULL,0,BB_Period,0,MODE_SMA,PRICE_CLOSE,i); sum = 0; for (j=0; j<BB_Period; j++) sum+=Close[i+j]; ave = sum / BB_Period; sum = 0; for (j=0; j<BB_Period; j++) sum+=(Close[i+j]-ave)*(Close[i+j]-ave); sko = MathSqrt(sum / BB_Period); // buf4[i] = buf2[i]+(Deviation*sko); // buf3[i] = buf2[i]-(Deviation*sko); Up = MA+(Deviation*sko); Dn = MA-(Deviation*sko); // buf1[i] = 2*(Deviation*sko)/buf2[i]; if( MA != 0 ){ buf1[i] = 2*(Deviation*sko)/MA; bufBulgeper[i] = buf1[ArrayMaximum(buf1,Bulgeper,i)]; bufSqueezeper[i] = buf1[ArrayMinimum(buf1,Squeezeper,i)]; } } return(0); }

  • MT4 MACD

    下記、MACDのプログラムですが、MACDラインとSignalラインがクロスした際、(1)-(3)の条件を満たす、プログラム変更を、どなたか、詳しい方教えてください。 (1)Alertを鳴らす (2)Soundを1度鳴らす (3)Soundを鳴らし続ける #property copyright "Copyright(C) 2005 S.B.T. All Rights Reserved." #property link "http://sufx.core.t3-ism.net/" //---- indicator settings #property indicator_separate_window #property indicator_buffers 4 #property indicator_color1 MediumSeaGreen #property indicator_color2 DarkOrange #property indicator_color3 Crimson #property indicator_color4 SteelBlue //---- indicator parameters extern int FastMA=12; extern int SlowMA=26; extern int MA_Method=1; extern int SignalMA=9; extern int SignalMA_Method=1; extern int Apply=0; extern int Timeframe=0; //---- indicator buffers double ind_buffer1[]; double ind_buffer2[]; double ind_buffer3[]; double ind_buffer4[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { string short_name1,short_name2,short_name3; //---- drawing settings SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID); SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID); SetIndexDrawBegin(1,SignalMA); IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1); //---- indicator buffers mapping if(!SetIndexBuffer(0,ind_buffer1) && !SetIndexBuffer(1,ind_buffer2) && !SetIndexBuffer(2,ind_buffer3) && !SetIndexBuffer(3,ind_buffer4)) Print("cannot set indicator buffers!"); //---- name for DataWindow and indicator subwindow label switch(MA_Method) { case 1 : short_name1="EMA("; break; case 2 : short_name1="SMMA("; break; case 3 : short_name1="LWMA("; break; default : MA_Method=0; short_name1="SMA("; } switch(SignalMA_Method) { case 1 : short_name2="EMA("; break; case 2 : short_name2="SMMA("; break; case 3 : short_name2="LWMA("; break; default : SignalMA_Method=0; short_name2="SMA("; } switch(Apply) { case 1 : short_name3="Apply to Open price"; break; case 2 : short_name3="Apply to High price"; break; case 3 : short_name3="Apply to Low price"; break; case 4 : short_name3="Apply to Median price, (high+low)/2"; break; case 5 : short_name3="Apply to Typical price, (high+low+close)/3"; break; case 6 : short_name3="Apply to Weighted close price, (high+low+close+close)/4"; break; default : Apply=0; short_name3="Apply to Close price"; } IndicatorShortName("MACD("+short_name1+FastMA+"),"+short_name1+SlowMA+"),"+short_name2+SignalMA+")) "+short_name3); SetIndexLabel(0,"Oscillator"); SetIndexLabel(1,"Oscillator"); SetIndexLabel(2,"Signal"); SetIndexLabel(3,"MACD"); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| Moving Averages Convergence/Divergence | //+------------------------------------------------------------------+ int start() { int limit; int counted_bars=IndicatorCounted(); //---- check for possible errors if(counted_bars<0) return(-1); //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //---- macd counted in the 1-st buffer for(int i=0; i<limit; i++) { ind_buffer4[i]=iMA(NULL,Timeframe,FastMA,0,MA_Method,Apply,i)-iMA(NULL,Timeframe,SlowMA,0,MA_Method,Apply,i); } //---- signal line counted in the 2-nd buffer for(i=0; i<limit; i++) { ind_buffer3[i]=iMAOnArray(ind_buffer4,Bars,SignalMA,0,SignalMA_Method,i); } //---- done //---- signal line counted in the 3-rd buffer for(i=0; i<limit; i++) { ind_buffer1[i]=ind_buffer4[i]-ind_buffer3[i]; } for(i=0; i<limit-1; i++) { if (ind_buffer1[i]<ind_buffer1[i+1]) ind_buffer2[i]=ind_buffer1[i]; else ind_buffer2[i]=0; } //---- done return(0); }

  • MT4 ストキャスティクス

    下記、MT4ストキャスティクスのプログラムなのですが、下記(1)(2)(3)の条件を満たすには、どのようにプログラムを変更したらよいのでしょうか。 詳しい方、教えてください。 (1)Alertを出すには。 (2)Soundを1度だけ鳴らすには (3)Soundを鳴らし続けるには 先日、プログラムに詳しい方からスローの方でご教授いただいたのですが、その方への連絡の取り方がわからないため、どなたかご教授ください。お願いします。 #property copyright "Copyright ゥ 2004, MetaQuotes Software Corp." #property link "http://www.metaquotes.net/" #property indicator_separate_window #property indicator_minimum 0 #property indicator_maximum 100 #property indicator_buffers 2 #property indicator_color1 Lime #property indicator_color2 Red //---- input parameters extern int KPeriod=42; extern int DPeriod=3; extern int Slowing=3; //---- buffers double MainBuffer[]; double SignalBuffer[]; double HighesBuffer[]; double LowesBuffer[]; //---- int draw_begin1=0; int draw_begin2=0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { string short_name; //---- 2 additional buffers are used for counting. IndicatorBuffers(4); SetIndexBuffer(2, HighesBuffer); SetIndexBuffer(3, LowesBuffer); //---- indicator lines SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0, MainBuffer); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1, SignalBuffer); //---- name for DataWindow and indicator subwindow label short_name="Sto("+KPeriod+","+DPeriod+","+Slowing+")"; IndicatorShortName(short_name); SetIndexLabel(0,short_name); SetIndexLabel(1,"Signal"); //---- draw_begin1=KPeriod+Slowing; draw_begin2=draw_begin1+DPeriod; SetIndexDrawBegin(0,draw_begin1); SetIndexDrawBegin(1,draw_begin2); //---- return(0); } //+------------------------------------------------------------------+ //| Stochastic oscillator | //+------------------------------------------------------------------+ int start() { int i,k; int counted_bars=IndicatorCounted(); double price; //---- if(Bars<=draw_begin2) return(0); //---- initial zero if(counted_bars<1) { for(i=1;i<=draw_begin1;i++) MainBuffer[Bars-i]=0; for(i=1;i<=draw_begin2;i++) SignalBuffer[Bars-i]=0; } //---- minimums counting i=Bars-KPeriod; if(counted_bars>KPeriod) i=Bars-counted_bars-1; while(i>=0) { double min=1000000; k=i+KPeriod-1; while(k>=i) { price=Low[k]; if(min>price) min=price; k--; } LowesBuffer[i]=min; i--; } //---- maximums counting i=Bars-KPeriod; if(counted_bars>KPeriod) i=Bars-counted_bars-1; while(i>=0) { double max=-1000000; k=i+KPeriod-1; while(k>=i) { price=High[k]; if(max<price) max=price; k--; } HighesBuffer[i]=max; i--; } //---- %K line i=Bars-draw_begin1; if(counted_bars>draw_begin1) i=Bars-counted_bars-1; while(i>=0) { double sumlow=0.0; double sumhigh=0.0; for(k=(i+Slowing-1);k>=i;k--) { sumlow+=Close[k]-LowesBuffer[k]; sumhigh+=HighesBuffer[k]-LowesBuffer[k]; } if(sumhigh==0.0) MainBuffer[i]=100.0; else MainBuffer[i]=sumlow/sumhigh*100; i--; } //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; int limit=Bars-counted_bars; //---- signal line is simple movimg average for(i=0; i<limit; i++) SignalBuffer[i]=iMAOnArray(MainBuffer,Bars,DPeriod,0,MODE_SMA,i); //---- return(0); } //+------------------------------------------------------------------+

  • MT4 MQL 自作インジの問題点がわからない…

    自作インジをiいくつか作って、そのうちいくつかに動かしているとたまにバグ?が出るモノがあるのですがどうしてそうなるのか問題点がわからないです。 MT4 MQL 上級者の方ならわかるかとおもうのですが… 理由と修正点を教えてください。 以下MQL 例 #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 DodgerBlue #property indicator_minimum 0 #property indicator_maximum 100 #property indicator_level1 30 #property indicator_level2 70 //指標バッファ double BufRSI[]; double TRDBuf[]; double haBuf[]; double haBuf2[]; //パラメーター extern int RSI_Period = 14; extern int up = 85; extern int down = 15; extern int haup = 70; extern int hadown = 30; //+------------------------------------------------------------------+ //| 初期化関数 | //+------------------------------------------------------------------+ int init() { //指標バッファの割り当て IndicatorBuffers(4); SetIndexBuffer(1,BufRSI); SetIndexBuffer(0,TRDBuf); SetIndexBuffer(2,haBuf); SetIndexBuffer(3,haBuf2); return(0); } //+------------------------------------------------------------------+ //| 指標処理関数 | //+------------------------------------------------------------------+ int start() { int limit = Bars-IndicatorCounted(); if(limit == Bars) limit -= RSI_Period-1; for(int i=limit-1; i>=0; i--) { BufRSI[i]=iRSI(NULL,0,RSI_Period,PRICE_CLOSE,i); } if(limit == Bars) limit -= RSI_Period-1; for(i=limit-1; i>=0; i--) { if (BufRSI[i+1]<haup && BufRSI[i+1]>hadown) { if(BufRSI[i]>haup) haBuf[i]=Close[i]; if(BufRSI[i]<hadown) haBuf2[i]=Close[i]; if(haBuf[i]<haBuf2[i]) int han=up; else han=down;      TRDBuf[i] = han ; } else TRDBuf[i] = down; } return(0); } これはRSI(14)が70未満から70より上になったときに haBuf[i] に終値をいれておき RSI(14)が30より上から30未満になったときに haBuf2[i] に終値をいれて haBuf[i]<haBuf2[i] だったら TRDBuf[i] を up (= 85) 違ったら down (= 15)と表示させるものです。 動かしているとたまに TRDBuf[i] が up (= 85) になるのですがプロパティーを開いて 何も変更せずにOKを押したら up (= 85) になっていたところが down (=15) になり何もなかったことになります。 (もしくは、up (= 85)がでてからまったく同じ条件のインジをいれたら新しく入れたほうは up (= 85)になっていない。) しかもこのバグ?が起こるときと起こらないときがあります。 この問題の原因がまったくわからないのですが知識のある方ご教授お願いします。

  • MT4インジケータ ADXm

    下記は、ADXmのプログラムなのですが、ADXmは、基本的に右肩上がり、右肩下がりの動きをします。右肩上がり、下がりでは、ラインの色が違うのですが、この色の変化の際(上がり、下がりの変化)の際に下記の条件を行うには、どのようにプログラムを変更すればよいのでしょうか。 どなたかMT4のプログラミングに詳しい方、ご教授ください。 (1)Alertを鳴らす (2)Soundを一度鳴らす (3)Soundを鳴らし続ける //-------ANG3110@latchess.com------- //**************************************** #property indicator_separate_window #property indicator_buffers 5 #property indicator_color1 White #property indicator_color2 DeepPink #property indicator_color3 DeepSkyBlue #property indicator_color4 Goldenrod #property indicator_color5 Goldenrod #property indicator_width2 2 #property indicator_width3 2 #property indicator_style4 0 #property indicator_style5 0 #property indicator_level1 0 //===================================== extern int p=14; extern int Level=25; //===================================== double ADX[],ADXL[],DI[],levh[],levl[]; double dh,dl,tr,H,L,num1,num2,num3,dhk,dlk,div; double zdh,zdhp,zdl,zdlp,zdx,zdxp,zdhl,si; double temp,ki; int fs,fss,ti; //********************************************************* int init() { IndicatorShortName("ADXm "+"("+p+")"); //-------------------- SetIndexBuffer(0,DI); SetIndexBuffer(1,ADX); SetIndexBuffer(2,ADXL); SetIndexEmptyValue(2,0.0); SetIndexBuffer(3,levh); SetIndexBuffer(4,levl); //-------------------- return(0); } //********************************************************* int start() { int cbi,IC=Bars-IndicatorCounted()-1; if (IC<10) cbi=IC; else { cbi=Bars-2; ki=2.0/(p+1); ADX[cbi+1]=0.0; ADXL[cbi+1]=0.0; zdhp=0.0; zdh=0.0; zdlp=0.0; zdl=0.0; zdxp=0.0; zdx=0.0; ti=Time[cbi]; fs=0; fss=0; } //------------------------------------------------- for (int i=cbi; i>=0; i--) { if (ti!=Time[i]) {zdhp=zdh; zdlp=zdl; zdxp=zdx; ti=Time[i];} H=High[i]; L=Low[i]; dh=H-High[i+1]; dl=Low[i+1]-L; if(dh<0) dh=0; if(dl<0) dl=0; if(dh==dl) {dh=0; dl=0;} else if(dh<dl) dh=0; else if(dl<dh) dl=0; num1=MathAbs(H-L); num2=MathAbs(H-Close[i+1]); num3=MathAbs(L-Close[i+1]); tr=MathMax(MathMax(num1,num2),num3); if(tr==0) {dhk=0; dlk=0;} else {dhk=100.0*dh/tr; dlk=100.0*dl/tr;} zdh=zdhp+(dhk-zdhp)*ki; zdl=zdlp+(dlk-zdlp)*ki; zdhl=zdh-zdl; DI[i]=zdhl; div=MathAbs(zdh+zdl); if(div==0.00) temp=0; else temp=100*(MathAbs(zdhl)/div); if (zdh>zdl) fs=1; if (zdh<zdl) fs=2; if (fs==2) temp=-temp; zdx=zdxp+(temp-zdxp)*ki; ADX[i]=zdx; if (ADX[i]>ADX[i+1]) fss=1; if (ADX[i]<ADX[i+1]) {if (fss==1) ADXL[i+1]=ADX[i+1]; fss=2;} if (fss==2) ADXL[i]=ADX[i]; else ADXL[i]=0.0; levh[i]=Level; levl[i]=-Level; } return(0); } //******************************************************************

  • MT4 MACD

    下記、MACDのプログラムですが、MACDラインとSignalラインがクロスした際、(1)-(3)の条件を満たす、プログラム変更を、どなたか、詳しい方教えてください。 (1)Alertを鳴らす (2)Soundを1度鳴らす (3)Soundを鳴らし続ける #property copyright "Copyright ゥ 2005, David W. Thomas" #property link "mailto:davidwt@usa.net" #property indicator_separate_window #property indicator_buffers 5 #property indicator_color1 Blue #property indicator_color2 Red #property indicator_color3 Green #property indicator_color4 DeepPink #property indicator_width4 2 #property indicator_color5 Aqua #property indicator_width5 2 //---- input parameters extern int FastMAPeriod=12; extern int SlowMAPeriod=26; extern int SignalMAPeriod=9; extern bool ShowSignal = false; extern double SignalDiff = 0.000175; //---- buffers double MACDLineBuffer[]; double SignalLineBuffer[]; double HistogramBuffer[]; double AlertUpBuffer[]; double AlertDownBuffer[]; //---- variables double alpha = 0; double alpha_1 = 0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1); //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,MACDLineBuffer); SetIndexDrawBegin(0,SlowMAPeriod); SetIndexStyle(1,DRAW_LINE/*,STYLE_DOT*/); SetIndexBuffer(1,SignalLineBuffer); SetIndexDrawBegin(1,SlowMAPeriod+SignalMAPeriod); SetIndexStyle(2,DRAW_HISTOGRAM); SetIndexBuffer(2,HistogramBuffer); SetIndexDrawBegin(2,SlowMAPeriod+SignalMAPeriod); SetIndexBuffer(3,AlertDownBuffer); SetIndexDrawBegin(3,SlowMAPeriod+SignalMAPeriod); SetIndexBuffer(4,AlertUpBuffer); SetIndexDrawBegin(4,SlowMAPeriod+SignalMAPeriod); if(ShowSignal){ SetIndexStyle(3,DRAW_ARROW); SetIndexArrow(3,119); SetIndexStyle(4,DRAW_ARROW); SetIndexArrow(4,119); }else{ SetIndexStyle(3,DRAW_NONE); SetIndexStyle(4,DRAW_NONE); } //---- name for DataWindow and indicator subwindow label IndicatorShortName("MACD-VT("+FastMAPeriod+","+SlowMAPeriod+","+SignalMAPeriod+")"); SetIndexLabel(0,"MACD"); SetIndexLabel(1,"Signal"); SetIndexLabel(2,"Hist"); SetIndexLabel(3,NULL); SetIndexLabel(4,NULL); //---- alpha = 2.0 / (SignalMAPeriod + 1.0); alpha_1 = 1.0 - alpha; //---- if(StringFind(Symbol(),"JPY")!=-1) SignalDiff=SignalDiff*100; Print("SignalDiff = ",SignalDiff); return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int limit; int counted_bars = IndicatorCounted(); //---- check for possible errors if (counted_bars<0) return(-1); //---- last counted bar will be recounted if (counted_bars>0) counted_bars--; limit = Bars - counted_bars; for(int i=limit; i>=0; i--) { MACDLineBuffer[i] = iMA(NULL,0,FastMAPeriod,0,MODE_EMA,PRICE_CLOSE,i) - iMA(NULL,0,SlowMAPeriod,0,MODE_EMA,PRICE_CLOSE,i); SignalLineBuffer[i] = alpha*MACDLineBuffer[i] + alpha_1*SignalLineBuffer[i+1]; HistogramBuffer[i] = MACDLineBuffer[i] - SignalLineBuffer[i]; if(MACDLineBuffer[i] >MACDLineBuffer[i+1]+SignalDiff ){ AlertUpBuffer[i]=MACDLineBuffer[i]; }else{ AlertUpBuffer[i]=EMPTY_VALUE; } if(MACDLineBuffer[i] <MACDLineBuffer[i+1]-SignalDiff){ AlertDownBuffer[i]=MACDLineBuffer[i]; }else{ AlertDownBuffer[i]=EMPTY_VALUE; } } //---- return(0); } //+------------------------------------------------------------------+

  • MT4 スローストキャスティクスについて

    下記MT4のスローストキャスティクスのプログラムなのですが、クロスした際にサウンドを鳴らすには、 どのようにプログラムを変えたら良いのでしょうか?どなたか詳しい方、ご教授願います。 詳しい方からすれば、なんてことないことなのですが、全くの初心者で困っています。 どなたか、どうぞよろしくお願いします。 #property copyright "Copyright ?2004, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #property indicator_separate_window #property indicator_minimum 0 #property indicator_maximum 100 #property indicator_buffers 2 #property indicator_color1 LightSeaGreen #property indicator_color2 Red //---- input parameters extern int KPeriod=42; extern int DPeriod=3; extern int Slowing=3; //---- buffers double KBuffer[]; double DBuffer[]; double MainBuffer[]; double SignalBuffer[]; double HighesBuffer[]; double LowesBuffer[]; //---- int draw_begin1=0; int draw_begin2=0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { string short_name; //---- 2 additional buffers are used for counting. IndicatorBuffers(6); SetIndexBuffer(2, HighesBuffer); SetIndexBuffer(3, LowesBuffer); SetIndexBuffer(4, MainBuffer); SetIndexBuffer(5, SignalBuffer); //---- indicator lines SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0, KBuffer); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1, DBuffer); //---- name for DataWindow and indicator subwindow label short_name="SlowKD("+KPeriod+","+DPeriod+","+Slowing+")"; IndicatorShortName(short_name); SetIndexLabel(4,short_name); SetIndexLabel(5,"Signal"); //---- draw_begin1=KPeriod+Slowing; draw_begin2=draw_begin1+DPeriod; SetIndexDrawBegin(0,draw_begin1); SetIndexDrawBegin(1,draw_begin2); //---- return(0); } //+------------------------------------------------------------------+ //| Stochastic oscillator | //+------------------------------------------------------------------+ int start() { int i,k; int counted_bars=IndicatorCounted(); double price; //---- if(Bars<=draw_begin2) return(0); //---- initial zero if(counted_bars<1) { for(i=1;i<=draw_begin1;i++) MainBuffer[Bars-i]=0; for(i=1;i<=draw_begin2;i++) SignalBuffer[Bars-i]=0; } //---- minimums counting i=Bars-KPeriod; if(counted_bars>KPeriod) i=Bars-counted_bars-1; while(i>=0) { double min=1000000; k=i+KPeriod-1; while(k>=i) { price=Low[k]; if(min>price) min=price; k--; } LowesBuffer[i]=min; i--; } //---- maximums counting i=Bars-KPeriod; if(counted_bars>KPeriod) i=Bars-counted_bars-1; while(i>=0) { double max=-1000000; k=i+KPeriod-1; while(k>=i) { price=High[k]; if(max<price) max=price; k--; } HighesBuffer[i]=max; i--; } //---- %K line i=Bars-draw_begin1; if(counted_bars>draw_begin1) i=Bars-counted_bars-1; while(i>=0) { double sumlow=0.0; double sumhigh=0.0; for(k=(i+Slowing-1);k>=i;k--) { sumlow+=Close[k]-LowesBuffer[k]; sumhigh+=HighesBuffer[k]-LowesBuffer[k]; } if(sumhigh==0.0) MainBuffer[i]=100.0; else MainBuffer[i]=sumlow/sumhigh*100; i--; } //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; int limit=Bars-counted_bars; //---- signal line is simple movimg average for(i=0; i<limit; i++) KBuffer[i]=iMAOnArray(MainBuffer,Bars,Slowing,0,MODE_SMA,i); for(i=0; i<limit; i++) DBuffer[i]=iMAOnArray(KBuffer,Bars,DPeriod,0,MODE_SMA,i); //---- return(0); } //+------------------------------------------------------------------+

  • MT4 MACD

    MACDとSIGNALがクロスした際の、(1)-(3)の条件を満たす、プログラム変更を教えてください。 (1)Alertを鳴らす(2)Soundを1度鳴らす(3)Soundを鳴らし続ける #property indicator_separate_window #property indicator_buffers 5 #property indicator_color1 DeepSkyBlue #property indicator_color2 DeepPink #property indicator_color3 Green #property indicator_color4 DeepPink #property indicator_width4 2 #property indicator_color5 Aqua #property indicator_width5 2 //---- input parameters extern int FastMAPeriod=12; extern int SlowMAPeriod=26; extern string _ma = "0:SMA 1:EMA 2:SMMA 3:LWMA"; extern int MAMethod = MODE_EMA; extern int SignalMAPeriod=9; extern int SignalMAMethod = MODE_EMA; extern bool ShowSignal = false; extern double SignalDiff = 0.000175; //---- buffers double MACDLineBuffer[]; double SignalLineBuffer[]; double HistogramBuffer[]; double AlertUpBuffer[]; double AlertDownBuffer[]; //---- variables double alpha = 0; double alpha_1 = 0; //| Custom indicator initialization function | int init() { IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1); //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,MACDLineBuffer); SetIndexDrawBegin(0,SlowMAPeriod); SetIndexStyle(1,DRAW_LINE/*,STYLE_DOT*/); SetIndexBuffer(1,SignalLineBuffer); SetIndexDrawBegin(1,SlowMAPeriod+SignalMAPeriod); SetIndexStyle(2,DRAW_HISTOGRAM); SetIndexBuffer(2,HistogramBuffer); SetIndexDrawBegin(2,SlowMAPeriod+SignalMAPeriod); SetIndexBuffer(3,AlertDownBuffer); SetIndexDrawBegin(3,SlowMAPeriod+SignalMAPeriod); SetIndexBuffer(4,AlertUpBuffer); SetIndexDrawBegin(4,SlowMAPeriod+SignalMAPeriod); if(ShowSignal){ SetIndexStyle(3,DRAW_ARROW); SetIndexArrow(3,119); SetIndexStyle(4,DRAW_ARROW); SetIndexArrow(4,119); }else{ SetIndexStyle(3,DRAW_NONE); SetIndexStyle(4,DRAW_NONE); } //---- name for DataWindow and indicator subwindow label IndicatorShortName("MACD+("+FastMAPeriod+","+SlowMAPeriod+","+SignalMAPeriod+")"); SetIndexLabel(0,"MACD"); SetIndexLabel(1,"Signal"); SetIndexLabel(2,"Hist"); SetIndexLabel(3,NULL); SetIndexLabel(4,NULL); //---- //alpha = 2.0 / (SignalMAPeriod + 1.0); //alpha_1 = 1.0 - alpha; //---- if(StringFind(Symbol(),"JPY")!=-1) SignalDiff=SignalDiff*100; Print("SignalDiff = ",SignalDiff); return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int limit,i; int counted_bars = IndicatorCounted(); //---- check for possible errors if (counted_bars<0) return(-1); //---- last counted bar will be recounted if (counted_bars>0) counted_bars--; limit = Bars - counted_bars; for(i=limit; i>=0; i--) { MACDLineBuffer[i] = iMA(NULL,0,FastMAPeriod,0,MAMethod,PRICE_CLOSE,i) - iMA(NULL,0,SlowMAPeriod,0,MAMethod,PRICE_CLOSE,i); } for(i=limit; i>=0; i--) { //SignalLineBuffer[i] = alpha*MACDLineBuffer[i] + alpha_1*SignalLineBuffer[i+1]; SignalLineBuffer[i] = iMAOnArray(MACDLineBuffer,0,SignalMAPeriod,0,SignalMAMethod,i); HistogramBuffer[i] = MACDLineBuffer[i] - SignalLineBuffer[i]; if(MACDLineBuffer[i] >MACDLineBuffer[i+1]+SignalDiff ){ AlertUpBuffer[i]=MACDLineBuffer[i]; }else{ AlertUpBuffer[i]=EMPTY_VALUE; } if(MACDLineBuffer[i] <MACDLineBuffer[i+1]-SignalDiff){ AlertDownBuffer[i]=MACDLineBuffer[i]; }else{ AlertDownBuffer[i]=EMPTY_VALUE; } } //---- return(0);

  • MT4 スローストキャスティクス(前回同様)

    fhat6014様 前回と同様に(1)Alertを鳴らす(2)Soundを1度鳴らす(3)Soundを鳴らし続けるとい設定を一まとめで設定できるのでしょうか。教えてください。 #property indicator_separate_window #property indicator_minimum 0 #property indicator_maximum 100 #property indicator_buffers 2 #property indicator_color1 Lime #property indicator_color2 Red //---- input parameters extern int KPeriod=42; extern int DPeriod=3; extern int Slowing=3; //---- buffers double KBuffer[]; double DBuffer[]; double MainBuffer[]; double SignalBuffer[]; double HighesBuffer[]; double LowesBuffer[]; //---- int draw_begin1=0; int draw_begin2=0; //| Custom indicator initialization function | int init() { string short_name; //---- 2 additional buffers are used for counting. IndicatorBuffers(6); SetIndexBuffer(2, HighesBuffer); SetIndexBuffer(3, LowesBuffer); SetIndexBuffer(4, MainBuffer); SetIndexBuffer(5, SignalBuffer); //---- indicator lines SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0, KBuffer); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1, DBuffer); //---- name for DataWindow and indicator subwindow label short_name="SlowKD("+KPeriod+","+DPeriod+","+Slowing+")"; IndicatorShortName(short_name); SetIndexLabel(4,short_name); SetIndexLabel(5,"Signal"); //---- draw_begin1=KPeriod+Slowing; draw_begin2=draw_begin1+DPeriod; SetIndexDrawBegin(0,draw_begin1); SetIndexDrawBegin(1,draw_begin2); //---- return(0); } //| Stochastic oscillator | int start() { int i,k; int counted_bars=IndicatorCounted(); double price; //---- if(Bars<=draw_begin2) return(0); //---- initial zero if(counted_bars<1) { for(i=1;i<=draw_begin1;i++) MainBuffer[Bars-i]=0; for(i=1;i<=draw_begin2;i++) SignalBuffer[Bars-i]=0; } //---- minimums counting i=Bars-KPeriod; if(counted_bars>KPeriod) i=Bars-counted_bars-1; while(i>=0) { double min=1000000; k=i+KPeriod-1; while(k>=i) { price=Low[k]; if(min>price) min=price; k--; } LowesBuffer[i]=min; i--; } //---- maximums counting i=Bars-KPeriod; if(counted_bars>KPeriod) i=Bars-counted_bars-1; while(i>=0) { double max=-1000000; k=i+KPeriod-1; while(k>=i) { price=High[k]; if(max<price) max=price; k--; } HighesBuffer[i]=max; i--; } //---- %K line i=Bars-draw_begin1; if(counted_bars>draw_begin1) i=Bars-counted_bars-1; while(i>=0) { double sumlow=0.0; double sumhigh=0.0; for(k=(i+Slowing-1);k>=i;k--) { sumlow+=Close[k]-LowesBuffer[k]; sumhigh+=HighesBuffer[k]-LowesBuffer[k]; } if(sumhigh==0.0) MainBuffer[i]=100.0; else MainBuffer[i]=sumlow/sumhigh*100; i--; } //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; int limit=Bars-counted_bars; //---- signal line is simple movimg average for(i=0; i<limit; i++) KBuffer[i]=iMAOnArray(MainBuffer,Bars,Slowing,0,MODE_SMA,i); for(i=0; i<limit; i++) DBuffer[i]=iMAOnArray(KBuffer,Bars,DPeriod,0,MODE_SMA,i); //---- return(0); }

  • 〔MQL4〕MT4で指標を作成しています。

    はじめまして。 MQLで指標を作成しています。 どうしてもわからない事があるので、初歩的な事だと思いますが質問させていただきます。 組み込み関数のiATRを利用しています。 短期間のiATRと長期間のiATRを算出し、最終的に短期ATRを長期ATRで割りたいのです。 以下のMQLを入力しましたが、最新のバーでの計算結果のみしか表示されません。 start内のatr3[i] = atr1[i] / atr2[i];を消去すると短期と長期のATRだけは過去分も表示されました。 どなたかわかる方、教えてください。。 #property indicator_buffers 3 #property indicator_separate_window #property indicator_color1 Red #property indicator_color2 Blue #property indicator_color3 Yellow double atr1[];//短期ATR double atr2[];//長期ATR double atr3[];//短期ATR/長期ATR extern int atr1_period=5; extern int atr2_period=10; int init() { SetIndexBuffer(0,atr1); SetIndexBuffer(1,atr2); SetIndexBuffer(2,atr3); SetIndexLabel(0,"atr1"); SetIndexLabel(1,"atr2"); SetIndexLabel(2,"atr1/atr2"); return(0); } int start() { int limit=Bars-IndicatorCounted(); for(int i=limit-1; i>=0; i--) { atr1[i]=iATR(NULL,0,atr1_period,i); atr2[i]=iATR(NULL,0,atr2_period,i); atr3[i] = atr1[i] / atr2[i]; } return(0); }