Cambiare le proprietà di un oggetto grafico tramite il dialogo delle proprietà
Il parametro "sparam" restituisce il nome dell'oggetto modificato. Se l'oggetto è tuo, allora controlla le proprietà che sono critiche per il tuo oggetto.
Come senza un oggetto, se sappiamo che il prezzo è una linea, dobbiamo controllare se è cambiato, è chiaro che dobbiamo confrontare il prezzo).
Come senza un oggetto, sappiamo il prezzo e questa è la linea, è necessario controllare se è cambiato o no, è chiaro che è necessario confrontare questo prezzo non so come)
che tipo di
dove ottenere una misura di Prezzo2))
il prezzo dell'ultima barra e sarà Price2, confronta Bid con qualsiasi prezzo dell'ultima barra di tua scelta - Open, Close, High, Low.
Se vuoi i prezzi intermedi, devi salvare la cronologia dei tick e prendere il prezzo precedente da lì, poi il Bid sarà confrontato con il prezzo del tick precedente.
E qual è il senso della normalizzazione del prezzo? È necessario normalizzare i valori calcolati che saranno utilizzati negli ordini di trading in seguito, e il prezzo è già normalizzato.
Il metodo di ricerca in quello che segue è leggermente diverso:
#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("Чёрт!");
}
}
Non consideratelo sfacciato,non so nemmeno più come affrontarlo, ma non posso farne a meno. Ho pensato che se potessi comporre un array, allora le condizioni sarebbero martellate, filtrando il segnale come niente fosse.
Non fateci caso,non so nemmeno più come affrontarlo, ma non posso farci niente. Ho pensato che se potessi fare un array, allora le condizioni sarebbero una rottura di palle per filtrare il segnale.
Possiamo andare in un'altra direzione, non per ottenere la differenza di momenti nel tempo, ma per confrontare questi momenti (allo stesso tempo, possiamo usare di nuovo un'espressione condizionale):
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
Dopo aver compreso l'essenza delle idee applicate e aver ricordato cos'è il tipo datetime, lavorare con momenti di tempo, se la precisione richiesta non supera le unità di secondi, non dovrebbe causare difficoltà.
La funzione TimeCurrent() è sovraccaricata. Se leggete la descrizione di cos'è il tipo datetime, troverete che la prima versione della funzione va bene:
Lo fa:
Possiamo andare anche nell'altra direzione, non per ottenere la differenza dei momenti di tempo, ma per confrontare questi momenti (allo stesso tempo, possiamo usare di nuovo un'espressione condizionale):
Correre dà:
Una volta capite le idee, e ricordando il tipo datetime, lavorare con punti nel tempo non dovrebbe essere un problema, a patto che la precisione richiesta non superi le unità di secondi.
Ad essere onesti, non ho capito come applicarlo. Manca un millimetro, è un peccato fermarsi quando è quasi finito.
Task, non scrivere il prezzo nell'array se l'oggetto time(2° parametro+3600sec>current)||(1st parameter time - 2nd parameter time)<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;
}
Sì, grazie mille, sei proprio oltre le parole come utile, così chiaro! Fantasticoooo!!!
Sarebbe bello se tu potessi gradualmente insegnarti delle abilità importanti nel modo più diretto ed efficiente possibile.
E se altri possono beneficiare allo stesso modo.
Non mi viene in mente niente) c'è una linea E come faccio a controllare se la linea è cambiata
Non riesco a pensare) c'è una linea E come faccio a controllare se questa linea è cambiata
MODIFICA DELL'OGGETTO DELLA CARTA
Cambiare le proprietà di un oggetto grafico tramite il dialogo delle proprietà
MODIFICA DELL'OGGETTO DELLA CARTA
Cambiare le proprietà di un oggetto grafico tramite il dialogo delle proprietà
Come senza un oggetto, se sappiamo che il prezzo è una linea, dobbiamo controllare se è cambiato, è chiaro che dobbiamo confrontare il prezzo).
che tipo di
dove ottenere una misura di Prezzo2))
Come senza un oggetto, sappiamo il prezzo e questa è la linea, è necessario controllare se è cambiato o no, è chiaro che è necessario confrontare questo prezzo non so come)
che tipo di
dove ottenere una misura di Prezzo2))
il prezzo dell'ultima barra e sarà Price2, confronta Bid con qualsiasi prezzo dell'ultima barra di tua scelta - Open, Close, High, Low.
Se vuoi i prezzi intermedi, devi salvare la cronologia dei tick e prendere il prezzo precedente da lì, poi il Bid sarà confrontato con il prezzo del tick precedente.
E qual è il senso della normalizzazione del prezzo? È necessario normalizzare i valori calcolati che saranno utilizzati negli ordini di trading in seguito, e il prezzo è già normalizzato.
il prezzo dell'ultima barra sarà Price2
Se vuoi i prezzi intermedi, devi salvare la cronologia dei tick e prendere il prezzo precedente da lì.
Ho capito tutto :)
No, non funzionerebbe con le mie barre.
Il metodo di ricerca in quello che segue è leggermente diverso:
Non consideratelo sfacciato,non so nemmeno più come affrontarlo, ma non posso farne a meno. Ho pensato che se potessi comporre un array, allora le condizioni sarebbero martellate, filtrando il segnale come niente fosse.
Non fateci caso,non so nemmeno più come affrontarlo, ma non posso farci niente. Ho pensato che se potessi fare un array, allora le condizioni sarebbero una rottura di palle per filtrare il segnale.
La funzione TimeCurrent() è sovraccaricata. Se leggete la descrizione del tipo datetime, vedrete che la prima variante della prima funzione andrà bene:
Lo fa:
Possiamo andare in un'altra direzione, non per ottenere la differenza di momenti nel tempo, ma per confrontare questi momenti (allo stesso tempo, possiamo usare di nuovo un'espressione condizionale):
L'avvio dà:
Dopo aver compreso l'essenza delle idee applicate e aver ricordato cos'è il tipo datetime, lavorare con momenti di tempo, se la precisione richiesta non supera le unità di secondi, non dovrebbe causare difficoltà.
La funzione TimeCurrent() è sovraccaricata. Se leggete la descrizione di cos'è il tipo datetime, troverete che la prima versione della funzione va bene:
Lo fa:
Possiamo andare anche nell'altra direzione, non per ottenere la differenza dei momenti di tempo, ma per confrontare questi momenti (allo stesso tempo, possiamo usare di nuovo un'espressione condizionale):
Correre dà:
Una volta capite le idee, e ricordando il tipo datetime, lavorare con punti nel tempo non dovrebbe essere un problema, a patto che la precisione richiesta non superi le unità di secondi.
Ad essere onesti, non ho capito come applicarlo. Manca un millimetro, è un peccato fermarsi quando è quasi finito.
Task, non scrivere il prezzo nell'array se l'oggetto time(2° parametro+3600sec>current)||(1st parameter time - 2nd parameter time)<3600sec )