Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 639

 
Top2n:

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

 
ClanVi:

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à

Il parametro "sparam" restituisce il nome dell'oggetto modificato. Se l'oggetto è tuo, controlla le proprietà che sono critiche per il tuo oggetto.
 
barabashkakvn:


MODIFICA DELL'OGGETTO DELLA CARTA

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).

che tipo di

if(NormalizeDouble(Price,Digits)-NormalizeDouble(Price2,Digits)!=0)
Price2 = Price;

dove ottenere una misura di Prezzo2))

 
ClanVi:

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.

 
evillive:

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.

 
nei segnali, posso solo impostare il rischio massimo che l'autore usa, non di più?
 
simpleton:

Il metodo di ricerca in quello che segue è leggermente diverso:

#property strict

/******************************************************************************/
bool AddValue(double &array[], const double value) {
  const int size = ArraySize(array);

  if (ArrayResize(array, size + 1) != size + 1) {
    return false; // Ошибка, значение не может быть добавлено к массиву
  }

  array[size] = value; //записываем
  return true; // Нет ошибки, значение добавлено к массиву
}

/******************************************************************************/
bool AddValueIfFound(double &array[], const string name) {
  const int type = ObjectType(name);

  if (type == OBJ_TREND) {
    switch ((color)ObjectGet(name, OBJPROP_COLOR)) { // Тип color допустимо использовать в switch
    case Goldenrod:
    case Gainsboro:
    case White:
      if (!AddValue(array, ObjectGetValueByShift(name, 1))) {
        return false; // Ошибка, значение найдено, но не может быть добавлено к массиву
      }
    }
  }

  return true; // Нет ошибки, значение, если найдено, добавлено к массиву
}

/******************************************************************************/
bool MassTrendNumber(double &array[], const bool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masB
  const string subname = (buy ? "uptrendline" : "downtrendline"); // существует два названия трендовых линий, первое и второе

  if (ArrayResize(array, 0) != 0) {
    return false; // Ошибка, массив не может быть заполнен достоверно
  }

  for (int i = 0, limit = ObjectsTotal(OBJ_TREND); i < limit; i++) {
    if (!AddValueIfFound(array, subname + IntegerToString(i))|| !FilTrenLin(subname+IntegerToString(i))) { \\ Вот куда вставил
      return false; // Ошибка, массив, если и заполнен, то недостоверно
    }
  }

  return true; // Нет ошибки, массив заполнен достоверно
}
/***************************************************************************/
 bool FilTrenLin(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);
        return false;
    }  
   return true;
}
/******************************************************************************/ void FillAndPrint(double &array[], const bool buy) {   if (MassTrendNumber(array, buy)) {     const int 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.

 
Top2n:

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:

#property strict

/******************************************************************************/
long DiffInSecs(const datetime dt1, const datetime dt2) {
  return dt1 - dt2;
}

/******************************************************************************/
void OnStart() {
  const datetime dt = TimeCurrent();

  Sleep(5555);
  Print("Diff in secs = ", DiffInSecs(TimeCurrent(), dt));
}

Lo fa:

01:10:43 Script 2 EURUSDm,H1: loaded successfully
01:10:43 2 EURUSDm,H1: initialized
01:10:49 2 EURUSDm,H1: Diff in secs = 6
01:10:49 2 EURUSDm,H1: uninit reason 0
01:10:49 Script 2 EURUSDm,H1: removed

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):

#property strict

/******************************************************************************/
void test(const datetime dt) {
  Sleep(2000);
  Print("Момент времени dt ", TimeCurrent() < dt ? "НЕ " : "", "достигнут");
}

/******************************************************************************/
void OnStart() {
  const datetime dt1 = TimeCurrent();
  const datetime dt2 = dt1 + 5;

  test(dt2);
  test(dt2);
  test(dt2);
  test(dt2);
}

L'avvio dà:

01:30:29 Script 2 EURUSDm,H1: loaded successfully
01:30:29 2 EURUSDm,H1: initialized
01:30:31 2 EURUSDm,H1: Момент времени dt НЕ достигнут
01:30:33 2 EURUSDm,H1: Момент времени dt НЕ достигнут
01:30:35 2 EURUSDm,H1: Момент времени dt достигнут
01:30:38 2 EURUSDm,H1: Момент времени dt достигнут
01:30:38 2 EURUSDm,H1: uninit reason 0
01: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à.

 
simpleton:

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[], const bool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masB
  const string subname = (buy ? "uptrendline" : "downtrendline"); // существует два названия трендовых линий, первое и второе

  if (ArrayResize(array, 0) != 0) {
    return false; // Ошибка, массив не может быть заполнен достоверно
  }

  for (int i = 0, limit = ObjectsTotal(OBJ_TREND); i < limit+2; i++) {
    if (!AddValueIfFound(array, subname + IntegerToString(i))||!FilTrenLin(subname + IntegerToString(i)) {// Условие вставил вот сюда
      return false; // Ошибка, массив, если и заполнен, то недостоверно
    }
  }
 
  return true; // Нет ошибки, массив заполнен достоверно
}
/***************************************************************************/
 bool FilTrenLin(string name) {

 const  datetime    dt = TimeCurrent();
 const  datetime   dt1 = ObjectGet(name,OBJPROP_TIME1);
 const  datetime   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 сек, то запускаем ошибку, чтоб цена не записалась в массив.
     {   return false;
     }  
   return true;
} 
/******************************************************************************/
long DiffInSecs(const datetime dt1, const datetime dt2) {
  return dt1 - dt2;
}