MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 178

 
Andrey Dik:

はい、ありがとうございます

いいえ、でもとにかくありがとうございます!)
あんなに詰まるとは思いませんでした... :-)))
 

こんばんは。

iOpenを使用 する場合は、シフトを指定します。指定したシフターに十分な履歴がない場合、最も古いバーのiOpenが返される。

質問:指定されたシフターを持つバーのチェックを作るにはどうしたらよいですか?また、十分な履歴がない場合は、iOpenを返さないのですか?

 
Sergey:

こんばんは。

iOpenを使用する場合は、シフトを指定します。指定したシフターに十分な履歴がない場合、最も古いバーのiOpenが返される。

質問:指定されたシフターを持つバーのチェックを作るにはどうしたらよいですか?また、十分な履歴がない場合、iOpenを返さないのですか?


CopyOpen

この関数は、指定されたシンボルと期間のペアの始値の履歴データを、指定された量だけ open_array 配列に受信します。注意すべきは、開始位置からの要素のカウントは現在から過去に向かって行われること、すなわち、0に等しい開始位置は現在のバーを意味することである。


未知のデータをコピーする場合は、ダイナミックアレイをターゲット配列として使用することをお勧めします。

既知のデータ量をコピーする必要がある場合は、不要なメモリのオーバーロケーションを避けるために、静的に割り当てられたバッファにコピーするのがよいでしょう。

受信配列の as_series=true, as_series=false にかかわらず、最も古い要素が配列に割り当てられた物理メモリの先頭に来るようにデータがコピーされる。この機能には、3つのバリエーションがあります。

開始位置と必要な要素数による参照

intCopyOpen()
stringsymbol_name,// シンボル名
ENUM_TIMEFRAMEStimeframe,// 期間
intstart_pos,// どこから始めるか。
intcount,// 何個コピー するか
doubleopen_array[]// 始値をコピーするための配列
);

開始日、必須要素数でアクセスする

intCopyOpen()
stringsymbol_name,// シンボル名
ENUM_TIMEFRAMEStimeframe,// 期間
datetimestart_time,// どの日付からか
intcount,// 何個コピー するか
doubleopen_array[]// 始値をコピーするための配列
);

必要な時間間隔の開始日、終了日によるアクセス

intCopyOpen()
stringsymbol_name,// シンボル名
ENUM_TIMEFRAMEStimeframe,// 期間
datetimestart_time,// どの日付からか
datetimestop_time,// 何日までか
doubleopen_array[]// 始値をコピーするための配列
);

パラメータ

シンボル名

[中】記号です。

タイムフレーム

[中】期間

開始位置

[in] コピーされる最初の要素の番号。

カウント

[in] コピーするアイテムの数。

開始時間

[in] コピーされる最初の要素に対応するバータイム。

停止時間

[in] 最後の要素に対応するバータイム。

open_array[]の場合

[out] double 型の配列。

戻り値

コピーされた配列の要素数,あるいはエラーの場合は -1.

備考

要求されたデータの間隔が、サーバで利用可能なデータから完全に外れている場合、この関数は -1 を返します。TERMINAL_MAXBARS(チャート上の最大バー数)外のデータが要求された場合、この関数は-1も返します。

要求されたタイムシリーズがまだ構築されていない場合、あるいはサーバからダウンロードする必要がある場合、この関数は直ちに -1 を返します。

Expert Advisor またはスクリプトからデータを要求すると、端末がローカルにこれらのデータを持っていない場合はサーバーからの読み込みが開始され、ローカル履歴からデータを構築できるがまだ準備ができていない場合は、必要な時系列の構築が開始されます。この関数は、タイムアウト時間までに準備できる量のデータを返しますが、履歴の読み込みは継続され、次の同様のリクエストではより多くのデータが返されます。

開始日と必要個数でデータを要求した場合、指定した日付より小さい(早い)か等しいデータのみが返されます。同時に、間隔を秒単位で指定し、考慮する。これは、値が返される任意のバーの開始日(ボリューム、スプレッド、インジケータバッファの値、価格オープン、ハイ、ロー、クローズまたはオープン時間タイム)が、常に指定したものと同じかそれ未満であることを意味します。

指定された日付範囲のデータを要求する場合、要求された間隔に該当するデータのみが返され、間隔は秒単位で指定され考慮される。つまり、値が返されるバーの開始時間(ボリューム、スプレッド、インジケータバッファの値、価格オープン、ハイ、ロー、クローズ、オープンタイム時間)は、常に要求された間隔内にあることを意味します。

したがって、現在の 曜日が土曜日の場合、start_time=Last Tuesdayと stop_time=Last Fridayを指定して週足タイムフレームのデータをコピーしようと すると、週 足タイムフレームの開始時刻は常に日曜日であり、指定した範囲に入る週足はないため、関数は0を返す ことになるのです。

現在の未完成のバーに対応する値を取得する必要が ある場合、start_pos=0と count= 1を指定した最初の呼び出し形式を使用 することができます。

 

ごあいさつ

皆さん、最後に1-2-3のゼロをつけた価格交差レベルの条件の作り方を教えてください。

 
Andrey Sokolov:

ごあいさつ

皆さん、最後に1-2-3のゼロをつけた価格交差レベルの条件の作り方を教えてください。


過去と現在の価格値をこの水準で比較し、水準がこの値の間にあれば、クロスが発生したことになる。
 
Sergey Gritsay:

過去と現在の価格をこの水準で比較し、水準がこの値の間にあればクロスが発生したことになる。


これらのレベルを比較するためには、どのように指定すればよいのでしょうか?

または -小数点 以下の桁数を正しく指定するには?四捨五入ではなく、削除で。

 
Andrey Sokolov:


また、これらのレベルを比較するためには、どのように書けばいいのでしょうか?

または -小数点 以下の桁数を正しく指定するには?四捨五入ではなく、削除で。

これがファインディング機能です。

//===============================================================================================
//---------------------------- Возвращает ближайший круглый уровень ----------------------------+
//===============================================================================================
double GetUniversalLevel(int ne=100, string symb="0") {
 if(symb=="0") symb=Symbol();
 static double LastBid;
 double _Level=0, PriceStep=0, bid=0, point=0;
 bid=dBid(symb);
 point=dPoint(symb);
  if(LastBid<point) {LastBid=bid;} // Инициализация прошлой цены
   PriceStep=ne*point; // Шаг цены N пунктов.
   _Level=MathRound(bid/PriceStep)*PriceStep; // Круглый уровень
  LastBid=bid;
  return(_Level);
 }
Comment( GetUniversalLevel(50) );
 

セルゲイ・グリツァイ、ヴィタリー・ムジチェンコ ありがとうございました。

また、関数MathFloor() - 底辺に最も近い整数の数値を返すという提案もありました。

 
Vitalie Postolache:

MySQLを掘る。
掘る...面白い...多分、数ヶ月後には今の自分の疑問を笑い話にしていると思いますが、まだ旅の始まりです...。

セルゲイ・グリツァイ
MTの場合、このデータを処理するインジケーターやExpert Advisorを作成したり、VPSサーバーに端末を置き、自分の口座から友人の口座へのトレードコピー機を設置したりする必要があります。もう一つの方法はシグナル サービスを通じて、指定されたレベルで実行された自分のトレードをコピーする ことです。一般的には、自分の資金力を考慮して、適切なソフトウェアを発注する必要があります。


モシェダヤン

前史を思い起こしてみよう。csvからデータを取得し、チャート上に(水平レベル)表示する日足インジケータがあります。自宅のノートパソコンからサーバーを作りました(弱いですが、そこそこ計算も必要ないし、csvも出してくれるし、非常に小さいです)。テスト接続用のサーバーでは、通常のフォーラムエンジンを流し、外からすべてが見えるようです。アドバイスに協力する。それは、そこからインジケータcsvファイルを読み取るために、サーバー上にあるべき?つまり、インジケータはどのようにcsvデータベースと通信しているのでしょうか?多分、エンジンのfTPサーバーか何かを記入し、MTのためにいくつかの特別なポートを開く必要があることができます?それとも、一般的に間違った方向に進んでしまったのでしょうか?感謝


友よ、もうひとつ聞いていいかい?自宅のノートパソコンに負荷をかけず、インジケーターとcsvファイル、例えばYandex.DiskやОблако@mail.ru、Box.netなどの無料クラウドファイルストレージを連携させて使用することは可能でしょうか?ありがとうございました。
 
Vitaly Muzichenko:

以下はファインダーの機能です。

dBidとdPointは別々に入力する必要があるのでしょうか?