Caratteristiche utili da KimIV - pagina 75

 

Ciao, caro Igor, il mio sistema utilizza i soppressori di tendenza. E sia il tempo che il prezzo del crossover sono importanti in esso.
Una sequenza di barre non ha sempre un tempo "continuo". Uscite, buchi, ecc.
L'uso di CrossPointOfLines ( in test_CrossPointOfLines.mq4) per il calcolo del tempo nella sua forma naturale porta ai seguenti risultati

a sinistra della barra dello zero

(La posizione delle linee di tendenza sui grafici non ha nulla a che fare con il sistema - selezione casuale. I punti di riferimento della linea di tendenza possono

essendo uno a sinistra della barra dello zero, l'altro a destra).


e a destra

I calcoli non devono essere eseguiti in ore, ma secondo la situazione: sia in barre che in ore. L'unità di tempo a sinistra è il bar. E per il lato destro, dopo la barra dello zero, dovrebbe essere misurato in ore.

La ricerca di soluzioni preconfezionate non ha ancora prodotto nulla. La funzione CrossPointOfLines è l'unica sul sito finora. Richiede una storia perfetta :(

 

Buon giorno Igor!

Per favore aiutatemi con un consiglio o una soluzione. Sto cercando di fare in modo che l'Expert Advisor dia un segnale quando una barra precedente "assorbe" la precedente.

1 - se l'assorbimento è avvenuto verso l'alto
2 - se l'assorbimento è avvenuto verso il basso.

Pensavo fosse molto semplice, bastava confrontare i prezzi di apertura e chiusura e voilà... ma non lo è. Quando passo il mouse sulle 2 barre precedenti, è chiaro che l'ultima sta mangiando la penultima.

Molto speranza per l'aiuto, e grazie in anticipo


Ecco il testo:

int start()
{
//----
if (SShort()==1)
Alert("1");
}
se (SLong()==1)
Alert("2");
}
//----
return(0);
}
//+------------------------------------------------------------------+
int SShort()
{int MS=0;
if (Open[1]>Close[2] && Close[1]<Open[2] && Open[1]>Close[1] && Open[2]<Close[2])
MS=1;
return(MS);
}
//+------------------------------------------------------------------+
int SLong()
{
int ML=0;
if(Open[1]<Close[2] && Close[1]>Open[2] && Open[1]<Close[1] && Open[2]>Close[2])
ML=1;
return(ML);
}
//+------------------------------------------------------------------+
 

Set di filtri temporali: C e PO

(e altro...).

Una volta chiesto cosa c'è, ecco il risultato che ho ottenuto io stesso.


1. Proibire o permettere le attività quotidiane.


Opzione 1.

// Закрыть все позиции в конце дня в указанное время
if (Hour()==23 && Minute()>=45) 
{ ЗакрытьДень();}


// Запретить эксперту торговать С и ПО
if ( (Hour()==22 && Minute()>=00) && (Hour()==23 && Minute()>=59) ) return;

Si noti che il "tempo di scadenza" in queste opzioni si estende alla fine dell'ora e 59 secondi del numero di minuti.

cioè l'ora di fine dell'evento indicata come 23:59 è in realtà 23:59:59

E alla fine dell'ora perché i minuti usano l'operatore di confronto ">=", che però non è un problema e si può specificare "==",

ma cancellare il tempo fino a 59 secondi funzionerà comunque...


Opzione 2.

Più preciso dal punto di vista dell'impostazione delle condizioni...

// Выборка ОТ и ДО
if( OtTime(2,15,21) < OrderCloseTime() && OrderCloseTime() < DoTime(4,58,33) )
{ Действия;}

// Функции преобразования 
datetime OtTime(int h=0, int m=0, int s=0) {datetime ot;
ot=( h*3600)+( m*60)+ s+StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
return ( ot);}
//--------------
datetime DoTime(int h=0, int m=0, int s=0) { datetime dt;
//if(h>23||h<0) Alert("Должно быть от 0 до 23"); h=0; 
//if(m>59||m<0) Alert("Должно быть от 0 до 59"); m=0;
dt=( h*3600)+( m*60)+ s+StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
return ( dt);}

L'ora viene impostata specificando nel passaggio dei parametri alla funzione, per esempio 21:15:23 come (21,15,23).

È chiaro che non è cool, ma è un codice abbastanza fattibile...

SZY: il controllo di validità dei parametri inseriti non è casuale.

Perché se ne inserisci uno sbagliato, ti fa saltare la testa. Non ho trovato altro modo, quindi l'ho commentato.

Pertanto, sarei molto grato per un modo di risolvere questo problema...


Variante #3.

A quanto pare, è il più semplice e il più esatto.

// Внешние параметры, могут быть экстернами
string ВН="02:15"; // начало события
string ВК="04:58"; // конец события

int start()
{
int m;
datetime vn=StrToTime( ВН);
datetime vk=StrToTime( ВК);
// либо напрямую указывать время по типу:
//  datetime vn=StrToTime("02:15");
//  datetime vk=StrToTime("04:58");

for (int m=0; m < OrdersHistoryTotal() ; m++) 
{
OrderSelect( m, SELECT_BY_POS, MODE_HISTORY);
if( (OrderCloseTime()> vn) && (OrderCloseTime()< vk) )
{ Действия;}
}

return()
}

La cosa della semplicità, sembra, è nelle peculiarità di trasformazione dei parametri passati ad essa dalla funzione StrToTime().

Per esempio, se inserite solo l'ora "HH:MM:SS" allora l'output sarà l'ora di ogni giorno corrente...


A proposito...

// можно написать и так:
if( (OrderCloseTime()>StrToTime( ВН)) && (OrderCloseTime()<StrToTime( ВК)) )
// или даже так:
if( (OrderCloseTime()>StrToTime("02:15")) && (OrderCloseTime()<StrToTime("04:58")) )

Combinando il campionamento per ore con i giorni si può filtrare per tipo:

- cosa c'era alle 18:00 di ogni giorno, o cosa c'era ogni giorno nel periodo specificato da C in su ore:minuti:secondi

Tuttavia, la gamma di giorni può anche essere stipata da e verso...


2. Funzione DateFirstDayMonday()

(basato su DateOfMonday() )

datetime DateFirstDayMonday() 
{ 
datetime dfdm;
dfdm=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))-((Day()-1)*86400);
return ( dfdm);
}

Restituisce la data del primo giorno come 00:00:00 del mese corrente.

Necessità di filtrare gli eventi da PRIMA dell'inizio del mese...

// выборка закрытых ордеров с начала месяца:
if( DateFirstDayMonday() < OrderCloseTime() )
{ Действия;}

// выборка ДО начала месяца (с начала истории счёта):
if( DateFirstDayMonday()-1 > OrderCloseTime() )
{ Действия;}

DateFirstDayMonday()-1 nel secondo esempio stampa "ultimo giorno del mese precedente 23:59:59".


...

Per favore, non prendetemi a calci in anticipo, perché sono un idiota.

:)))

 
Igor per favore aiuta a collegare un allarme a questo indicatore
File:
 
kombat >> :

Per favore, non prendetemi a calci in anticipo, perché sono un idiota. :)))

Chyneg non chyneg, ma se hai preso il cespuglio, seguilo fino alla fine. Vorremmo spostare il tempo di funzionamento consentito e il tempo di chiusura in funzioni booleane separate di questo tipo:

bool TradeTime(Ora di inizio del trade, ora di fine del trade)

Allora sarà molto comodo da usare, if (TradeTime(.,...)) e lavorare!

 
granit77 >> :

Chyneg non è un chyneg, ma se hai preso il timone, seguilo. Si chiede di mettere il tempo di funzionamento consentito e il tempo di chiusura in una specie di funzione booleana separata:

bool TradeTime(Ora di inizio del trade, ora di fine del trade)

Sarà molto comodo usare allora, if (TradeTime(.,.)) e lavorare!



Bene, già... ;)

Per una banca faccio una variante con due tempi simultanei:

- chiudere tutti gli ordini e le posizioni prima del rollover alle 22:00

- pausa di trading dall'inizio del rollover alle 22:00 fino alla fine della giornata alle 23:59

(versione grezza senza controlli aggiuntivi)

//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH>
//HHHHH Стартуем... HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH>
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH>
int start() {
//--- Общая проверка --------------------------------------------------------+
if(! IsCondition()) {Print("Низззяяя..."); return;}
//--- Задание неторгового времени (паузы) -----------------------------------+
ObjectDelete("НЕТОРГВРЕМЯ");
if((TimeCurrent()>StrToTime("22:00"))&&(TimeCurrent()<StrToTime("23:59:59"))) 
{ NoTradeTime(); return;}
//--- Принудительное закрытие всех ордеров и позиций в конце дня ------------+
if(Hour()==21 && Minute()>=45) { ЗакрытьДень(); return;}
//*метод имеет недостаток: он будет закрывать до конца указаного часа...
//*например время 21:45, закрывать будет до 21:59:59 а с 22:00 прекратит.
//*впринципе это нам не повредит...
//--- Конец условий ---------------------------------------------------------+
// бла-бла-бла...
return(0);
}
 
kombat >> :

...(versione grezza senza controlli aggiuntivi)

Vinin aveva funzioni separate per la temporizzazione, molto dettagliate ed elaborate. Guarda negli EA sul suo sito o bussa alla sua porta.

 
granit77 >> :

L'EA di Vinin ha funzioni separate per lavorare con il tempo, che sono molto dettagliate e complete. Guarda gli Expert Advisors sul suo sito o bussa semplicemente alla sua porta.

Grazie, ma non ce n'è ancora bisogno...

Al momento non ho molto tempo per questo consigliere,

So cosa scriverci e so anche come scriverlo...

*

Posterò il testo principale sul forum della banca per non sporcare questo argomento.

A suo tempo, naturalmente. ;)

 
granit77 >> :

bool TradeTime(Ora di inizio del trade, ora di fine del trade)

Allora sarà molto conveniente usare, if (TradeTime(.,.)) e lavorare!

È necessario ordinare una tale funzione per Igor Kim.

 
goldtrader писал(а) >>

Igor Kim dovrebbe ordinare una tale funzione.

Mi unisco alla richiesta! Sarebbe una funzione molto utile e necessaria. Alla luce delle attuali realtà commerciali....

È anche possibile fornire due intervalli di tempo.