Como sem um objeto, sabemos o preço e esta é a linha, é necessário verificar se ele mudou ou não, é claro que é necessário comparar este preço eu não sei como)
que tipo de
onde obter uma medida de preço2))
o preço na última barra e será Price2, compare Bid com qualquer preço da última barra de sua escolha - Aberto, Fechado, Alto, Baixo.
Se você quiser preços intermediários, você precisa salvar o histórico do tick e tirar o preço anterior de lá, então o Bid será comparado com o preço do tick anterior.
E qual é o sentido da normalização dos preços? Você precisa normalizar os valores calculados que serão usados nas ordens comerciais mais tarde, e o preço já está normalizado.
O método de busca no método abaixo é ligeiramente diferente:
#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("Чёрт!");
}
}
Não pense nisso como atrevido, eunem sei mais como lidar com isso, mas não posso evitar. Pensei que, se eu pudesse compor uma matriz, então as condições estariam marteladas, filtrando o sinal como nada mais.
Não se importe comigo, eunem sei mais como lidar com isso, mas não há nada que eu possa fazer sobre isso.Pensei que se eu pudesse fazer uma matriz, então as condições seriam uma dor de cabeça para filtrar o sinal.
Podemos ir para o outro lado, não para obter a diferença de momentos no tempo, mas para comparar esses momentos (ao mesmo tempo, podemos usar uma expressão condicional novamente):
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
Após compreender a essência das idéias aplicadas, e lembrar qual é o tipo de data/hora, trabalhar com momentos de tempo, se a precisão requerida não exceder unidades de segundos, não deve causar dificuldades.
Podemos ir na outra direção também, não para obter a diferença de horários, mas para comparar esses momentos (ao mesmo tempo, podemos usar uma expressão condicional novamente):
Correr dá:
Uma vez que você tenha uma compreensão das idéias que foram aplicadas, e tendo em mente o tipo de data/hora, trabalhar com pontos no tempo, se a precisão necessária não exceder unidades de segundos, não deve mais ser um problema.
Para ser honesto, ainda não descobri como aplicá-lo. Falta um milímetro, é uma pena parar quando está quase pronto.
Tarefa, não escreva preço para array se o tempo do objeto(2º parâmetro+3600sec>current)||(1º parâmetro tempo - 2º parâmetro tempo)<3600sec )
/******************************************************************************/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;
}
Sim, muito obrigado, você está além das palavras como é útil, tão claro! Fantástico!!!
Seria legal se você pudesse gradualmente ensinar a si mesmo habilidades importantes da maneira mais direta e eficiente possível.
E se outros podem se beneficiar da mesma forma.
Não consigo pensar em nada) existe uma linha E como posso verificar se a linha mudou
Não consigo pensar) há uma linha E como posso verificar se esta linha mudou
CHARTEVENT_OBJECT_CHANGE
Mudando as propriedades de um objeto gráfico através do diálogo de propriedades
CHARTEVENT_OBJECT_CHANGE
Mudando as propriedades de um objeto gráfico através do diálogo de propriedades
Como sem um objeto, se sabemos que o preço é uma linha, temos que verificar se ele mudou, é claro que temos que comparar o preço).
que tipo de
onde obter uma medida de preço2))
Como sem um objeto, sabemos o preço e esta é a linha, é necessário verificar se ele mudou ou não, é claro que é necessário comparar este preço eu não sei como)
que tipo de
onde obter uma medida de preço2))
o preço na última barra e será Price2, compare Bid com qualquer preço da última barra de sua escolha - Aberto, Fechado, Alto, Baixo.
Se você quiser preços intermediários, você precisa salvar o histórico do tick e tirar o preço anterior de lá, então o Bid será comparado com o preço do tick anterior.
E qual é o sentido da normalização dos preços? Você precisa normalizar os valores calculados que serão usados nas ordens comerciais mais tarde, e o preço já está normalizado.
o preço na última barra será Price2
Se você quiser preços intermediários, você tem que salvar o histórico do tick e tirar o preço anterior de lá.
Já entendi tudo :)
Não, isso não funcionaria com meus bares.
O método de busca no método abaixo é ligeiramente diferente:
Não pense nisso como atrevido, eunem sei mais como lidar com isso, mas não posso evitar. Pensei que, se eu pudesse compor uma matriz, então as condições estariam marteladas, filtrando o sinal como nada mais.
Não se importe comigo, eunem sei mais como lidar com isso, mas não há nada que eu possa fazer sobre isso.Pensei que se eu pudesse fazer uma matriz, então as condições seriam uma dor de cabeça para filtrar o sinal.
A função TimeCurrent() está sobrecarregada. Se você ler a descrição do tipo de data/hora, você verá que a primeira variante da primeira função serve:
E é verdade:
Podemos ir para o outro lado, não para obter a diferença de momentos no tempo, mas para comparar esses momentos (ao mesmo tempo, podemos usar uma expressão condicional novamente):
Startup dá:
Após compreender a essência das idéias aplicadas, e lembrar qual é o tipo de data/hora, trabalhar com momentos de tempo, se a precisão requerida não exceder unidades de segundos, não deve causar dificuldades.
A função TimeCurrent() está sobrecarregada. Se você ler a descrição de qual é o tipo de data/hora, você verá que a primeira versão da função está bem:
E é verdade:
Podemos ir na outra direção também, não para obter a diferença de horários, mas para comparar esses momentos (ao mesmo tempo, podemos usar uma expressão condicional novamente):
Correr dá:
Uma vez que você tenha uma compreensão das idéias que foram aplicadas, e tendo em mente o tipo de data/hora, trabalhar com pontos no tempo, se a precisão necessária não exceder unidades de segundos, não deve mais ser um problema.
Para ser honesto, ainda não descobri como aplicá-lo. Falta um milímetro, é uma pena parar quando está quase pronto.
Tarefa, não escreva preço para array se o tempo do objeto(2º parâmetro+3600sec>current)||(1º parâmetro tempo - 2º parâmetro tempo)<3600sec )