//+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ intOnCalculate(constint rates_total, constint prev_calculated, constdatetime &time[], constdouble &open[], constdouble &high[], constdouble &low[], constdouble &close[], constlong &tick_volume[], constlong &volume[], constint &spread[]) { //--- if(rates_total<1) return(0); // проверка достаточности данных для расчёта индикатора, если не достаточно - выходим // если для расчёта требуются некое количество баров слева от индекса цикла, ... // ... то проверять нужно это количество, а не 1
//--- Действия для полного перерасчёта индикатора int limit=rates_total-prev_calculated; // количество посчитанных уже баров if(limit>1) { // если количество больше 1, значит имеем новые данные, и нужно полностью пересчитать индикатор limit=rates_total-1; // задаём количество требуемых для расчёта баров равным количеству баров в истории, // если для расчёта требуются некое количество баров слева от индекса цикла, ... // ... то это количество тоже нужно вычесть из rates_total чтобы не выйти за пределы массива // так же тут нужно при необходимости произвести инициализацию буферов индикатора }
//--- Основной цикл индикатора for(int i=limit; i>=0; i--) { // тут выполняем нужные расчёты и записываем их результат в нужные буферы, например: ExtMapBuffer[i]=(open[i]+high[i]+low[i]+close[i])/4.0; // Выведем на график среднюю цену каждой свечи (OHLC/4.0) }
//--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
現在の価格を知るには、いくつかの方法があります。
1.任意のシンボルについて:保証された現在の価格を取得したい場合は、使用する前に正しい識別子でSymbolInfoDouble()を呼び出してください。
2.現在のシンボルについて、定義済みの変数BidとAskを通じて現在の価格を取得することもできます。これらは古くなる可能性があるので、OnTick()が実行されている場合は、RefreshRates()でリフレッシュする必要があります。
"possible loss of data due to type conversion"
この警告を克服するにはどうしたらよいですか?
Compiler warning:
"possible loss of data due to type conversion" この警告はどのようにすれば克服できますか?
関数が返す値の型を正確に把握し、明示的な変換を行う必要があります。https://www.mql5.com/ru/docs/basis/types/casting
ウィザードで、計算されたデータを書き込むインジケータ・バッファを設定していないのでしょう。
しかし、ほとんどの指標の基本原理は次のとおりです。
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
if(rates_total<1) return(0); // проверка достаточности данных для расчёта индикатора, если не достаточно - выходим
// если для расчёта требуются некое количество баров слева от индекса цикла, ...
// ... то проверять нужно это количество, а не 1
//--- Действия для полного перерасчёта индикатора
int limit=rates_total-prev_calculated; // количество посчитанных уже баров
if(limit>1) { // если количество больше 1, значит имеем новые данные, и нужно полностью пересчитать индикатор
limit=rates_total-1; // задаём количество требуемых для расчёта баров равным количеству баров в истории,
// если для расчёта требуются некое количество баров слева от индекса цикла, ...
// ... то это количество тоже нужно вычесть из rates_total чтобы не выйти за пределы массива
// так же тут нужно при необходимости произвести инициализацию буферов индикатора
}
//--- Основной цикл индикатора
for(int i=limit; i>=0; i--) {
// тут выполняем нужные расчёты и записываем их результат в нужные буферы, например:
ExtMapBuffer[i]=(open[i]+high[i]+low[i]+close[i])/4.0; // Выведем на график среднюю цену каждой свечи (OHLC/4.0)
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
Artemさん、コンパイラがエラーになりました。'ExtMapBuffer' - 未宣言の識別子
だから、このバッファを入れたんです。テンプレートを再作成する必要がありますが、この単純な動作にもっと責任を持ち、「でも、ウィザードは私に何を求め、何を必要としているのだろう?
こんにちは!4ヶ月ほど前から、Kovalevさんのチュートリアルを参考にMQL4の勉強を始めました。動画もありますよ。ビデオを見て、チュートリアルを勉強して、そこで使われているコードをコピーしています。 もちろん、理論はたくさん学びましたが、自分でコードを書くことはできません。これは非常に深刻な問題で、マスターするには時間がかかることは理解しています。しかし、私は練習が必要なことをよく理解しています。簡単なタスクを書き、誰かがそれをチェックすることで、私はさらに前進することができます!もう一つの問題は、本とビデオが更新されたことです。本からコードを繰り返し、コンパイルしてもエラーが起こり、私は新しい門で羊を見ているようです・・・それが悲しいのです
一度、ドキュメントを読んでみてください。教科書が古くなっているところがある。ドキュメントがその手助けをしてくれるでしょう。課題については......教科書に書かれているのと同じ課題を解いてください。問題を読み、解決策を見る、それを繰り返す。といった具合に、コツがつかめるまで。できるだけ自分で実装できるようになりたい課題に近いものを取り上げるとよいでしょう。
もちろん、すべてIMHOです。
私の場合、問題なくコンパイルできます。
では、なぜそのようなものが差別化されないのか、その理由を教えてください。
オブジェクトタイプを変更すると、プロパティは2つのラベルまたはトレンドラインで折りたたまれます
一度、ドキュメントを読んでみてください。教科書が古くなっているところがある。ドキュメントがその手助けをしてくれるでしょう。課題については......教科書に書かれているのと同じ課題を解いてください。問題を読み、解決策を見る、それを繰り返す。といった具合に、コツがつかめるまで。できるだけ自分で実装できるようになりたい課題に近いものを取り上げるとよいでしょう。
もちろん、すべてIMHOです。
ありがとうございました。
では、なぜそのようなものが差別化されないのか、その理由を教えてください。
オブジェクトタイプを変更すると、プロパティは2つのラベルまたはトレンドラインで折りたたまれます