#property strict/******************************************************************************/bool AddValue(double &array[], constdouble value) {
constint size = ArraySize(array);
if (ArrayResize(array, size + 1) != size + 1) {
returnfalse; // Ошибка, значение не может быть добавлено к массиву
}
array[size] = value; //записываемreturntrue; // Нет ошибки, значение добавлено к массиву
}
/******************************************************************************/bool AddValueIfFound(double &array[], conststring name) {
constint type = ObjectType(name);
if (type == OBJ_TREND) {
switch ((color)ObjectGet(name, OBJPROP_COLOR)) { // Тип color допустимо использовать в switchcase Goldenrod:
case Gainsboro:
case White:
if (!AddValue(array, ObjectGetValueByShift(name, 1))) {
returnfalse; // Ошибка, значение найдено, но не может быть добавлено к массиву
}
}
}
returntrue; // Нет ошибки, значение, если найдено, добавлено к массиву
}
/******************************************************************************/bool MassTrendNumber(double &array[], constbool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masBconststring subname = (buy ? "uptrendline" : "downtrendline"); // существует два названия трендовых линий, первое и второеif (ArrayResize(array, 0) != 0) {
returnfalse; // Ошибка, массив не может быть заполнен достоверно
}
for (int i = 0, limit = ObjectsTotal(OBJ_TREND); i < limit; i++) {
if (!AddValueIfFound(array, subname + IntegerToString(i))|| !FilTrenLin(subname+IntegerToString(i))) { \\ Вот куда вставилreturnfalse; // Ошибка, массив, если и заполнен, то недостоверно
}
}
returntrue; // Нет ошибки, массив заполнен достоверно
}
/***************************************************************************/boolFilTrenLin(string name) {
const string dt_123 = TimeToStr(TimeCurrent(),TIME_SECONDS); //const datetime vremnin= StrToTime(dt_123); // Присваиваем время в секундах const datetime vrem2kor= ObjectGet(name,OBJPROP_TIME2);// время второй координатыMqlDateTime str1;
TimeToStruct(vrem2kor,str2);
const int PjatPon=str1.sec;
if(PjatPon+3600>=vremnin){ \\ если время 2-ой координаты + час > времени нынешнего то блокируем запись в массивPrint(" PjatPon ", PjatPon," vremnin ",vremnin," vrem2kor ",vrem2kor);
returnfalse;
}
returntrue;
}
/******************************************************************************/void FillAndPrint(double &array[], constbool buy) {
if (MassTrendNumber(array, buy)) {
constint limit = ArraySize(array);
Print("Найдено объектов: ", limit);
for (int i = 0; i < limit; i++) {
Print("Price[", i, "] = ", DoubleToStr(array[i], Digits));
}
} else {
Print("Чёрт!");
}
}
01:30:29 Script 2 EURUSDm,H1: loaded successfully
01:30:292 EURUSDm,H1: initialized
01:30:312 EURUSDm,H1: Момент времени dt НЕ достигнут
01:30:332 EURUSDm,H1: Момент времени dt НЕ достигнут
01:30:352 EURUSDm,H1: Момент времени dt достигнут
01:30:382 EURUSDm,H1: Момент времени dt достигнут
01:30:382 EURUSDm,H1: uninit reason 001:30:38 Script 2 EURUSDm,H1: removed
/******************************************************************************/bool MassTrendNumber(double &array[], constbool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masBconststring subname = (buy ? "uptrendline" : "downtrendline"); // существует два названия трендовых линий, первое и второеif (ArrayResize(array, 0) != 0) {
returnfalse; // Ошибка, массив не может быть заполнен достоверно
}
for (int i = 0, limit = ObjectsTotal(OBJ_TREND); i < limit+2; i++) {
if (!AddValueIfFound(array, subname + IntegerToString(i))||!FilTrenLin(subname + IntegerToString(i)) {// Условие вставил вот сюдаreturnfalse; // Ошибка, массив, если и заполнен, то недостоверно
}
}
returntrue; // Нет ошибки, массив заполнен достоверно
}
/***************************************************************************/bool FilTrenLin(string name) {
constdatetime dt = TimeCurrent();
constdatetime dt1 = ObjectGet(name,OBJPROP_TIME1);
constdatetime dt2 = ObjectGet(name,OBJPROP_TIME2);
Print(" DiffInSecs(dt,dt2) ", DiffInSecs(dt,dt2)," DiffInSecs(dt2,dt1)) ",DiffInSecs(dt2,dt1)," dt1 ",dt1);
if(DiffInSecs(dt,dt2)<3600||DiffInSecs(dt2,dt1)<3600)// Если время объекта второго параметра + 3600 сек > текущего времени,
или если разница первого и второго параметра времени объекта < 3600 сек, то запускаем ошибку, чтоб цена не записалась в массив.
{ returnfalse;
}
returntrue;
}
/******************************************************************************/long DiffInSecs(constdatetime dt1, constdatetime dt2) {
return dt1 - dt2;
}
はい、本当にありがとうございます!なんて親切なんでしょう!とても分かりやすいです。Awesomeooo!!!
最も直接的かつ効率的な方法で、重要なスキルを徐々に身につけることができたら、かっこいいですよね。
そして、他の人が同じように恩恵を受けることができれば。
思いつきません)行があります そして、行が変わったかどうかを確認する方法は
行があります。この行が変更されたかどうかを確認する方法は?
チャートイベント_オブジェクトの変更
プロパティダイアログでグラフィカルオブジェクトのプロパティを変更する
チャートイベント_オブジェクトの変更
プロパティダイアログによるグラフィカルオブジェクトのプロパティ変更
どのようにオブジェクトなしで、我々は価格がラインであることを知っている場合、我々はそれが変更されているかどうかを確認する必要があり、我々は価格を比較する必要があることは明らかである)。
如何いう
価格の指標を得るには2))
どのようにオブジェクトなしで、我々は価格を知っていて、これはラインであり、それが変更されているかどうかを確認する必要がある、それはこの価格を比較する必要があることは明らかである私は方法がわからない)
如何いう
価格の指標を得るには2))
最後のバーの価格をPrice2とし、BidをOpen、Close、High、Lowの中から選択した価格と比較します。
中間値が欲しい場合は、ティック履歴を保存し、そこから前の価格を取得し、Bidは前のティックの価格と比較する必要があります。
また、価格の正規化とはどういう意味かというと、後で取引注文に 使う計算値を正規化する必要があるのですが、価格はすでに正規化されているのです。
最後のバーの価格はPrice2です。
中間値が欲しい場合は、ティック履歴を保存して、そこから前の値を取る必要があります。
すべて把握しました :)
いいえ、私のバーでは使えません。
下のものは、検索方法が少し違います。
生意気だと思わないでください、もうどう対処していいかわからないけど、どうしようも ないんです。アレイを作り上げれば、何もしないのと同じように信号をフィルタリングして、条件が打ち出されると思ったのです。
気にしないでください、もうどう対処していいかわからないくらいです、でも どうしようもないんです。配列を作れば、信号のフィルタリングをするのに条件がめんどくさいと思ったんです。
TimeCurrent()関数は オーバーロードされています。datetime型の 説明を読むと、最初の関数の最初のバリアントで済むことがわかります。
そうなんです。
時間的な瞬間の差を得るためではなく、これらの瞬間を比較するために、反対側に行くことができます(同時に、再び条件式を使うことができます)。
スタートアップは与える。
応用的な考え方の本質を理解し、日時型とは何かを覚えておけば、必要な精度が秒単位を超えない限り、時間の瞬間を扱うことは困難ではないでしょう。
TimeCurrent()関数は オーバーロードされています。datetime型とは 何かという説明を読めば、最初のバージョンの関数で問題ないことがわかると思います。
そうなんです。
時間モーメントの差を求めるのではなく、これらのモーメントを比較するために、他の方向にも行くことができます(同時に、再び条件式を使うことができます)。
ランニングは与える。
これまでの考え方を理解し、datetime型を意識すれば、必要な精度が秒単位を超えなければ、時間の中のポイントを扱うことは問題なくなるはずです。
正直なところ、どう塗ればいいのかがわからないんです。あと1ミリ、あと少しで完成というところでやめてしまうのはもったいない。
タスク、オブジェクト時間(第2パラメータ+3600秒>現在)||(第1パラメータ時間-第2パラメータ時間)<3600秒)の場合、配列に価格を書き込まない。