[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 176

 
hoz:


:) Perché non implementare questo come una nuova funzione bar? È necessario che ricalcoli una volta al giorno, cioè a partire dalle ore 0.00. Quindi lo facciamo semplicemente. All'inizio, naturalmente:

Secondo me, questo è il modo giusto anche se è primitivo!
Vinin, il tuo omonimo, mi ha detto che dovrebbe cambiare da solo, ma non l'ha mai fatto, solo con la compilazione. Grazie per l'idea di usare la barra di controllo! Metti una variante su un grafico e la tua variante sull'altro. Vedrò cosa funziona domani.
 
hoz:


Non è nessuno dei due, è E. C'è un segno &&.

O. Perché la condizione AND non è soddisfatta quando almeno uno degli operandi è falso (primo O secondo) - nella logica booleana questo è chiamato"legge di De Morgan".

Ho capito. Ma il punto è questo:

La variabileindice in generale dal codice ha valore Bar - IndicatorCounted().

Cioè è 1 sulla barra attuale e 2 su quella nuova.

Entra nella funzione IsUpFractal() con il valore 1 o 1 se la barra non è ancora nuova, giusto?

Quindi, la variabile i avrà un valore fisso poiché anche l'indice del parametro di ingresso è fisso. Quindi il ciclo si interromperà sempre dopo la prima iterazione. Qual è lo scopo del ciclo allora?

Ad ogni passo di ciclo, la variabile i viene decrementata di 1 (i--), quindi i gestisce tutti i valori da index+g_center-1 a zero. Inoltre, si noti che quando l'indicatore parte per la prima volta, IndicatorCounted() dà 0, cioè l'indice verrà eseguito su tutte le barre, quindi i viene assegnato indice+g_center-1 ogni volta e poi scende fino a raggiungere 0 barra O fino a quando cnt è uguale a g_center, cioè fino a quando la condizione del ciclo non è soddisfatta (bene, o fino a quando return viene chiamato nel corpo del ciclo stesso).
 
alsu:

O. Perché la condizione AND non è soddisfatta quando almeno uno degli operandi è falso (primo O secondo) - nella logica di Buda questo è chiamato"legge di De Morgan".

Wow. Che casino! Quante volte ho usato questi operatori... e qui è come"sto guardando un nuovo cancello". Ho letto la legge, è scritta in modo strano. Descrive una situazione di negazione. Immagino che questa tecnica si applichi solo alle situazioni di negazione? Voglio dire che se una qualsiasi delle variabili booleane non è uguale aTrue.

Mi sono reso conto man mano che andavo avanti che non lo capivo. La linea di fondo è che la differenza qui è la seguente. È un indicatore, ed è per questo che non sono abituato a pensare in questo modo. Questo significa che alla prima chiamata dell'indicatore, le barre non sono calcolate e l'indice sarà uguale al numero di barre nel grafico o al valore di qualche variabile limitReCalcBar, se le condizioni di calcolo delle barre sono limitate.

In effetti, la variabile g_center = 2 in base al codice.limitReCalcBar = 5000 anche in base a variabili esterne.

Al primo inizio dell'indicatore nella funzione:

//+-------------------------------------------------------------------------------------+
//| Определение наличия верхнего фрактала на указанном баре                             |
//+-------------------------------------------------------------------------------------+
bool IsUpFractal(int index)
{
   double centerHigh = High[index + g_center];     // За точку отсчета берется средний..
                                                   // ..бар на участке из i_fractalPeriod
                                                   // ..баров
// - 1 - == Поиск максимумов справа от центрального бара ================================
   int cnt = 0, i = index + g_center - 1;
   for (; i >= 0 && cnt < g_center; i--)           // Справа от центрального бара должно
   {                                               // ..быть g_center-1 баров с низшим..
      if (centerHigh <= High[i])                   // ..максимумом. Не позволяется..
         return (false);                           // ..наличие баров с большим или..
      cnt++;                                       // ..равным максимумом.
   }
   
   if (i < 0)                                      // g_center-1 низших максимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 1 - == Окончание блока =============================================================

// - 2 - == Поиск максимумов слева от центрального бара =================================
   cnt = 0;
   i = index + g_center + 1;
   int total = Bars - 1;
   for (; i < total && cnt < g_center; i++)        // Слева от центрального бара должно
   {                                               // ..быть g_center-1 баров с низшим..
      if (centerHigh == High[i])                   // ..максимумом. Не позволяется..
         continue;                                 // ..наличие баров с большим..
      if (centerHigh < High[i])                    // ..максимумом. Равный - позволяется
         return (false);
      cnt++;                                    
   }
   
   if (i >= total)                                 // g_center-1 низших максимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 2 - == Окончание блока =============================================================
                                                   
   return (true);                                  // Фрактал найден                 
}

viene passato di conseguenza il valore di 5000.

i = indice + g_center - 1 = 5000 + 2 - 1 = 5001

Diamo un'occhiata al ciclo:

for (; i >= 0 && cnt < g_center; i--)

Dobbiamo calcolare 5000 barre. Dopo le prime due barre, cioè 0 e 1, la condizionecnt < g_center è falsa. Come possiamo allora calcolare tutte le 5000 barre? Questo è il punto che voglio padroneggiare. Sembra essere elementare per un professionista, ma non lo capisco. Naturalmente, se prendiamo l'operatore && come un OR, tutto andrà a posto... Ma in qualche modo contraddice ciò che ho già usato in Expert Advisors e che ho mai incontrato.

Bene, quando tutto sarà calcolato, tutto sarà semplice. 0 e 1 saranno passati ad ogni tick attraverso l'indice, le condizioni saranno soddisfatte in un ciclo e non ci sono difficoltà, come vedo.

 

Cari programmatori! Potete dirmi se è possibile scrivere uno script che monitorizza le posizioni aperte e quando una posizione raggiunge un certo livello di perdita, chiude parte della posizione. La soglia di perdita dovrebbe essere impostata sia nella valuta del deposito, sia in punti. Così, se il prezzo va contro di noi, abbiamo ridotto la perdita e se il prezzo ha girato al profitto, allora invece della perdita possiamo ottenere un po' di profitto o una perdita ancora più piccola, a seconda del TP impostato. Lo script deve lavorare tutto il tempo in modalità EA, è un assistente di qualsiasi sistema di trading o Expert Advisor.

 
destan:

Cari programmatori! Potete dirmi se è possibile scrivere uno script che monitorizza le posizioni aperte e quando una posizione raggiunge un certo livello di perdita, chiude parte della posizione. La soglia di perdita dovrebbe essere impostata sia nella valuta del deposito, sia in punti. Così, se il prezzo va contro di noi, abbiamo ridotto la perdita e se il prezzo si rivolge al profitto, allora invece della perdita possiamo ottenere un po' di profitto o una perdita ancora più piccola, a seconda del TP impostato. Lo script dovrebbe funzionare sempre in modalità EA, è un assistente di qualsiasi sistema di trading o Expert Advisor.

Forse. Qui c'è un aiuto.

 
valeryk:

Forse. Qui c'è un aiuto.


C'è una cosa chiamata stop loss!!!
 

Salve, ho una domanda. Ci sono diverse finestre uguali nel terminale, ognuna di esse ha lo stesso Expert Advisor, ma con impostazioni diverse. Potete dirmi se c'è una funzione o un algoritmo pronto in MQL4 che può rilevare da quale finestra viene aperto un ordine a mercato?

 
badbadboy:

Salve, ho una domanda. Ci sono diverse finestre identiche nel terminale, ognuna di esse ha lo stesso Expert Advisor, ma con impostazioni diverse. Potete dirmi se c'è una funzione o un algoritmo pronto in MQL4 che permette di determinare quale finestra è aperta un ordine di mercato?

Ha più senso fare delle copie dell'EA, nominandole in modo diverso e vedrete nel log tutto, quale lancia e, quindi, in quale finestra la troverete!
 
borilunad:
Ha più senso fare delle copie dell'EA, nominandole in modo diverso, e si vedrà nel registro quale copia e in quale finestra, rispettivamente, si può capire!

Lo capirò, ma come faccio a informare l'Expert Advisor?
 
borilunad:
Ha più senso fare delle copie dell'EA, nominandole in modo diverso, e vedrete nel log tutto, quale lancia e, di conseguenza, in quale finestra già sapete!

Ne ho bisogno in modo che l'Expert Advisor possa iniziare a fare i calcoli da solo.