int Bollinger_Bands(int _Average_Period, int _Number)
{
double Buffer_BASE_LINE[]; // Массив Буффера Линии BASE_LINEdouble Buffer_UPPER_BAND[]; // Массив Буффера Линии UPPER_BANDdouble Buffer_LOWER_BAND[]; // Массив Буффера Линии LOWER_BANDint Bar_Cash = _Average_Period; // Количество плучаемых значений от индикатораint Bands_Handel = 0; // Хендл индикатора Bollinger_Bands//---//double Base_Line = 0; // Значение линии BASE_LINEdouble Upper_Line = 0; // Значение линии UPPER_BANDdouble Lower_Line = 0; // Значение линии LOWER_BAND//---//double Band_Size_Buffer[];// Буфер расчётных значений разницы между линиями индикатора
int Band_Size_Total = 0;// Итог среднего значения расстояния между линиями в пунктах
ENUM_APPLIED_PRICE applied_price = PRICE_CLOSE; // тип цены //---//ArrayResize(Band_Size_Buffer,_Average_Period+1);
ArrayResize(Buffer_UPPER_BAND,_Average_Period+1);
ArrayResize(Buffer_LOWER_BAND,_Average_Period+1);
//---//
Bands_Handel = iBands(_Symbol,PERIOD_CURRENT,20,2,0,applied_price);
//---// CopyBuffer(Bands_Handel,0,_Number,_Average_Period,Buffer_BASE_LINE); ArraySetAsSeries(Buffer_BASE_LINE,true);
CopyBuffer(Bands_Handel,1,_Number,_Average_Period,Buffer_UPPER_BAND); ArraySetAsSeries(Buffer_UPPER_BAND,true);
CopyBuffer(Bands_Handel,2,_Number,_Average_Period,Buffer_LOWER_BAND); ArraySetAsSeries(Buffer_LOWER_BAND,true);
//---////---// Тут получение значений для выбранного номера бара из переменной которая передаётся в функцию (использовал как проверку получения данных по линиям)
Base_Line = NormalizeDouble(Buffer_BASE_LINE[_Number], _Digits); //Alert("Base_Line[",_Number,"] = ",Base_Line);
Upper_Line = NormalizeDouble(Buffer_UPPER_BAND[_Number], _Digits); //Alert("Upper_Line[",_Number,"] = ",Upper_Line);
Lower_Line = NormalizeDouble(Buffer_LOWER_BAND[_Number], _Digits); //Alert("Lower_Line[",_Number,"] = ",Lower_Line);//---////---// ** А это расчёт среднего расстояния между внешними линиями Боллинджера за указанный период. Получается 0 потому что одно число отнимается само от себя.for(int i=_Average_Period; i>=0; i--) {
//---//
Upper_Line = NormalizeDouble(Buffer_UPPER_BAND[i], _Digits); //Alert("Upper_Line[",i,"] = ",Upper_Line);
Lower_Line = NormalizeDouble(Buffer_LOWER_BAND[i], _Digits); //Alert("Lower_Line[",i,"] = ",Lower_Line);//---//
Band_Size_Buffer[i] = NormalizeDouble( ((Upper_Line - Lower_Line) / _Point), 2); //Alert("Band_Size_Buffer[",i,"] = ",Band_Size_Buffer[i]);
}//---//
Band_Size_Total = (int) MathMean(Band_Size_Buffer);
//---//return(Band_Size_Total);
}
インジケータからのデータ取得に問題があるのですが、どなたか教えてください。
関数の目的 インジケータ「ボリンジャーバンド」の外側のライン間の平均距離を、指定された期間について、ポイント単位で計算する。
問題の本質: 指定したバーのインジケーターのライン上の価格の実際の値を取得することができません。なぜなら、何らかの理由で、同じ価格値がインジケーターの異なるバッファに書き込まれ、このバーのどのラインの実際の値にも対応していないからです。
また、この関数と全く同じ方法で、他のインジケーターからインジケーターを取得することができましたが、ここではうまくいきません。
標準ライブラリを 使用して注文をオープンした後、チケットを取得するにはどうすればよいですか?
サーバーからの応答がすでにここで受信 されていることを確認できますか?サーバーからの応答を待っている間、ターミナルがハングアップしますか?よくわかりません。
MQ4ではすべてがシンプルでした:
サーバーからの応答がすでにここで受信 されていることを確認できますか?サーバーからの応答を待っている間、ターミナルがハングアップしますか?理解できません。
MQ4ではすべてがシンプルでした:
OnTradeTransaction() イベント処理を使用するのがよいでしょう。
OnTradeTransaction() イベント・ハンドラを使用する方が良いでしょう。
ありがとうございます!では、いくつかの関数を作り直さなければなりませんね。
mql5でスリッページを計算する関数をどこかで見たことがありませんか?
ありがとう!じゃあ、いくつかの機能を作り直さないとね。
mql5でスリッページを計算する関数をどこかで見ませんでしたか?
なぜそれを探すのですか?OnTradeTransactionでは、注文のイベントをキャッチして注文価格を読み取り、次に取引をキャッチして取引価格を読み取り、これらの価格の差を取得します。
グローバルレベルで変数を作成し、注文送信時にその変数に価格を書き込み、OnTradeTransactionで 取引 価格を取得することもできます。
Alexey Viktorov #:
グローバルレベルで変数を作成し、注文が送信されたときにその変数に価格を書き込み、OnTradeTransactionで 取引価格を取得 することもできます。
このオプションは間違いなくアウトです。多くの注文を送信する場合、チケットなしで価格が必要ですが、OnTradeTransactionはどのように対処しますか?
このオプションは間違いなくアウトです。多くの注文を送信する場合、チケットなしでどのように価格を設定すればよいですか?
ポジションIDによって問題なく整理されます。
取引を取得し、そこからポジションIDを取得し、このIDで履歴から注文と取引を引き出し、注文と取引の価格をINで読み取ります。
ドキュメントを読んでください。そこには興味深いことがたくさん書かれています。
Alexey Viktorov #:
取引を取得し、そこからポジションIDを取得し、このIDで履歴から注文と取引を引き出し、注文と取引の価格をINで読み取ります。
明快だ!しかし、グローバル・レベルで注文を送信し、OnTradeTransactionで取引価格を取得する際に、保存された価格を使用する2つ目のオプションは、私には理解できません。なぜ注文を送信中に(注文に)結びついていない価格を保存するのでしょうか?
要するに、私はこのようにします - 取引を取得し、それから他のすべてを引き出します。
問題の本質: 指定したバーのインジケーターのライン上の価格の実際の値を取得することができません。なぜなら、何らかの理由で、同じ価格値がインジケーターの異なるバッファに書き込まれ、このバーのラインの実際の値にも対応していないからです。
また、この関数と全く同じ方法で、他のインジケーターからインジケーターを取得することができましたが、ここではうまくいきません。
ボリンジャーはSMA +- N*standard_deviations です。
標準偏差とSMAについては独自のインジケーターがあります。でも、それを使わなくても計算できます。参考書を読んで、ここに計算式があります。そこから「線間の平均点間距離」を求めますが、これはデフォルト値では現時点で4シグマに相当します。
、平均値(どの期間の?)をわざわざ計算する必要がありますか?
あなたは事実上、標準偏差の平均を知りたいのです。
これは明確です!しかし、注文の送信中にグローバルレベルで価格を保存し、OnTradeTransaction で取引価格を取得するという 2 番目のオプションは、私には理解できません。注文の送信中に、なぜ(注文に)結びついていない価格を保存するのですか?
要するに、私はこのようにします - 取引を取得し、それから他のすべてを引き出します。
これは、冷静な取引について言われた、すべてが時間内になるとき... これを考慮せずに
取引、自動取引システム、取引戦略のテストに関するフォーラム
初心者からの質問 MQL5 MT5 MetaTrader 5
ナウリス・ズカス, 2022.06.11 17:49
このオプションは間違いなくアウトです。多くの注文を送信した場合、チケットなしで私の価格は、OnTradeTransactionはどのようにそれに対処するのでしょうか?