コーディングのヘルプ - ページ 176 1...169170171172173174175176177178179180181182183...786 新しいコメント k3rn3l 2013.10.22 08:16 #1751 デフォルトのパラメータ、3.0と10 Mladen Rakic 2013.10.22 08:26 #1752 k3rn3l: デフォルトのパラメータ、3.0と10 その場合、以下の行を置き換えるだけです。 ExtMapBuffer1 = Close * Beta1 - iClose(Symbol2, NULL, iShift2) * Beta2;[/PHP] with this [PHP]ExtMapBuffer1 = iCustom(Symbol2,0,"Supertrend",3,10,0,iShift2); インジケーターの名前は "Supertrend "であると仮定しています。 k3rn3l 2013.10.22 08:34 #1753 スーパートレンドのコードをこのインディケータに統合したいのですが、統合されたスーパートレンドはExtMapBuffer1上で計算されます。 Mladen Rakic 2013.10.22 08:41 #1754 k3rn3l: スーパートレンドのコードをこのインディケータに統合したいのですが、スーパートレンドはExtMapBuffer1で計算されます。 k3rn3l 統合」の意味がよくわかりません。 もう少し説明していただけますか? k3rn3l 2013.10.22 09:52 #1755 こんな感じの意味です。 #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 DodgerBlue #property indicator_color2 Lime #property indicator_color3 Red double TrendUp[], TrendDown[], ExtMapBuffer1[]; int changeOfTrend; extern int Nbr_Periods = 10; extern double Multiplier = 3.0; extern double Beta1 = 1.0; extern string Symbol2 = "GER30"; extern double Beta2 = 1.0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,ExtMapBuffer1); SetIndexBuffer(1, TrendUp); SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 2); SetIndexBuffer(2, TrendDown); SetIndexStyle(2, DRAW_LINE, STYLE_SOLID, 2); IndicatorShortName(Symbol() + " " + Beta1 + " " + Symbol2 + " " + Beta2); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int limit, i, flag, flagh, trend[5000]; double up[5000], dn[5000], medianPrice, atr; 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; //Print(limit); //---- if(Bars<1) return(0); int j = Bars-counted_bars -1; while(j >=0) { int iShift2 = iBarShift(Symbol2, 0, Time[j], false); ExtMapBuffer1[j] = Close[j] * Beta1 - iClose(Symbol2, NULL, iShift2) * Beta2; for (i = Bars; i >= 0; i--) { TrendUp = EMPTY_VALUE; TrendDown = EMPTY_VALUE; atr = iATR(NULL, 0, Nbr_Periods, i); //Print("atr: "+atr); medianPrice = ExtMapBuffer1[j]/2; //Print("medianPrice: "+medianPrice); up=medianPrice+(Multiplier*atr); //Print("up: "+up); dn=medianPrice-(Multiplier*atr); //Print("dn: "+dn); trend=1; if (Close>up) { trend=1; if (trend == -1) changeOfTrend = 1; //Print("trend: "+trend); } else if (Close<dn) { trend=-1; if (trend == 1) changeOfTrend = 1; //Print("trend: "+trend); } else if (trend==1) { trend=1; changeOfTrend = 0; } else if (trend==-1) { trend=-1; changeOfTrend = 0; } if (trend0) { flag=1; //Print("flag: "+flag); } else { flag=0; //Print("flagh: "+flag); } if (trend>0 && trend<0) { flagh=1; //Print("flagh: "+flagh); } else { flagh=0; //Print("flagh: "+flagh); } if (trend>0 && dn<dn) dn=dn; if (trendup) up=up; if (flag==1) up=medianPrice+(Multiplier*atr); if (flagh==1) dn=medianPrice-(Multiplier*atr); //-- Draw the indicator if (trend==1) { TrendUp=dn; if (changeOfTrend == 1) { TrendUp = TrendDown; changeOfTrend = 0; } } else if (trend==-1) { TrendDown=up; if (changeOfTrend == 1) { TrendDown = TrendUp; changeOfTrend = 0; } } } WindowRedraw(); } //---- return(0); } //+------------------------------------------------------------------+ Coding help I want to use MQL4コースへようこそ Mladen Rakic 2013.10.22 09:56 #1756 k3rn3l: というような意味です。 #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 DodgerBlue #property indicator_color2 Lime #property indicator_color3 Red double TrendUp[], TrendDown[], ExtMapBuffer1[]; int changeOfTrend; extern int Nbr_Periods = 10; extern double Multiplier = 3.0; extern double Beta1 = 1.0; extern string Symbol2 = "GER30"; extern double Beta2 = 1.0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,ExtMapBuffer1); SetIndexBuffer(1, TrendUp); SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 2); SetIndexBuffer(2, TrendDown); SetIndexStyle(2, DRAW_LINE, STYLE_SOLID, 2); IndicatorShortName(Symbol() + " " + Beta1 + " " + Symbol2 + " " + Beta2); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int limit, i, flag, flagh, trend[5000]; double up[5000], dn[5000], medianPrice, atr; 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; //Print(limit); //---- if(Bars<1) return(0); int j = Bars-counted_bars -1; while(j >=0) { int iShift2 = iBarShift(Symbol2, 0, Time[j], false); ExtMapBuffer1[j] = Close[j] * Beta1 - iClose(Symbol2, NULL, iShift2) * Beta2; for (i = Bars; i >= 0; i--) { TrendUp = EMPTY_VALUE; TrendDown = EMPTY_VALUE; atr = iATR(NULL, 0, Nbr_Periods, i); //Print("atr: "+atr); medianPrice = ExtMapBuffer1[j]/2; //Print("medianPrice: "+medianPrice); up=medianPrice+(Multiplier*atr); //Print("up: "+up); dn=medianPrice-(Multiplier*atr); //Print("dn: "+dn); trend=1; if (Close>up) { trend=1; if (trend == -1) changeOfTrend = 1; //Print("trend: "+trend); } else if (Close<dn) { trend=-1; if (trend == 1) changeOfTrend = 1; //Print("trend: "+trend); } else if (trend==1) { trend=1; changeOfTrend = 0; } else if (trend==-1) { trend=-1; changeOfTrend = 0; } if (trend0) { flag=1; //Print("flag: "+flag); } else { flag=0; //Print("flagh: "+flag); } if (trend>0 && trend<0) { flagh=1; //Print("flagh: "+flagh); } else { flagh=0; //Print("flagh: "+flagh); } if (trend>0 && dn<dn) dn=dn; if (trendup) up=up; if (flag==1) up=medianPrice+(Multiplier*atr); if (flagh==1) dn=medianPrice-(Multiplier*atr); //-- Draw the indicator if (trend==1) { TrendUp=dn; if (changeOfTrend == 1) { TrendUp = TrendDown; changeOfTrend = 0; } } else if (trend==-1) { TrendDown=up; if (changeOfTrend == 1) { TrendDown = TrendUp; changeOfTrend = 0; } } } WindowRedraw(); } //---- return(0); } //+------------------------------------------------------------------+ 次に、別のバッファ (たとえば ExtMapBuffer2) を宣言し、iCustom() を 使用してスーパートレンドの値をその新しいバッファに取得します (次のようなものです)。 ExtMapBuffer2[i] =iCustom(Symbol2,0,"Supertrend",3,10,0,iShift2) のようにします。 k3rn3l 2013.10.22 10:55 #1757 ありがとうございます。 今、私はこれを持っています。あなたは私がエラーを修正するのを助けることができますか? #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 Yellow #property indicator_color2 FireBrick #property indicator_color3 Green #property indicator_color4 Blue #property indicator_width1 1 #property indicator_width2 2 #property indicator_width3 2 #property indicator_style1 STYLE_DOT // Indicator parameters extern int SuperTrend.Period=10; extern double SuperTrend.Multiplier=3.0; extern string Symbol2 = "GBPUSD"; // Global module varables double gadUpBuf[]; double gadDnBuf[]; double gadSuperTrend[]; double Spread[]; //----------------------------------------------------------------------------- // function: init() // Description: Custom indicator initialization function. //----------------------------------------------------------------------------- int init() { SetIndexStyle(0, DRAW_LINE); SetIndexBuffer(0, Spread); SetIndexStyle(1, DRAW_LINE); SetIndexBuffer(1, gadSuperTrend); SetIndexLabel(1, "SuperTrend"); SetIndexStyle(2, DRAW_LINE); SetIndexBuffer(2, gadDnBuf); SetIndexLabel(2, "SuperTrend Down"); SetIndexStyle(3, DRAW_LINE); SetIndexBuffer(3, gadUpBuf); SetIndexLabel(3, "SuperTrend Up"); IndicatorShortName(INDICATOR_NAME+"["+SuperTrend.Period+";"+DoubleToStr(SuperTrend.Multiplier,1)+"]"); return(0); } //----------------------------------------------------------------------------- // function: deinit() // Description: Custom indicator deinitialization function. //----------------------------------------------------------------------------- int deinit() { return (0); } ///----------------------------------------------------------------------------- // function: start() // Description: Custom indicator iteration function. //----------------------------------------------------------------------------- int start() { int iNewBars, iCountedBars, i; double dAtr,dUpperLevel, dLowerLevel; // Get unprocessed ticks iCountedBars=IndicatorCounted(); if(iCountedBars < 0) return (-1); if(iCountedBars>0) iCountedBars--; iNewBars=Bars-iCountedBars; Spread = Close / iClose(Symbol2, NULL, i) ; for(i=iNewBars; i>=0; i--) { // Calc SuperTrend dAtr = iATR(NULL, 0, SuperTrend.Period, i); dUpperLevel=Spread/2+SuperTrend.Multiplier*dAtr; dLowerLevel=Spread/2-SuperTrend.Multiplier*dAtr; // Set supertrend levels if (Close>gadSuperTrend && Close<=gadSuperTrend) { gadSuperTrend=dLowerLevel; } else if (Close=gadSuperTrend) { gadSuperTrend=dUpperLevel; } else if (gadSuperTrend<dLowerLevel) gadSuperTrend=dLowerLevel; else if (gadSuperTrend>dUpperLevel) gadSuperTrend=dUpperLevel; else gadSuperTrend=gadSuperTrend; // Draw SuperTrend lines gadUpBuf=EMPTY_VALUE; gadDnBuf=EMPTY_VALUE; if (Close>gadSuperTrend || (Close==gadSuperTrend && Close>gadSuperTrend)) gadUpBuf=gadSuperTrend; else if (Close<gadSuperTrend || (Close==gadSuperTrend && Close<gadSuperTrend)) gadDnBuf=gadSuperTrend; } return(0); } //+------------------------------------------------------------------+ Coding help Please fix this indicator [警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 Mladen Rakic 2013.10.22 12:36 #1758 k3rn3l: ありがとうございます。 今、私はこれを持っています。あなたは私がエラーを修正するのに役立ちますでしょうか? #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 Yellow #property indicator_color2 FireBrick #property indicator_color3 Green #property indicator_color4 Blue #property indicator_width1 1 #property indicator_width2 2 #property indicator_width3 2 #property indicator_style1 STYLE_DOT // Indicator parameters extern int SuperTrend.Period=10; extern double SuperTrend.Multiplier=3.0; extern string Symbol2 = "GBPUSD"; // Global module varables double gadUpBuf[]; double gadDnBuf[]; double gadSuperTrend[]; double Spread[]; //----------------------------------------------------------------------------- // function: init() // Description: Custom indicator initialization function. //----------------------------------------------------------------------------- int init() { SetIndexStyle(0, DRAW_LINE); SetIndexBuffer(0, Spread); SetIndexStyle(1, DRAW_LINE); SetIndexBuffer(1, gadSuperTrend); SetIndexLabel(1, "SuperTrend"); SetIndexStyle(2, DRAW_LINE); SetIndexBuffer(2, gadDnBuf); SetIndexLabel(2, "SuperTrend Down"); SetIndexStyle(3, DRAW_LINE); SetIndexBuffer(3, gadUpBuf); SetIndexLabel(3, "SuperTrend Up"); IndicatorShortName(INDICATOR_NAME+"["+SuperTrend.Period+";"+DoubleToStr(SuperTrend.Multiplier,1)+"]"); return(0); } //----------------------------------------------------------------------------- // function: deinit() // Description: Custom indicator deinitialization function. //----------------------------------------------------------------------------- int deinit() { return (0); } ///----------------------------------------------------------------------------- // function: start() // Description: Custom indicator iteration function. //----------------------------------------------------------------------------- int start() { int iNewBars, iCountedBars, i; double dAtr,dUpperLevel, dLowerLevel; // Get unprocessed ticks iCountedBars=IndicatorCounted(); if(iCountedBars < 0) return (-1); if(iCountedBars>0) iCountedBars--; iNewBars=Bars-iCountedBars; Spread = Close / iClose(Symbol2, NULL, i) ; for(i=iNewBars; i>=0; i--) { // Calc SuperTrend dAtr = iATR(NULL, 0, SuperTrend.Period, i); dUpperLevel=Spread/2+SuperTrend.Multiplier*dAtr; dLowerLevel=Spread/2-SuperTrend.Multiplier*dAtr; // Set supertrend levels if (Close>gadSuperTrend && Close<=gadSuperTrend) { gadSuperTrend=dLowerLevel; } else if (Close=gadSuperTrend) { gadSuperTrend=dUpperLevel; } else if (gadSuperTrend<dLowerLevel) gadSuperTrend=dLowerLevel; else if (gadSuperTrend>dUpperLevel) gadSuperTrend=dUpperLevel; else gadSuperTrend=gadSuperTrend; // Draw SuperTrend lines gadUpBuf=EMPTY_VALUE; gadDnBuf=EMPTY_VALUE; if (Close>gadSuperTrend || (Close==gadSuperTrend && Close>gadSuperTrend)) gadUpBuf=gadSuperTrend; else if (Close<gadSuperTrend || (Close==gadSuperTrend && Close<gadSuperTrend)) gadDnBuf=gadSuperTrend; } return(0); } //+------------------------------------------------------------------+ 申し訳ありませんが、私は本当にあなたが作ろうとしているのか分からない(それはあなたがスプレッドのいくつかの種類のスーパートレンドを計算しようとしているように思えるが、私はコードから伝えることはできません)。 スーパートレンドのインジケータ自体を変更しようとしているようなので、そこから始めてはどうでしょうか? k3rn3l 2013.10.22 12:50 #1759 はい、私がやろうとしていることです。 1) 2つの資産間のスプレッドのインジケータを作成する。 2) スプレッドのSupertrendを計算する。 スーパートレンドはメインチャートにロードされ、私が作成したスプレッドにはロードされないので、iCustomで使用することはできません。 そこで、このような方法(スプレッドとスーパートレンドのすべてのコードを1つのインジケータに実装する)を試してみました。 Mladen Rakic 2013.10.22 12:58 #1760 k3rn3l: そうですね、それは私が心がけていることです。1) 2つの資産間のスプレッドの指標を作る 2) スプレッドのSupertrendを計算する。 スーパートレンドはメインチャートに読み込まれ、自分で作成したスプレッドには読み込まれないため、iCustomで使用することができない。 そこで、私はこのような方法(スプレッドとスーパートレンドのすべてのコードを1つのインジケータに実装する)を試してみました。 k3rn3l それはできません(スーパートレンドはatrなどに依存するため、そのスプレッドのatrも計算する必要があり、それは不可能です)。また、あなたは現在の終値とそのスプレッドの 値を比較していますが、これは論理的ではありません。これは、そのatrを使用した結果ですが、私が言ったように、それはオリジナルのスーパートレンドで持っているような意味を持ちませんし、全く異なるスケールの値(例えば、スプレッドと比較してクローズ)から値を比較することはできません。 ファイル: _test.gif 29 kb _test.mq4 4 kb 1...169170171172173174175176177178179180181182183...786 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
デフォルトのパラメータ、3.0と10
デフォルトのパラメータ、3.0と10
その場合、以下の行を置き換えるだけです。
with this
[PHP]ExtMapBuffer1 = iCustom(Symbol2,0,"Supertrend",3,10,0,iShift2);インジケーターの名前は "Supertrend "であると仮定しています。
スーパートレンドのコードをこのインディケータに統合したいのですが、統合されたスーパートレンドはExtMapBuffer1上で計算されます。
スーパートレンドのコードをこのインディケータに統合したいのですが、スーパートレンドはExtMapBuffer1で計算されます。
k3rn3l
統合」の意味がよくわかりません。
もう少し説明していただけますか?
こんな感じの意味です。
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 DodgerBlue
#property indicator_color2 Lime
#property indicator_color3 Red
double TrendUp[], TrendDown[], ExtMapBuffer1[];
int changeOfTrend;
extern int Nbr_Periods = 10;
extern double Multiplier = 3.0;
extern double Beta1 = 1.0;
extern string Symbol2 = "GER30";
extern double Beta2 = 1.0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexBuffer(1, TrendUp);
SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 2);
SetIndexBuffer(2, TrendDown);
SetIndexStyle(2, DRAW_LINE, STYLE_SOLID, 2);
IndicatorShortName(Symbol() + " " + Beta1 + " " + Symbol2 + " " + Beta2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int limit, i, flag, flagh, trend[5000];
double up[5000], dn[5000], medianPrice, atr;
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;
//Print(limit);
//----
if(Bars<1) return(0);
int j = Bars-counted_bars -1;
while(j >=0) {
int iShift2 = iBarShift(Symbol2, 0, Time[j], false);
ExtMapBuffer1[j] = Close[j] * Beta1 - iClose(Symbol2, NULL, iShift2) * Beta2;
for (i = Bars; i >= 0; i--) {
TrendUp = EMPTY_VALUE;
TrendDown = EMPTY_VALUE;
atr = iATR(NULL, 0, Nbr_Periods, i);
//Print("atr: "+atr);
medianPrice = ExtMapBuffer1[j]/2;
//Print("medianPrice: "+medianPrice);
up=medianPrice+(Multiplier*atr);
//Print("up: "+up);
dn=medianPrice-(Multiplier*atr);
//Print("dn: "+dn);
trend=1;
if (Close>up) {
trend=1;
if (trend == -1) changeOfTrend = 1;
//Print("trend: "+trend);
}
else if (Close<dn) {
trend=-1;
if (trend == 1) changeOfTrend = 1;
//Print("trend: "+trend);
}
else if (trend==1) {
trend=1;
changeOfTrend = 0;
}
else if (trend==-1) {
trend=-1;
changeOfTrend = 0;
}
if (trend0) {
flag=1;
//Print("flag: "+flag);
}
else {
flag=0;
//Print("flagh: "+flag);
}
if (trend>0 && trend<0) {
flagh=1;
//Print("flagh: "+flagh);
}
else {
flagh=0;
//Print("flagh: "+flagh);
}
if (trend>0 && dn<dn)
dn=dn;
if (trendup)
up=up;
if (flag==1)
up=medianPrice+(Multiplier*atr);
if (flagh==1)
dn=medianPrice-(Multiplier*atr);
//-- Draw the indicator
if (trend==1) {
TrendUp=dn;
if (changeOfTrend == 1) {
TrendUp = TrendDown;
changeOfTrend = 0;
}
}
else if (trend==-1) {
TrendDown=up;
if (changeOfTrend == 1) {
TrendDown = TrendUp;
changeOfTrend = 0;
}
}
}
WindowRedraw();
}
//----
return(0);
}
//+------------------------------------------------------------------+
というような意味です。
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 DodgerBlue
#property indicator_color2 Lime
#property indicator_color3 Red
double TrendUp[], TrendDown[], ExtMapBuffer1[];
int changeOfTrend;
extern int Nbr_Periods = 10;
extern double Multiplier = 3.0;
extern double Beta1 = 1.0;
extern string Symbol2 = "GER30";
extern double Beta2 = 1.0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexBuffer(1, TrendUp);
SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 2);
SetIndexBuffer(2, TrendDown);
SetIndexStyle(2, DRAW_LINE, STYLE_SOLID, 2);
IndicatorShortName(Symbol() + " " + Beta1 + " " + Symbol2 + " " + Beta2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int limit, i, flag, flagh, trend[5000];
double up[5000], dn[5000], medianPrice, atr;
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;
//Print(limit);
//----
if(Bars<1) return(0);
int j = Bars-counted_bars -1;
while(j >=0) {
int iShift2 = iBarShift(Symbol2, 0, Time[j], false);
ExtMapBuffer1[j] = Close[j] * Beta1 - iClose(Symbol2, NULL, iShift2) * Beta2;
for (i = Bars; i >= 0; i--) {
TrendUp = EMPTY_VALUE;
TrendDown = EMPTY_VALUE;
atr = iATR(NULL, 0, Nbr_Periods, i);
//Print("atr: "+atr);
medianPrice = ExtMapBuffer1[j]/2;
//Print("medianPrice: "+medianPrice);
up=medianPrice+(Multiplier*atr);
//Print("up: "+up);
dn=medianPrice-(Multiplier*atr);
//Print("dn: "+dn);
trend=1;
if (Close>up) {
trend=1;
if (trend == -1) changeOfTrend = 1;
//Print("trend: "+trend);
}
else if (Close<dn) {
trend=-1;
if (trend == 1) changeOfTrend = 1;
//Print("trend: "+trend);
}
else if (trend==1) {
trend=1;
changeOfTrend = 0;
}
else if (trend==-1) {
trend=-1;
changeOfTrend = 0;
}
if (trend0) {
flag=1;
//Print("flag: "+flag);
}
else {
flag=0;
//Print("flagh: "+flag);
}
if (trend>0 && trend<0) {
flagh=1;
//Print("flagh: "+flagh);
}
else {
flagh=0;
//Print("flagh: "+flagh);
}
if (trend>0 && dn<dn)
dn=dn;
if (trendup)
up=up;
if (flag==1)
up=medianPrice+(Multiplier*atr);
if (flagh==1)
dn=medianPrice-(Multiplier*atr);
//-- Draw the indicator
if (trend==1) {
TrendUp=dn;
if (changeOfTrend == 1) {
TrendUp = TrendDown;
changeOfTrend = 0;
}
}
else if (trend==-1) {
TrendDown=up;
if (changeOfTrend == 1) {
TrendDown = TrendUp;
changeOfTrend = 0;
}
}
}
WindowRedraw();
}
//----
return(0);
}
//+------------------------------------------------------------------+
次に、別のバッファ (たとえば ExtMapBuffer2) を宣言し、iCustom() を 使用してスーパートレンドの値をその新しいバッファに取得します (次のようなものです)。
ExtMapBuffer2[i] =iCustom(Symbol2,0,"Supertrend",3,10,0,iShift2) のようにします。
ありがとうございます。
今、私はこれを持っています。あなたは私がエラーを修正するのを助けることができますか?![](https://c.mql5.com/forextsd/smiles/smile.png)
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Yellow
#property indicator_color2 FireBrick
#property indicator_color3 Green
#property indicator_color4 Blue
#property indicator_width1 1
#property indicator_width2 2
#property indicator_width3 2
#property indicator_style1 STYLE_DOT
// Indicator parameters
extern int SuperTrend.Period=10;
extern double SuperTrend.Multiplier=3.0;
extern string Symbol2 = "GBPUSD";
// Global module varables
double gadUpBuf[];
double gadDnBuf[];
double gadSuperTrend[];
double Spread[];
//-----------------------------------------------------------------------------
// function: init()
// Description: Custom indicator initialization function.
//-----------------------------------------------------------------------------
int init() {
SetIndexStyle(0, DRAW_LINE);
SetIndexBuffer(0, Spread);
SetIndexStyle(1, DRAW_LINE);
SetIndexBuffer(1, gadSuperTrend);
SetIndexLabel(1, "SuperTrend");
SetIndexStyle(2, DRAW_LINE);
SetIndexBuffer(2, gadDnBuf);
SetIndexLabel(2, "SuperTrend Down");
SetIndexStyle(3, DRAW_LINE);
SetIndexBuffer(3, gadUpBuf);
SetIndexLabel(3, "SuperTrend Up");
IndicatorShortName(INDICATOR_NAME+"["+SuperTrend.Period+";"+DoubleToStr(SuperTrend.Multiplier,1)+"]");
return(0);
}
//-----------------------------------------------------------------------------
// function: deinit()
// Description: Custom indicator deinitialization function.
//-----------------------------------------------------------------------------
int deinit() {
return (0);
}
///-----------------------------------------------------------------------------
// function: start()
// Description: Custom indicator iteration function.
//-----------------------------------------------------------------------------
int start() {
int iNewBars, iCountedBars, i;
double dAtr,dUpperLevel, dLowerLevel;
// Get unprocessed ticks
iCountedBars=IndicatorCounted();
if(iCountedBars < 0) return (-1);
if(iCountedBars>0) iCountedBars--;
iNewBars=Bars-iCountedBars;
Spread = Close / iClose(Symbol2, NULL, i) ;
for(i=iNewBars; i>=0; i--) {
// Calc SuperTrend
dAtr = iATR(NULL, 0, SuperTrend.Period, i);
dUpperLevel=Spread/2+SuperTrend.Multiplier*dAtr;
dLowerLevel=Spread/2-SuperTrend.Multiplier*dAtr;
// Set supertrend levels
if (Close>gadSuperTrend && Close<=gadSuperTrend) {
gadSuperTrend=dLowerLevel;
}
else if (Close=gadSuperTrend) {
gadSuperTrend=dUpperLevel;
}
else if (gadSuperTrend<dLowerLevel)
gadSuperTrend=dLowerLevel;
else if (gadSuperTrend>dUpperLevel)
gadSuperTrend=dUpperLevel;
else
gadSuperTrend=gadSuperTrend;
// Draw SuperTrend lines
gadUpBuf=EMPTY_VALUE;
gadDnBuf=EMPTY_VALUE;
if (Close>gadSuperTrend || (Close==gadSuperTrend && Close>gadSuperTrend))
gadUpBuf=gadSuperTrend;
else if (Close<gadSuperTrend || (Close==gadSuperTrend && Close<gadSuperTrend))
gadDnBuf=gadSuperTrend;
}
return(0);
}
//+------------------------------------------------------------------+
ありがとうございます。
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Yellow
#property indicator_color2 FireBrick
#property indicator_color3 Green
#property indicator_color4 Blue
#property indicator_width1 1
#property indicator_width2 2
#property indicator_width3 2
#property indicator_style1 STYLE_DOT
// Indicator parameters
extern int SuperTrend.Period=10;
extern double SuperTrend.Multiplier=3.0;
extern string Symbol2 = "GBPUSD";
// Global module varables
double gadUpBuf[];
double gadDnBuf[];
double gadSuperTrend[];
double Spread[];
//-----------------------------------------------------------------------------
// function: init()
// Description: Custom indicator initialization function.
//-----------------------------------------------------------------------------
int init() {
SetIndexStyle(0, DRAW_LINE);
SetIndexBuffer(0, Spread);
SetIndexStyle(1, DRAW_LINE);
SetIndexBuffer(1, gadSuperTrend);
SetIndexLabel(1, "SuperTrend");
SetIndexStyle(2, DRAW_LINE);
SetIndexBuffer(2, gadDnBuf);
SetIndexLabel(2, "SuperTrend Down");
SetIndexStyle(3, DRAW_LINE);
SetIndexBuffer(3, gadUpBuf);
SetIndexLabel(3, "SuperTrend Up");
IndicatorShortName(INDICATOR_NAME+"["+SuperTrend.Period+";"+DoubleToStr(SuperTrend.Multiplier,1)+"]");
return(0);
}
//-----------------------------------------------------------------------------
// function: deinit()
// Description: Custom indicator deinitialization function.
//-----------------------------------------------------------------------------
int deinit() {
return (0);
}
///-----------------------------------------------------------------------------
// function: start()
// Description: Custom indicator iteration function.
//-----------------------------------------------------------------------------
int start() {
int iNewBars, iCountedBars, i;
double dAtr,dUpperLevel, dLowerLevel;
// Get unprocessed ticks
iCountedBars=IndicatorCounted();
if(iCountedBars < 0) return (-1);
if(iCountedBars>0) iCountedBars--;
iNewBars=Bars-iCountedBars;
Spread = Close / iClose(Symbol2, NULL, i) ;
for(i=iNewBars; i>=0; i--) {
// Calc SuperTrend
dAtr = iATR(NULL, 0, SuperTrend.Period, i);
dUpperLevel=Spread/2+SuperTrend.Multiplier*dAtr;
dLowerLevel=Spread/2-SuperTrend.Multiplier*dAtr;
// Set supertrend levels
if (Close>gadSuperTrend && Close<=gadSuperTrend) {
gadSuperTrend=dLowerLevel;
}
else if (Close=gadSuperTrend) {
gadSuperTrend=dUpperLevel;
}
else if (gadSuperTrend<dLowerLevel)
gadSuperTrend=dLowerLevel;
else if (gadSuperTrend>dUpperLevel)
gadSuperTrend=dUpperLevel;
else
gadSuperTrend=gadSuperTrend;
// Draw SuperTrend lines
gadUpBuf=EMPTY_VALUE;
gadDnBuf=EMPTY_VALUE;
if (Close>gadSuperTrend || (Close==gadSuperTrend && Close>gadSuperTrend))
gadUpBuf=gadSuperTrend;
else if (Close<gadSuperTrend || (Close==gadSuperTrend && Close<gadSuperTrend))
gadDnBuf=gadSuperTrend;
}
return(0);
}
//+------------------------------------------------------------------+
申し訳ありませんが、私は本当にあなたが作ろうとしているのか分からない(それはあなたがスプレッドのいくつかの種類のスーパートレンドを計算しようとしているように思えるが、私はコードから伝えることはできません)。
スーパートレンドのインジケータ自体を変更しようとしているようなので、そこから始めてはどうでしょうか?
はい、私がやろうとしていることです。
1) 2つの資産間のスプレッドのインジケータを作成する。
2) スプレッドのSupertrendを計算する。
スーパートレンドはメインチャートにロードされ、私が作成したスプレッドにはロードされないので、iCustomで使用することはできません。
そこで、このような方法(スプレッドとスーパートレンドのすべてのコードを1つのインジケータに実装する)を試してみました。
そうですね、それは私が心がけていることです。
1) 2つの資産間のスプレッドの指標を作る
2) スプレッドのSupertrendを計算する。
スーパートレンドはメインチャートに読み込まれ、自分で作成したスプレッドには読み込まれないため、iCustomで使用することができない。
そこで、私はこのような方法(スプレッドとスーパートレンドのすべてのコードを1つのインジケータに実装する)を試してみました。k3rn3l
それはできません(スーパートレンドはatrなどに依存するため、そのスプレッドのatrも計算する必要があり、それは不可能です)。また、あなたは現在の終値とそのスプレッドの 値を比較していますが、これは論理的ではありません。これは、そのatrを使用した結果ですが、私が言ったように、それはオリジナルのスーパートレンドで持っているような意味を持ちませんし、全く異なるスケールの値(例えば、スプレッドと比較してクローズ)から値を比較することはできません。