int init()// Специальная функция init(){SetIndexBuffer(0, Buf_MA40);// Назначение массива буферуSetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);// Стиль линииSetIndexBuffer(1, Buf_MA20);// Назначение массива буферуSetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);// Стиль линииSetIndexBuffer(2, Buf_ROC_MA40);// Назначение массива буферуSetIndexStyle(2,DRAW_LINE,STYLE_SOLID,2);// Стиль линииSetIndexBuffer(3, Buf_ROC_MA40);// Назначение массива буферуSetIndexStyle(3,DRAW_LINE,STYLE_SOLID,2);// Стиль линииreturn;// Выход из спец. ф-ии init()}
助けてください!
4行とも同等のコードなのに、MAHが2行しか表示されないのですが、何が問題なのでしょうか?
#property indicator_separate_window// インジケータは別ウィンドウに描画されます。
#property indicator_buffers 4 // バッファの数
#property indicator_color1 青 // 最初の行の色
#property indicator_color2 赤 // 2行目の色
#プロパティ indicator_color3 Olive
#プロパティ indicator_color4 Teal
double Buf_ROC_MA40[],Buf_ROC_MA20[],Buf_MA40[],Buf_MA20[]; // 配列宣言(インジケータバッファの場合)
//--------------------------------------------------------------------
int init() // 特殊関数 init()
{
SetIndexBuffer(0,Buf_MA40); // バッファに配列を代入する。
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);// ラインスタイル
SetIndexBuffer(1,Buf_MA20); // バッファに配列を代入する。
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);// ラインのスタイル
SetIndexBuffer(3,Buf_ROC_MA40); // バッファに配列を代入する。
SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,2);// ラインのスタイル
SetIndexBuffer(4,Buf_ROC_MA40); // バッファに配列を代入する。
SetIndexStyle(4,DRAW_LINE,STYLE_SOLID,2);// ラインスタイル
return; // 特殊な init() 関数を終了します。
}
//--------------------------------------------------------------------
int start() // 特殊関数 start()
{
int i, // バーインデックス
歴史=3000年。
counted_bars; // 計算したバーの本数
double ma20,ma40,MA40[],MA20[],MA40_s[],MA20_s[],ma40_s,ma20_s,ROC_MA40[],ROC_MA20[];
//--------------------------------------------------------------------
// Counted_bars=IndicatorCounted(); // カウントされたバーの本数
i=Bars;//Counted_bars-1; // カウントされていない最初の1つのインデックス
while(i>=0) //カウントされていないバーを循環させる
{
ma20=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i);
ma20_s=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i+20);
ma40=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i);
ma40_s=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i+40);
Alert("ma20=",ma20, " ma20_s=",ma20_s, " ma40_s=",ma40_s, " ma40=",ma40);
MA40_s[i]=ma40_s;
MA40[i]=ma40です。
MA20[i]=ma20;
MA20_s[i]=ma20_s;
Buf_MA40[i]=ma40。
Buf_MA20[i]=ma20。
ROC_MA40[i]=MA40[i]-MA40_s[i];
Buf_ROC_MA40[i]=ROC_MA40[i];
ROC_MA20[i]=MA20[i]-MA20_s[i];
Buf_ROC_MA20[i]=ROC_MA20[i];
i--;
// 次のバーインデックスの計算
}
//--------------------------------------------------------------------
return; // 特殊関数 start() を終了する。
}
1.デバッガを勧めてください(変数の中間値を見ることができるように、ステップバイステップのデバッガが望ましいです)。
2.アラートを使うと不便なので、デバッグデータをどこに(どのウィンドウに)表示させたらいいのでしょうか。
3) MQLのバージョンを更新するにはどうすればよいですか?
アドバイスお願いします
Expert Advisorで欧州時間のみ取引する方法を教えてください。
助けてください!
4行とも同等のコードなのに、MAが2行しか出力されないのですが、何が問題なのでしょうか?
1つだけ間違いを見つけた。バッファー1の次はバッファー3。Buffer 2 はスキップされました。
ただ、マッシュと差分を1つのウィンドウで出力してはいけないのです。1桁以上の差があるのです。
アドバイスお願いします
欧州時間のみEAで取引するにはどうすればよいですか?
モジュールの最初にstartと入れるだけ
if(Hour()<7 || Hour()>15)return(0)。
もう一度コードを見てください。 新たに受信した値のスケールが全く違うので、MAを削除しました。
それでも何も表示されない。
#property indicator_separate_window// インジケータは別ウィンドウに描画されます。
#property indicator_buffers 2 // バッファの数
#property indicator_color1 青 // 最初の行の色
#property indicator_color2 赤色 //2行目の色
//#property indicator_color3 Olive
//#property indicator_color4 ティール色
double Buf_ROC_MA40[],Buf_ROC_MA20[],Buf_MA40[],Buf_MA20[]; // 配列の宣言(インジケータバッファの場合)
//--------------------------------------------------------------------
int init() // 特殊関数 init()
{
//SetIndexBuffer(0,Buf_MA40); // バッファに配列を代入する。
//SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);// ラインスタイル
//SetIndexBuffer(1,Buf_MA20); // バッファに配列を代入する。
//SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);// ラインのスタイル
SetIndexBuffer(0,Buf_ROC_MA40); // バッファに配列を代入する。
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);// ラインのスタイル
SetIndexBuffer(1,Buf_ROC_MA20); // バッファに配列を代入する。
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);// ラインのスタイル
return; // 特殊な init() 関数を終了します。
}
//--------------------------------------------------------------------
int start() // 特殊関数 start()
{
int i, // バーインデックス
歴史=3000年。
counted_bars; // 計算したバーの本数
double ma20,ma40,MA40[],MA20[],MA40_s[],MA20_s[],ma40_s,ma20_s,ROC_MA40[],ROC_MA20[];
//--------------------------------------------------------------------
// Counted_bars=IndicatorCounted(); // カウントされたバーの本数
i=Bars;//Counted_bars-1; // カウントされていない最初の1つのインデックス
while(i>=0) //カウントされていないバーを循環させる
{
ma20=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i);
ma20_s=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i+20);
ma40=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i);
ma40_s=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i+40);
MA40_s[i]=ma40_s;
MA40[i]=ma40です。
MA20[i]=ma20;
MA20_s[i]=ma20_s;
Buf_MA40[i]=ma40。
Buf_MA20[i]=ma20。
ROC_MA40[i]=MA40[i]-MA40_s[i];
Buf_ROC_MA40[i]=ROC_MA40[i];
ROC_MA20[i]=MA20[i]-MA20_s[i];
Buf_ROC_MA20[i]=ROC_MA20[i];
i--;
//次のバーインデックスを計算する
}
//--------------------------------------------------------------------
return; // 特殊関数 start() を終了する。
}
もう一度コードを見てください。 新たに受信した値のスケールが全く違うので、MAを削除しました。
それでも何も表示されない。
#property indicator_separate_window // インジケータは別ウィンドウに描画されます。
#property indicator_buffers 2 // バッファの数
#property indicator_color1 青 // 最初の行の色
#property indicator_color2 赤色 //2行目の色
//#property indicator_color3 Olive
//#property indicator_color4 ティール色
double Buf_ROC_MA40[],Buf_ROC_MA20[],Buf_MA40[],Buf_MA20[]; // 配列の宣言(インジケータバッファの場合)
//--------------------------------------------------------------------
int init() // 特殊関数 init()
{
//SetIndexBuffer(0,Buf_MA40); // バッファに配列を代入する。
//SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);// ラインスタイル
//SetIndexBuffer(1,Buf_MA20); // バッファに配列を代入する。
//SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);// ラインのスタイル
SetIndexBuffer(0,Buf_ROC_MA40); // バッファに配列を代入する。
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);// ラインのスタイル
SetIndexBuffer(1,Buf_ROC_MA20); // バッファに配列を代入する。
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);// ラインのスタイル
return; // 特殊な init() 関数を終了します。
}
//--------------------------------------------------------------------
int start() // 特殊関数 start()
{
int i, // バーインデックス
歴史=3000年。
counted_bars; // 計算したバーの本数
double ma20,ma40,MA40[],MA20[],MA40_s[],MA20_s[],ma40_s,ma20_s,ROC_MA40[],ROC_MA20[];
//--------------------------------------------------------------------
// Counted_bars=IndicatorCounted(); // カウントされたバーの本数
i=Bars;//Counted_bars-1; // カウントされていない最初の1つのインデックス
while(i>=0) //カウントされていないバーを循環させる
{
ma20=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i);
ma20_s=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i+20);
ma40=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i);
ma40_s=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i+40);
MA40_s[i]=ma40_s;
MA40[i]=ma40です。
MA20[i]=ma20;
MA20_s[i]=ma20_s;
Buf_MA40[i]=ma40。
Buf_MA20[i]=ma20。
ROC_MA40[i]=MA40[i]-MA40_s[i];
Buf_ROC_MA40[i]=ROC_MA40[i];
ROC_MA20[i]=MA20[i]-MA20_s[i];
Buf_ROC_MA20[i]=ROC_MA20[i];
i--;
// 次のバーインデックスの計算
}
//--------------------------------------------------------------------
return; // 特殊関数 start() を終了する。
}
エラーが多すぎる。
主に配列を使った作業でエラーが発生する。
この問題を解決するのを助けてください - 買い/売りシグナルがあり、EAは取引を開始し、利益とストップを設定します。また、同じローソク足でストップで取引が終了した場合、アドバイザーは再び取引を開始しますが、私はそれが開かないようにしたい、つまり、一つのシグナルで一つの取引が開かれました。
どうすればいいのか?
どうすればいいのか?
最後の注文の終了時刻は、現在のバーの開始時刻より短くなければなりません。
そうでない場合は、取引を開始しないでください。
最後の注文の終了時刻は、現在のバーの開始時刻より短くなければなりません。
そうでない場合は、取引を開始しない。
>> 混乱しています。
さて、少なくとも1つの取引があるまでエントリーしないと書く条件であれば、彼はどのように最初の取引を開くのでしょうか?