Discussione sull'implementazione dei consiglieri. - pagina 8

 
altec3:

Buon pomeriggio!

Sto cercando di scrivere una funzione che determini il profitto per il giorno corrente:

Puoi dirmi come nella funzione

Specificare il periodo a partire dal giorno corrente. È chiaro che la fine del periodo to_date=TimeCurrent(), come specificare correttamente l'inizio del periodo from_date, in modo che inizi esattamente da 00h:00m:00c del giorno corrente?

Scegliere a piacere:

datetime  iTime(
   const string        symbol,          // символ
   ENUM_TIMEFRAMES     timeframe,       // период PERIOD_D1
   int                 shift            // сдвиг
   );
int  CopyTime(
   string           symbol_name,     // имя символа
   ENUM_TIMEFRAMES  timeframe,       // период PERIOD_D1
   int              start_pos,       // откуда начнем 0
   int              count,           // сколько копируем 1
   datetime         time_array[]     // массив для копирования времени открытия. Объявить заранее

O il più, il più. Cosa che è già stata suggerita.

 
Vladimir Karputov:

Supponendo che ci sia stato almeno un tick oggi, l'algoritmo è il seguente: l'ora corrente viene inviata alla strutturaMqlDateTime. Quindi impostare le ore, i minuti e i secondi a zero in questa struttura. Resta da convertire la struttura modificata in un tempo:


Risultato:

Grazie! Un'altra domanda, se aggiungo una funzione

//+------------------------------------------------------------------+
//|Функция возвращает прибыль за текущие сутки                       |
//+------------------------------------------------------------------+
double Day_Profit()
  {
//--Запрашиваем историю сделок за последнии сутки
   HistorySelect(TimeCurrent()-PeriodSeconds(PERIOD_D1),TimeCurrent());
   uint     total       =HistoryDealsTotal();   // количество сделок в истории
   ulong    ticket      =0;                     // тикет сделки в истории
   long     type        =0;                     // тип сделки
   double   profit      =0.0;                   // финансовый результат сделки
   double   commission  =0.0;                   // коммиссия по сделке
   double   DayProfit   =0.0;                   // прибыль за текущие сутки
//--- for all deals
   for(uint i=0; i<total; i++)
     {
      if((ticket=HistoryDealGetTicket(i))>0)       //--- если имеются сделки, то...
        {
         profit      =HistoryDealGetDouble(ticket,DEAL_PROFIT);
         commission  =HistoryDealGetDouble(ticket,DEAL_COMMISSION);
         if(HistoryDealGetInteger(ticket,DEAL_TYPE)!=DEAL_TYPE_BALANCE)
           {
            DayProfit+=(profit+commission);
           }
        }
     }
   return (DayProfit);
  }
//+------------------------------------------------------------------+

all'Expert Advisor, come verrà aggiornato il periodo per il quale vengono analizzati i trade? Per esempio, se il mio Expert Advisor funziona per un paio di giorni, quando arriva il giorno successivo, il periodo sarà aggiornato?

Implementazione della funzione di cui sopra nell'Expert Advisor:

void OnTick()
  {
   if(Day_Profit()<ProfitMax)
     {
      ExtExpert.OnTick();
     }
   return;
  }
 
altec3:

Grazie! Un'altra domanda, se aggiungo la funzione

all'Expert Advisor, come verrà aggiornato il periodo per il quale vengono analizzati i trade? Per esempio, se l'Expert Advisor funziona per un paio di giorni, poi con il giorno successivo il periodo sarà aggiornato?

L'implementazione della funzione di cui sopra nell'Expert Advisor:

L'ora deve essere impostata dall'inizio di un giorno all'ora corrente + giorno o + tre giorni.

Sapete già come determinare l'inizio del giorno.

 

Buon pomeriggio!

C'è bisogno di determinare lo spread per un simbolo prima di piazzare un ordine su di esso. La libreria standard MQL5 include la classe CSymbolInfo. È allora che ho iniziato a chiedermi, quale modo è migliore per implementare questo controllo - tramite CSymbolInfo o usando una funzione? Per favore, esperto, consigliami su cosa fare! Se questa domanda è già stata sollevata, vi sarò molto grato se mi indirizzerete nella giusta direzione.

 

Buon pomeriggio!

Ho bisogno di qualche consiglio. Come vengono considerate le barre se un EA contiene moduli di segnale da diversi timeframe?

Per esempio, ho un semplice Expert Advisor che ha due moduli di segnale basati sullo stocastico (quando la linea principale è sopra la linea di segnale su 0 e 1 barre - COMPRA, sotto la linea di segnale su 0 e 1 barre - VENDI) - uno su H1 e l'altro su M15. I pesi di entrambi i moduli sono gli stessi e nell'Expert Advisor la soglia per l'apertura di un'operazione è impostata in modo tale che i segnali di entrambi i moduli siano considerati simultaneamente. L'Expert Advisor lavora sul grafico a timeframe H1. Se guardate lo screenshot di H1, tutto è chiaro - la linea principale è superiore alla linea di segnale sull'ultima e penultima barra e questo è il motivo per cui compriamo. Ma sul grafico di M15 non riesco a capire quale barra deve essere considerata come 0 e quale come 1? L'accordo è aperto - significa che su M15 anche la condizione per l'accordo dovrebbe essere soddisfatta.

File:
H1.png  43 kb
M15.png  21 kb
 
altec3:

Per esempio, c'è un semplice Expert Advisor che include due moduli di segnale basati sullo stocastico (quando la linea principale è sopra la linea di segnale su 0 e 1 barra - COMPRA, sotto la linea di segnale su 0 e 1 barra - VENDI) - uno per H1, l'altro per M15.

La barra zero è il male! L'indicatore sulla storia si vede calcolato come se su 1 barra - chiuso (beh, semplificato, se non tenendo conto della possibilità di ri-incrocio). Di conseguenza, la strategia è costruita su una barra chiusa e nel tester, l'indicatore del principale TF in MT4 mostrerà il risultato anche di una barra zero, come una chiusa - cioè, dal futuro.
Il risultato è la delusione: una cosa è diversa nel tester, mentre il contrario è vero in tempo reale.
Prendete la mia parola - ho perso metà della mia vita cercando di capire dove sia l'errore di sistema. Per una corretta mappatura degli indicatori dei TF superiori su uno inferiore è necessario un approccio speciale. Di solito con Pushka, per esempio, tutto è semplice - moltiplicare il periodo per il rapporto TF e l'ordine, ma se ci sono calcoli non lineari, allora c'è solo l'imitazione del calcolo su 0 bar.
Ho rotto l'RSI per un anno per fargli visualizzare correttamente i TF principali sul grafico.
Non insisto, raccomando come minimo di usare segnali da barre chiuse, specialmente da quelle più alte in relazione al timeframe corrente, e anche di controllare specialmente gli indicatori personalizzati per il re-rating.
 
altec3:

Buon pomeriggio!

Ho bisogno di qualche consiglio. Come vengono calcolate le barre quando un EA contiene moduli di segnale da diversi timeframe?

Per esempio, ho un semplice Expert Advisor che ha due moduli di segnale basati sullo stocastico (quando la linea principale è sopra la linea di segnale su 0 e 1 barre - COMPRA, sotto la linea di segnale su 0 e 1 barre - VENDI) - uno su H1 e l'altro su M15. I pesi di entrambi i moduli sono gli stessi e nell'Expert Advisor la soglia per l'apertura di un'operazione è impostata in modo tale che i segnali di entrambi i moduli siano considerati simultaneamente. L'Expert Advisor lavora sul grafico a timeframe H1. Se guardate lo screenshot di H1, tutto è chiaro - la linea principale è superiore alla linea di segnale sull'ultima e penultima barra e questo è il motivo per cui compriamo. Ma sul grafico di M15 non riesco a capire quale barra deve essere considerata come 0 e quale come 1? L'accordo è aperto, significa che su M15 la condizione per l'accordo dovrebbe anche essere soddisfatta.

Nella cronologia si vedono barre già chiuse e la barra zero non è un male, ma è mobile e dobbiamo tenerne conto, perché si forma a seconda del prezzo corrente e i cambiamenti stocastici di direzione sono possibili quando i prezzi saltano, quindiè più sensibile, può chiudersi per esempio.

Prova ad aggiungere una barra in più solo per aprire 0 && 1 && 2. forse le prugne si ridurranno.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
Motivazione: