//+------------------------------------------------------------------+//| Test.mq5 |//| Copyright 2018, MetaQuotes Software Corp. |//| https://mql5.com/ru/users/artmedia70 |//+------------------------------------------------------------------+#property copyright"Copyright 2018, MetaQuotes Software Corp."#property link"https://mql5.com/ru/users/artmedia70"#property version"1.00"#property indicator_separate_window#property indicator_buffers1#property indicator_plots1//--- plot OC#property indicator_label1"Open/Close"#property indicator_type1DRAW_LINE#property indicator_color1clrRed#property indicator_style1STYLE_SOLID#property indicator_width11//--- indicator buffersdouble BufferOC[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- Задаём массив BufferOC как буфер индикатораSetIndexBuffer(0,BufferOC,INDICATOR_DATA);
//--- Устанавливаем ему направление индексации как у таймсерииArraySetAsSeries(BufferOC,true);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| 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) return0;
//--- Установка массивов буферов как таймсерийArraySetAsSeries(open,true);
ArraySetAsSeries(close,true);
//--- Проверка и расчёт количества просчитываемых баровint limit=rates_total-prev_calculated;
if(limit>1) // если это первый запуск, или изменение истории, или открытие нового бара
{
limit=rates_total-1; // установим начало цикла на начало исторических данныхArrayInitialize(BufferOC,EMPTY_VALUE); // инициализируем массив
}
//--- Расчёт индикатораfor(int i=limit; i>=0 && !IsStopped(); i--)
{
if(close[i]==0) continue;
BufferOC[i]=open[i]/close[i];
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+
double fArray[];
int nBarsCnt = iBars(<символ>, <таймфрейм>);
if (ArrayResize(fArray, nBarsCnt) != nBarsCnt)
{
// Не удалось изменить размер массиваreturn;
}
ArraySetAsSeries(fArray, true);
どうすればいいのか?
どうやるんですか?
簡略化すると、CopyOpenはOnCalculateには 不要と理解していますが、ターミナルウィンドウからしか履歴を見ないということでしょうか。
簡略化すると、OnCalculateにはCopyOpenは不要ですが、ターミナルウィンドウから履歴だけを見るように?
Array masはtick毎に0サイズで作成され、それ以外の場所ではサイズが変わりません。そのため、アクセスするとアレイオーバーランが発生します。
この問題を解決するには、すべてのヒストリーバーの読み取りを含むサイズにリサイズするか、インジケーターバッファ(プログラムのグローバル変数として 宣言されています)にバインドする必要があります。私の理解が正しければ、これらの値はインジケータを使用して表示されるはずです。
簡略化すると、CopyOpenはOnCalculateには余計だと理解していますが、ターミナルウィンドウからしか履歴を見ないようにするため?
例
mas配列はtick毎に0サイズで作成され、それ以外の場所ではサイズを変えません。したがって、これを参照すると、配列から抜けることになります。
この問題を解決するには、すべてのヒストリーバーの読み取りを含むサイズにリサイズするか、インジケーターバッファ(プログラムのグローバル変数として 宣言される)にバインドする必要があります。私の理解が正しければ、インジケータを使って表示しなければならないのは、これらの値です。
私のミスです、mas[]は本当はグローバル配列であるべきですが、インジケータバッファも適当ではなく、むしろ中間の多次元配列になるでしょう。インジケーターバッファ経由ではなく、M5に最適なアレイサイズを決定する方法は?
私の不手際で、mas[]は本当はグローバル配列なのですが、indicator bufferも適当ではなく、むしろ中間の多次元配列になるのでしょう。M5で最適なアレイサイズを決定する方法として、インジケーターバッファではなく、どのような方法があるのでしょうか?
多次元というのがよくわからない。ここでは一次元の配列について述べています。また、MQL4では、配列の最大次元は4です。
配列のサイズをタイムシリーズと同じにするには、必要なシンボルと期間のチャートで利用可能なバーの数 に応じてサイズを変更する必要があります。
私の不手際で、mas[]は本当はグローバル配列なのですが、indicator bufferも適当ではなく、むしろ中間の多次元配列になるのでしょう。M5の最適なアレイサイズを決定する方法として、インジケーターバッファではなく、どのような方法があるのでしょうか?
なぜ、インジケータ・バッファとして配列を使いたくないのでしょうか?これらはサブシステムで監視されているので、仕事がしやすくなります。
そして、中間指標となるバッファ配列も簡単です。
こんにちは。
プラットフォーム上の出来高はティック出来高ですが、リアル出来高になるのでしょうか?
こんにちは。
プラットフォーム上ではボリュームがカチカチになっていますが、実際のボリュームはどうなるのでしょうか?
それはないでしょう。MT5を使用し、いくつかのブローカーはそこで実際のボリュームを提供しています。
こんにちは。
以下の問題について、ご教示ください。
1)いくつかの条件が満たされた後、注文が 開始されます。
価格がストップロス(この保留中の注文の)を既に通過している場合、保留中の注文を追加し、削除する場所を教えてください。
回答を探しているうちにフォーラムに迷い込んでしまい、くだらない質問で申し訳ありません。
ありがとうございました。