コーディングの方法は? - ページ 325 1...318319320321322323324325326327328329330331332...347 新しいコメント ccjjaa 2013.01.20 00:39 #3241 コード cja: こんにちは、mladen。これを見る時間はありますか? CJAより こんにちは、mladen。 私のtrailing codeのリクエストに対する解決策を得たので、あなたのtodoリストからこれを取り除くことができることをお知らせするための簡単なメモです。 CJAより Mladen Rakic 2013.01.20 06:27 #3242 問題を解決できてよかったです。 さらなるコーディングとトレードをお楽しみください。 cja: こんにちは、mladen。私のトレイリングコードの要求に対する解決策を得たので、これをあなたのTodoリストから取り除くことができることをお知らせするための簡単なメモです。 CJAに感謝します。 dasio 2013.01.25 18:17 #3243 こんにちは。 私のEAの最後のクローズオーダーが利益か損失かをチェック する必要があります。 EAの最後のクローズした利益確定注文を2つチェックして、それを合計しようと思いました。 問題は、同じ口座に複数のEAがあるので、特定のMagicNumberのHistory orderをチェックする必要があることです。私はいくつかのモードで試してみましたが、成功しませんでした。 助けていただけませんか? ありがとうございます。 Mladen Rakic 2013.01.25 18:30 #3244 ダシオ この関数は、最後の決済注文の利益を返します(ご覧のように、マジックナンバーをパラメータとして指定することもできますので、複数のインスタンスに関する問題を解決することができます)。 double lastOrderProfit(int magicNumber=0) { datetime lastTime = 0; double lastProfit = 0; for(int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==false) break; if (magicNumber!=0) if (OrderMagicNumber() != magicNumber) continue; if (OrderSymbol() != Symbol()) continue; if (OrderCloseTime() <= lastTime) continue; lastTime = OrderCloseTime(); lastProfit = OrderProfit()+OrderSwap()+OrderCommission(); } return(lastProfit); } この関数からのリターンがプラスかマイナスかをチェックするだけです。 dasio: こんにちは。私のEAの最後のクローズオーダーが利益か損失かをチェックする必要があります。 私は、EAの最後のクローズした利益注文を2つチェックし、それを合計することを考えました。 問題は、同じ口座で複数のEAを使っているので、特定のMagicNumberでHistory orderをチェックする必要があることです。私はいくつかのモードで試してみましたが、成功しませんでした。 助けていただけませんか? ありがとうございます クローズドオーダーの利益計算 "HELP" コーディングのヘルプ ユニバーサルMAクロスEA dasio 2013.01.26 12:51 #3245 mladen: ダシオこの関数は、最後に決済された注文の利益を返します。 double lastOrderProfit(int magicNumber=0) { datetime lastTime = 0; double lastProfit = 0; for(int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==false) break; if (magicNumber!=0) if (OrderMagicNumber() != magicNumber) continue; if (OrderSymbol() != Symbol()) continue; if (OrderCloseTime() <= lastTime) continue; lastTime = OrderCloseTime(); lastProfit = OrderProfit()+OrderSwap()+OrderCommission(); } return(lastProfit); } 関数からのリターンがプラスかマイナスかをチェックすればいいだけです。 つまり、この関数を マジックナンバーで呼び出すだけで、私のEAの最後のクローズドオーダーの利益が得られるということですね? Mladen Rakic 2013.01.26 12:53 #3246 そうです、その通りです。 dasio: つまり、この関数をマジックナンバーで呼び出すだけで、私のEAの最後のクローズドオーダーの利益が表示されるわけですね? dasio 2013.01.26 13:56 #3247 mladen: はい、それは正しいです。 ありがとうございます。 しかし、EAを起動して履歴に注文がない場合、EAがポジションをクローズしたときだけ機能を 呼び出すにはどうしたらいいでしょうか? Mladen Rakic 2013.01.26 14:38 #3248 そして、最初にこの関数を使用します。 int closedSoFarForMagic(int magicNumber=0) { int closedSoFar=0; for(int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==false) break; if (magicNumber!=0) if (OrderMagicNumber() != magicNumber) continue; if (OrderSymbol() != Symbol()) continue; closedSoFar++; } return(closedSoFar); } もしclosedSoFarForMagic() > 0 ならば、履歴の中に特定のマジックナンバーの クローズオーダーがあることを知り、最後のオーダーの利益をチェックすることができます。 dasio: でも、もしEAを起動して、履歴に注文がなかったら、EAがポジションをクローズしたときだけ、どうやってこの関数を呼び出すのでしょうか? Fausto Nunziante Del Gaudio 2013.03.16 18:53 #3249 vma cross fantail こんにちは、私は2つのVMAがクロスしたときに矢印を表示するインジケータを作ろうとしています。私はmqlの初心者なのですが、私のインジケータは明らかに機能せず、行き詰っています。どなたか助けてください。 元のインジケータはMA - fantail vma 3です。 #property copyright "Copyright © 2007, Forex-TSD.com " #property link "https://www.forex-tsd.com/" #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Black #property indicator_width1 2 //#property indicator_color2 Red //#property indicator_width2 2 //---- input parameters //For both user settings, 2 is fast, 8 is slow.Weight=2.3 gives late entry. extern int ADX_Length=2; extern double Weighting=2.0; extern int MA_Length=1;//This must be =1 so that the VMA base line does not get averaged. extern int MA_Mode=1; //---- buffers double MA[]; double VMA[]; double VarMA[]; double ADX[]; double ADXR[]; double sPDI[]; double sMDI[]; double STR[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators IndicatorBuffers(8); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,MA); SetIndexBuffer(1,VMA); // SetIndexStyle(2,DRAW_LINE); SetIndexBuffer(2,VarMA); SetIndexBuffer(3,ADX); SetIndexBuffer(4,ADXR); SetIndexBuffer(5,sPDI); SetIndexBuffer(6,sMDI); SetIndexBuffer(7,STR); //---- name for DataWindow and indicator subwindow label string short_name="MA - Fantail vma 3"; IndicatorShortName(short_name); SetIndexLabel(0,"MA - Fantail vma 3"); //---- SetIndexDrawBegin(0,2*MA_Length+40); // SetIndexDrawBegin(1,2*MA_Length+40);//Used for displaying internal signals. //---- Safety limits for user settings if (ADX_Length<2)ADX_Length=2; if (ADX_Length>8)ADX_Length=8; if (Weighting<1)Weighting=1; if (Weighting>8)Weighting=8; return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int limit, i, j, counted_bars=IndicatorCounted(); //---- if ( counted_bars < 0 ) return(-1); if ( counted_bars ==0 ) limit=Bars-1; if ( counted_bars < 1 ) for(i=1;i<2*(MA_Length+ADX_Length+10);i++) { VMA=Close; VarMA=Close; MA=Close; STR = High-Low; sPDI = 0; sMDI = 0; ADX=0; ADXR=0; } if(counted_bars>0) limit=Bars-counted_bars; limit--; for(i=limit; i>=0; i--) { double Hi = High; double Hi1 = High; double Lo = Low; double Lo1 = Low; double Close1= Close; double Bulls = 0.5*(MathAbs(Hi-Hi1)+(Hi-Hi1)); double Bears = 0.5*(MathAbs(Lo1-Lo)+(Lo1-Lo)); if (Bulls > Bears) Bears = 0; else if (Bulls < Bears) Bulls = 0; else if (Bulls == Bears) {Bulls = 0;Bears = 0;} sPDI = (Weighting*sPDI + Bulls)/(Weighting+1);//ma weighting sMDI = (Weighting*sMDI + Bears)/(Weighting+1);//ma weighting double TR = MathMax(Hi-Lo,Hi-Close1); STR = (Weighting*STR + TR)/(Weighting+1);//ma weighting if(STR>0 ) { double PDI = sPDI/STR; double MDI = sMDI/STR; } if((PDI + MDI) > 0) double DX = MathAbs(PDI - MDI)/(PDI + MDI); else DX = 0; ADX = (Weighting*ADX + DX)/(Weighting+1);//ma weighting double vADX = ADX; double ADXmin = 1000000; for (j=0; j<=ADX_Length-1;j++) ADXmin = MathMin(ADXmin,ADX); double ADXmax = -1; for (j=0; j<=ADX_Length-1;j++) ADXmax = MathMax(ADXmax,ADX); double Diff = ADXmax - ADXmin; if(Diff > 0) double Const = (vADX- ADXmin)/Diff; else Const = 0; VarMA=((2-Const)*VarMA+Const*Close)/2;//Same equation but one less array, mod 10 Sept 2007. } for(j=limit; j>=0; j--) MA[j] = iMAOnArray(VarMA,0,MA_Length,0,MA_Mode,j); //---- return(0); } //+------------------------------------------------------------------+ [/PHP] and this is mine [PHP] //+------------------------------------------------------------------+ //| VMA cross arrows.mq4 | //| thefxpros@katamail.com | //+------------------------------------------------------------------+ #property copyright "thefxpros" #property link "thefxpros@katamail.com" #property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 C'255,198,198' #property indicator_color2 C'198,255,198' #property indicator_color3 Crimson #property indicator_color4 DarkGreen #property indicator_width1 3 #property indicator_width2 3 #property indicator_width3 2 #property indicator_width4 2 //-------------------------------------------------------- extern int VMA1_ADXLenght = 2; extern double VMA1_Weighting = 2.0; extern int VMA1_Length = 1; extern int VMA1_Mode = 1; extern int VMA2_ADXLenght = 2; extern double VMA2_Weighting = 3.0; extern int VMA2_Length = 3; extern int VMA2_Mode = 2; //-------------------------------------------------------- double buffer1[]; double buffer2[]; double buffer3[]; double buffer4[]; //-------------------------------------------------------- int init() { SetIndexStyle (0,DRAW_HISTOGRAM); SetIndexStyle (1,DRAW_HISTOGRAM); SetIndexBuffer (0,buffer3); SetIndexBuffer (1,buffer4); SetIndexBuffer (2,buffer1); SetIndexBuffer (3,buffer2); return(0); } int deinit() { return(0); } //-------------------------------------------------------- int start() { int counted_bars=IndicatorCounted(); int limit,i; if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //-------------------------------------------------------- for(i=limit; i>=0; i--) { buffer1 = iCustom(NULL, 0, "MA - fatail vma 3", VMA1_ADXLenght, VMA1_Weighting, VMA1_Length, VMA1_Mode, i); buffer2 = iCustom(NULL, 0, "MA - fatail vma 3", VMA1_ADXLenght, VMA2_Weighting, VMA2_Length, VMA2_Mode, i); buffer3 = buffer1; buffer4 = buffer2; } return(0); } How to code? ハル移動平均 [警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 Mladen Rakic 2013.03.16 20:12 #3250 thefxpros, まず、インジケーターの名前を確認してください。 ""MA -fatailvma 3"" です。 これは "fantail "であるべきです。 また、iCustom()インジケータの呼び出しでは、バッファ 番号が抜けていますね。私は、あなたが達成しようとしたものがこれであると推測しています。 buffer1 = iCustom(NULL, 0, "MA - fatail vma 3", VMA1_ADXLenght, VMA1_Weighting, VMA1_Length, VMA1_Mode,0, i); buffer2 = iCustom(NULL, 0, "MA - fatail vma 3", VMA1_ADXLenght, VMA2_Weighting, VMA2_Length, VMA2_Mode,1, i);[/PHP] thefxpros: Hi, i'm trying to make an indicator that shows arrows when two vma crosses. I'm a mql beginner and my indicator obviously does not work, I'm stuck. Somebody can help me? The original indicator is MA - fantail vma 3 #property copyright "Copyright © 2007, Forex-TSD.com " #property link "https://www.forex-tsd.com/" #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Black #property indicator_width1 2 //#property indicator_color2 Red //#property indicator_width2 2 //---- input parameters //For both user settings, 2 is fast, 8 is slow.Weight=2.3 gives late entry. extern int ADX_Length=2; extern double Weighting=2.0; extern int MA_Length=1;//This must be =1 so that the VMA base line does not get averaged. extern int MA_Mode=1; //---- buffers double MA[]; double VMA[]; double VarMA[]; double ADX[]; double ADXR[]; double sPDI[]; double sMDI[]; double STR[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators IndicatorBuffers(8); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,MA); SetIndexBuffer(1,VMA); // SetIndexStyle(2,DRAW_LINE); SetIndexBuffer(2,VarMA); SetIndexBuffer(3,ADX); SetIndexBuffer(4,ADXR); SetIndexBuffer(5,sPDI); SetIndexBuffer(6,sMDI); SetIndexBuffer(7,STR); //---- name for DataWindow and indicator subwindow label string short_name="MA - Fantail vma 3"; IndicatorShortName(short_name); SetIndexLabel(0,"MA - Fantail vma 3"); //---- SetIndexDrawBegin(0,2*MA_Length+40); // SetIndexDrawBegin(1,2*MA_Length+40);//Used for displaying internal signals. //---- Safety limits for user settings if (ADX_Length<2)ADX_Length=2; if (ADX_Length>8)ADX_Length=8; if (Weighting<1)Weighting=1; if (Weighting>8)Weighting=8; return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int limit, i, j, counted_bars=IndicatorCounted(); //---- if ( counted_bars < 0 ) return(-1); if ( counted_bars ==0 ) limit=Bars-1; if ( counted_bars < 1 ) for(i=1;i<2*(MA_Length+ADX_Length+10);i++) { VMA=Close; VarMA=Close; MA=Close; STR = High-Low; sPDI = 0; sMDI = 0; ADX=0; ADXR=0; } if(counted_bars>0) limit=Bars-counted_bars; limit--; for(i=limit; i>=0; i--) { double Hi = High; double Hi1 = High; double Lo = Low; double Lo1 = Low; double Close1= Close; double Bulls = 0.5*(MathAbs(Hi-Hi1)+(Hi-Hi1)); double Bears = 0.5*(MathAbs(Lo1-Lo)+(Lo1-Lo)); if (Bulls > Bears) Bears = 0; else if (Bulls < Bears) Bulls = 0; else if (Bulls == Bears) {Bulls = 0;Bears = 0;} sPDI = (Weighting*sPDI + Bulls)/(Weighting+1);//ma weighting sMDI = (Weighting*sMDI + Bears)/(Weighting+1);//ma weighting double TR = MathMax(Hi-Lo,Hi-Close1); STR = (Weighting*STR + TR)/(Weighting+1);//ma weighting if(STR>0 ) { double PDI = sPDI/STR; double MDI = sMDI/STR; } if((PDI + MDI) > 0) double DX = MathAbs(PDI - MDI)/(PDI + MDI); else DX = 0; ADX = (Weighting*ADX + DX)/(Weighting+1);//ma weighting double vADX = ADX; double ADXmin = 1000000; for (j=0; j<=ADX_Length-1;j++) ADXmin = MathMin(ADXmin,ADX); double ADXmax = -1; for (j=0; j<=ADX_Length-1;j++) ADXmax = MathMax(ADXmax,ADX); double Diff = ADXmax - ADXmin; if(Diff > 0) double Const = (vADX- ADXmin)/Diff; else Const = 0; VarMA=((2-Const)*VarMA+Const*Close)/2;//Same equation but one less array, mod 10 Sept 2007. } for(j=limit; j>=0; j--) MA[j] = iMAOnArray(VarMA,0,MA_Length,0,MA_Mode,j); //---- return(0); } //+------------------------------------------------------------------+ and this is mine [PHP] //+------------------------------------------------------------------+ //| VMA cross arrows.mq4 | //| thefxpros@katamail.com | //+------------------------------------------------------------------+ #property copyright "thefxpros" #property link "thefxpros@katamail.com" #property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 C'255,198,198' #property indicator_color2 C'198,255,198' #property indicator_color3 Crimson #property indicator_color4 DarkGreen #property indicator_width1 3 #property indicator_width2 3 #property indicator_width3 2 #property indicator_width4 2 //-------------------------------------------------------- extern int VMA1_ADXLenght = 2; extern double VMA1_Weighting = 2.0; extern int VMA1_Length = 1; extern int VMA1_Mode = 1; extern int VMA2_ADXLenght = 2; extern double VMA2_Weighting = 3.0; extern int VMA2_Length = 3; extern int VMA2_Mode = 2; //-------------------------------------------------------- double buffer1[]; double buffer2[]; double buffer3[]; double buffer4[]; //-------------------------------------------------------- int init() { SetIndexStyle (0,DRAW_HISTOGRAM); SetIndexStyle (1,DRAW_HISTOGRAM); SetIndexBuffer (0,buffer3); SetIndexBuffer (1,buffer4); SetIndexBuffer (2,buffer1); SetIndexBuffer (3,buffer2); return(0); } int deinit() { return(0); } //-------------------------------------------------------- int start() { int counted_bars=IndicatorCounted(); int limit,i; if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //-------------------------------------------------------- for(i=limit; i>=0; i--) { buffer1 = iCustom(NULL, 0, "MA - fatail vma 3", VMA1_ADXLenght, VMA1_Weighting, VMA1_Length, VMA1_Mode, i); buffer2 = iCustom(NULL, 0, "MA - fatail vma 3", VMA1_ADXLenght, VMA2_Weighting, VMA2_Length, VMA2_Mode, i); buffer3 = buffer1; buffer4 = buffer2; } return(0); } How to code? [アーカイブ!】どんなエキスパートやインジケーターでも無料で書きます。 ソーシャルテクノロジースタートアップの構築 パート2: MQL5 REST 1...318319320321322323324325326327328329330331332...347 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
コード
こんにちは、mladen。
これを見る時間はありますか?
CJAよりこんにちは、mladen。
私のtrailing codeのリクエストに対する解決策を得たので、あなたのtodoリストからこれを取り除くことができることをお知らせするための簡単なメモです。
CJAより
問題を解決できてよかったです。
さらなるコーディングとトレードをお楽しみください。
こんにちは、mladen。
私のトレイリングコードの要求に対する解決策を得たので、これをあなたのTodoリストから取り除くことができることをお知らせするための簡単なメモです。
CJAに感謝します。こんにちは。
私のEAの最後のクローズオーダーが利益か損失かをチェック する必要があります。
EAの最後のクローズした利益確定注文を2つチェックして、それを合計しようと思いました。
問題は、同じ口座に複数のEAがあるので、特定のMagicNumberのHistory orderをチェックする必要があることです。私はいくつかのモードで試してみましたが、成功しませんでした。
助けていただけませんか?
ありがとうございます。
ダシオ
この関数は、最後の決済注文の利益を返します(ご覧のように、マジックナンバーをパラメータとして指定することもできますので、複数のインスタンスに関する問題を解決することができます)。
{
datetime lastTime = 0;
double lastProfit = 0;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==false) break;
if (magicNumber!=0)
if (OrderMagicNumber() != magicNumber) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderCloseTime() <= lastTime) continue;
lastTime = OrderCloseTime();
lastProfit = OrderProfit()+OrderSwap()+OrderCommission();
}
return(lastProfit);
}この関数からのリターンがプラスかマイナスかをチェックするだけです。
こんにちは。
私のEAの最後のクローズオーダーが利益か損失かをチェックする必要があります。
私は、EAの最後のクローズした利益注文を2つチェックし、それを合計することを考えました。
問題は、同じ口座で複数のEAを使っているので、特定のMagicNumberでHistory orderをチェックする必要があることです。私はいくつかのモードで試してみましたが、成功しませんでした。
助けていただけませんか?
ありがとうございますダシオ
この関数は、最後に決済された注文の利益を返します。
{
datetime lastTime = 0;
double lastProfit = 0;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==false) break;
if (magicNumber!=0)
if (OrderMagicNumber() != magicNumber) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderCloseTime() <= lastTime) continue;
lastTime = OrderCloseTime();
lastProfit = OrderProfit()+OrderSwap()+OrderCommission();
}
return(lastProfit);
}つまり、この関数を マジックナンバーで呼び出すだけで、私のEAの最後のクローズドオーダーの利益が得られるということですね?
そうです、その通りです。
つまり、この関数をマジックナンバーで呼び出すだけで、私のEAの最後のクローズドオーダーの利益が表示されるわけですね?
はい、それは正しいです。
ありがとうございます。
しかし、EAを起動して履歴に注文がない場合、EAがポジションをクローズしたときだけ機能を 呼び出すにはどうしたらいいでしょうか?
そして、最初にこの関数を使用します。
{
int closedSoFar=0;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==false) break;
if (magicNumber!=0)
if (OrderMagicNumber() != magicNumber) continue;
if (OrderSymbol() != Symbol()) continue;
closedSoFar++;
}
return(closedSoFar);
}
もしclosedSoFarForMagic() > 0 ならば、履歴の中に特定のマジックナンバーの クローズオーダーがあることを知り、最後のオーダーの利益をチェックすることができます。
でも、もしEAを起動して、履歴に注文がなかったら、EAがポジションをクローズしたときだけ、どうやってこの関数を呼び出すのでしょうか?
vma cross fantail
こんにちは、私は2つのVMAがクロスしたときに矢印を表示するインジケータを作ろうとしています。私はmqlの初心者なのですが、私のインジケータは明らかに機能せず、行き詰っています。どなたか助けてください。
元のインジケータはMA - fantail vma 3です。
#property link "https://www.forex-tsd.com/"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Black
#property indicator_width1 2
//#property indicator_color2 Red
//#property indicator_width2 2
//---- input parameters
//For both user settings, 2 is fast, 8 is slow.Weight=2.3 gives late entry.
extern int ADX_Length=2;
extern double Weighting=2.0;
extern int MA_Length=1;//This must be =1 so that the VMA base line does not get averaged.
extern int MA_Mode=1;
//---- buffers
double MA[];
double VMA[];
double VarMA[];
double ADX[];
double ADXR[];
double sPDI[];
double sMDI[];
double STR[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
IndicatorBuffers(8);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,MA);
SetIndexBuffer(1,VMA);
// SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,VarMA);
SetIndexBuffer(3,ADX);
SetIndexBuffer(4,ADXR);
SetIndexBuffer(5,sPDI);
SetIndexBuffer(6,sMDI);
SetIndexBuffer(7,STR);
//---- name for DataWindow and indicator subwindow label
string short_name="MA - Fantail vma 3";
IndicatorShortName(short_name);
SetIndexLabel(0,"MA - Fantail vma 3");
//----
SetIndexDrawBegin(0,2*MA_Length+40);
// SetIndexDrawBegin(1,2*MA_Length+40);//Used for displaying internal signals.
//---- Safety limits for user settings
if (ADX_Length<2)ADX_Length=2;
if (ADX_Length>8)ADX_Length=8;
if (Weighting<1)Weighting=1;
if (Weighting>8)Weighting=8;
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int limit, i, j, counted_bars=IndicatorCounted();
//----
if ( counted_bars < 0 ) return(-1);
if ( counted_bars ==0 ) limit=Bars-1;
if ( counted_bars < 1 )
for(i=1;i<2*(MA_Length+ADX_Length+10);i++)
{
VMA=Close;
VarMA=Close;
MA=Close;
STR = High-Low;
sPDI = 0;
sMDI = 0;
ADX=0;
ADXR=0;
}
if(counted_bars>0) limit=Bars-counted_bars;
limit--;
for(i=limit; i>=0; i--)
{
double Hi = High;
double Hi1 = High;
double Lo = Low;
double Lo1 = Low;
double Close1= Close;
double Bulls = 0.5*(MathAbs(Hi-Hi1)+(Hi-Hi1));
double Bears = 0.5*(MathAbs(Lo1-Lo)+(Lo1-Lo));
if (Bulls > Bears) Bears = 0;
else
if (Bulls < Bears) Bulls = 0;
else
if (Bulls == Bears) {Bulls = 0;Bears = 0;}
sPDI = (Weighting*sPDI + Bulls)/(Weighting+1);//ma weighting
sMDI = (Weighting*sMDI + Bears)/(Weighting+1);//ma weighting
double TR = MathMax(Hi-Lo,Hi-Close1);
STR = (Weighting*STR + TR)/(Weighting+1);//ma weighting
if(STR>0 )
{
double PDI = sPDI/STR;
double MDI = sMDI/STR;
}
if((PDI + MDI) > 0)
double DX = MathAbs(PDI - MDI)/(PDI + MDI);
else DX = 0;
ADX = (Weighting*ADX + DX)/(Weighting+1);//ma weighting
double vADX = ADX;
double ADXmin = 1000000;
for (j=0; j<=ADX_Length-1;j++) ADXmin = MathMin(ADXmin,ADX);
double ADXmax = -1;
for (j=0; j<=ADX_Length-1;j++) ADXmax = MathMax(ADXmax,ADX);
double Diff = ADXmax - ADXmin;
if(Diff > 0) double Const = (vADX- ADXmin)/Diff; else Const = 0;
VarMA=((2-Const)*VarMA+Const*Close)/2;//Same equation but one less array, mod 10 Sept 2007.
}
for(j=limit; j>=0; j--) MA[j] = iMAOnArray(VarMA,0,MA_Length,0,MA_Mode,j);
//----
return(0);
}
//+------------------------------------------------------------------+
[/PHP]
and this is mine
[PHP]
//+------------------------------------------------------------------+
//| VMA cross arrows.mq4 |
//| thefxpros@katamail.com |
//+------------------------------------------------------------------+
#property copyright "thefxpros"
#property link "thefxpros@katamail.com"
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 C'255,198,198'
#property indicator_color2 C'198,255,198'
#property indicator_color3 Crimson
#property indicator_color4 DarkGreen
#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 2
#property indicator_width4 2
//--------------------------------------------------------
extern int VMA1_ADXLenght = 2;
extern double VMA1_Weighting = 2.0;
extern int VMA1_Length = 1;
extern int VMA1_Mode = 1;
extern int VMA2_ADXLenght = 2;
extern double VMA2_Weighting = 3.0;
extern int VMA2_Length = 3;
extern int VMA2_Mode = 2;
//--------------------------------------------------------
double buffer1[];
double buffer2[];
double buffer3[];
double buffer4[];
//--------------------------------------------------------
int init()
{
SetIndexStyle (0,DRAW_HISTOGRAM);
SetIndexStyle (1,DRAW_HISTOGRAM);
SetIndexBuffer (0,buffer3);
SetIndexBuffer (1,buffer4);
SetIndexBuffer (2,buffer1);
SetIndexBuffer (3,buffer2);
return(0);
}
int deinit()
{
return(0);
}
//--------------------------------------------------------
int start()
{
int counted_bars=IndicatorCounted();
int limit,i;
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//--------------------------------------------------------
for(i=limit; i>=0; i--)
{
buffer1 = iCustom(NULL, 0, "MA - fatail vma 3", VMA1_ADXLenght, VMA1_Weighting, VMA1_Length, VMA1_Mode, i);
buffer2 = iCustom(NULL, 0, "MA - fatail vma 3", VMA1_ADXLenght, VMA2_Weighting, VMA2_Length, VMA2_Mode, i);
buffer3 = buffer1;
buffer4 = buffer2;
}
return(0);
}
thefxpros,
まず、インジケーターの名前を確認してください。
""MA -fatailvma 3"" です。
これは "fantail "であるべきです。
また、iCustom()インジケータの呼び出しでは、バッファ 番号が抜けていますね。私は、あなたが達成しようとしたものがこれであると推測しています。
buffer2 = iCustom(NULL, 0, "MA - fatail vma 3", VMA1_ADXLenght, VMA2_Weighting, VMA2_Length, VMA2_Mode,1, i);[/PHP]
Hi, i'm trying to make an indicator that shows arrows when two vma crosses. I'm a mql beginner and my indicator obviously does not work, I'm stuck. Somebody can help me?
The original indicator is MA - fantail vma 3
#property link "https://www.forex-tsd.com/"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Black
#property indicator_width1 2
//#property indicator_color2 Red
//#property indicator_width2 2
//---- input parameters
//For both user settings, 2 is fast, 8 is slow.Weight=2.3 gives late entry.
extern int ADX_Length=2;
extern double Weighting=2.0;
extern int MA_Length=1;//This must be =1 so that the VMA base line does not get averaged.
extern int MA_Mode=1;
//---- buffers
double MA[];
double VMA[];
double VarMA[];
double ADX[];
double ADXR[];
double sPDI[];
double sMDI[];
double STR[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
IndicatorBuffers(8);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,MA);
SetIndexBuffer(1,VMA);
// SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,VarMA);
SetIndexBuffer(3,ADX);
SetIndexBuffer(4,ADXR);
SetIndexBuffer(5,sPDI);
SetIndexBuffer(6,sMDI);
SetIndexBuffer(7,STR);
//---- name for DataWindow and indicator subwindow label
string short_name="MA - Fantail vma 3";
IndicatorShortName(short_name);
SetIndexLabel(0,"MA - Fantail vma 3");
//----
SetIndexDrawBegin(0,2*MA_Length+40);
// SetIndexDrawBegin(1,2*MA_Length+40);//Used for displaying internal signals.
//---- Safety limits for user settings
if (ADX_Length<2)ADX_Length=2;
if (ADX_Length>8)ADX_Length=8;
if (Weighting<1)Weighting=1;
if (Weighting>8)Weighting=8;
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int limit, i, j, counted_bars=IndicatorCounted();
//----
if ( counted_bars < 0 ) return(-1);
if ( counted_bars ==0 ) limit=Bars-1;
if ( counted_bars < 1 )
for(i=1;i<2*(MA_Length+ADX_Length+10);i++)
{
VMA=Close;
VarMA=Close;
MA=Close;
STR = High-Low;
sPDI = 0;
sMDI = 0;
ADX=0;
ADXR=0;
}
if(counted_bars>0) limit=Bars-counted_bars;
limit--;
for(i=limit; i>=0; i--)
{
double Hi = High;
double Hi1 = High;
double Lo = Low;
double Lo1 = Low;
double Close1= Close;
double Bulls = 0.5*(MathAbs(Hi-Hi1)+(Hi-Hi1));
double Bears = 0.5*(MathAbs(Lo1-Lo)+(Lo1-Lo));
if (Bulls > Bears) Bears = 0;
else
if (Bulls < Bears) Bulls = 0;
else
if (Bulls == Bears) {Bulls = 0;Bears = 0;}
sPDI = (Weighting*sPDI + Bulls)/(Weighting+1);//ma weighting
sMDI = (Weighting*sMDI + Bears)/(Weighting+1);//ma weighting
double TR = MathMax(Hi-Lo,Hi-Close1);
STR = (Weighting*STR + TR)/(Weighting+1);//ma weighting
if(STR>0 )
{
double PDI = sPDI/STR;
double MDI = sMDI/STR;
}
if((PDI + MDI) > 0)
double DX = MathAbs(PDI - MDI)/(PDI + MDI);
else DX = 0;
ADX = (Weighting*ADX + DX)/(Weighting+1);//ma weighting
double vADX = ADX;
double ADXmin = 1000000;
for (j=0; j<=ADX_Length-1;j++) ADXmin = MathMin(ADXmin,ADX);
double ADXmax = -1;
for (j=0; j<=ADX_Length-1;j++) ADXmax = MathMax(ADXmax,ADX);
double Diff = ADXmax - ADXmin;
if(Diff > 0) double Const = (vADX- ADXmin)/Diff; else Const = 0;
VarMA=((2-Const)*VarMA+Const*Close)/2;//Same equation but one less array, mod 10 Sept 2007.
}
for(j=limit; j>=0; j--) MA[j] = iMAOnArray(VarMA,0,MA_Length,0,MA_Mode,j);
//----
return(0);
}
//+------------------------------------------------------------------+
and this is mine
[PHP]
//+------------------------------------------------------------------+
//| VMA cross arrows.mq4 |
//| thefxpros@katamail.com |
//+------------------------------------------------------------------+
#property copyright "thefxpros"
#property link "thefxpros@katamail.com"
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 C'255,198,198'
#property indicator_color2 C'198,255,198'
#property indicator_color3 Crimson
#property indicator_color4 DarkGreen
#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 2
#property indicator_width4 2
//--------------------------------------------------------
extern int VMA1_ADXLenght = 2;
extern double VMA1_Weighting = 2.0;
extern int VMA1_Length = 1;
extern int VMA1_Mode = 1;
extern int VMA2_ADXLenght = 2;
extern double VMA2_Weighting = 3.0;
extern int VMA2_Length = 3;
extern int VMA2_Mode = 2;
//--------------------------------------------------------
double buffer1[];
double buffer2[];
double buffer3[];
double buffer4[];
//--------------------------------------------------------
int init()
{
SetIndexStyle (0,DRAW_HISTOGRAM);
SetIndexStyle (1,DRAW_HISTOGRAM);
SetIndexBuffer (0,buffer3);
SetIndexBuffer (1,buffer4);
SetIndexBuffer (2,buffer1);
SetIndexBuffer (3,buffer2);
return(0);
}
int deinit()
{
return(0);
}
//--------------------------------------------------------
int start()
{
int counted_bars=IndicatorCounted();
int limit,i;
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//--------------------------------------------------------
for(i=limit; i>=0; i--)
{
buffer1 = iCustom(NULL, 0, "MA - fatail vma 3", VMA1_ADXLenght, VMA1_Weighting, VMA1_Length, VMA1_Mode, i);
buffer2 = iCustom(NULL, 0, "MA - fatail vma 3", VMA1_ADXLenght, VMA2_Weighting, VMA2_Length, VMA2_Mode, i);
buffer3 = buffer1;
buffer4 = buffer2;
}
return(0);
}