Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1668

 
artem artem #:

SanAlex, sì, ho guardato il tester per quello attuale di quest'anno, tutto ok) I risultati sono buoni, nel prossimo futuro cercherò di eseguirlo su un conto reale

Come si chiama l'Expert Advisor? L'hai scaricato da kodobase? Ho bisogno di vedere come l'autore l'ha implementato nella funzione

//+------------------------------------------------------------------+
// Permission to trade in this day                                   |
//+------------------------------------------------------------------+
bool TradingDay(int hmin, int hmax) // Определение времени и дня разрешения торговли
  {
   bool dtrade = false;
   switch(DayOfWeek())
     {
      case 1: // Monday
         if(Monday == 1)
            dtrade = true;
         break;
      case 2: // Tuesday
         if(Tuesday == 1)
            dtrade = true;
         break;
      case 3: // Wednesday
         if(Wednesday == 1)
            dtrade = true;
         break;
      case 4: // Thursday
         if(Thursday == 1)
            dtrade = true;
         break;
      case 5: // Friday
         if(Friday == 1)
            dtrade = true;
         break;
      default: //
         dtrade = false;
         break;
     }
   if(dtrade && !(Hour() >= hmin && Hour() <= hmax))
      dtrade = true;
   return dtrade;
  }
//+------------------------------------------------------------------+

Ci manca qualcosa - per aggiungere la condizione all'ontik

 
SanAlex #:

Come si chiama l'Esperto? L'hai scaricato da kodobase? Ho bisogno di vedere come l'autore l'ha implementato nella funzione

Manca qualcosa - per aggiungere una condizione all'ontik

Sasha, il lavoro di cronometraggio non è stato incluso. Ho solo aggiunto alcune caratteristiche da inserire durante lo sviluppo)
 
MakarFX #:
Sasha, il lavoro di cronometraggio non è stato incluso. Ho solo aggiunto alcune caratteristiche da inserire durante lo sviluppo)

Lo rifarò a modo mio.

 
artem artem #:

SanAlex, sì, ho guardato il tester per quello attuale di quest'anno, tutto ok) I risultati sono buoni, nel prossimo futuro cercherò di eseguirlo su un conto reale

Questo e il tempo funzioneranno - ho cambiato la funzione

//---
input string   s0 = "Баланс";                  // 1
input string   Template       = "ADX";         // Имя шаблона(without '.tpl')
input double   TargetProfit   = 1000000;       // Баланс + Прибыль(прибавить к балансу)
input double   TargetLoss     = 0;             // Баланс - Убыток(отнять от баланса)
input string   s2 = "Trading options";         // 2
input double   Lots           = 0.1;           // Lots
input double   MaximumRisk    = 0.02;          // MaximumRisk
input double   DecreaseFactor = 3;             // DecreaseFactor
input double   InpSLoss       = 4000;          // стоплосс
input double   InpTProfit     = 2000;          // тейкпрофит
input string   s3 = "TP SL";                   // 3
input double   InpTakeProfit  = 2000;          // Exchange TP
input double   InpStopLoss    = 4000;          // Exchange SL
input string   s4 = "Индикатор MA";            // 4
input int      MovingPeriodLw = 13;            // MovingPeriodLw
input int      MovingPeriodS1 = 55;            // MovingPeriodS1
input int      MovingPeriodS2 = 89;            // MovingPeriodS2
input string   s5 = "Индикатор MACD";          // 5
input int      InpFastEMA     = 12;            // Fast EMA Period
input int      InpSlowEMA     = 26;            // Slow EMA Period
input int      InpSignalSMA   = 9;             // Signal SMA Period
input string   s6 = "Start Stop";              // 6
input datetime HoursFrom      = D'1970.01.02'; // 1 Время: старт
input datetime HoursTo        = D'1970.01.01'; // Время: стоп
input datetime HoursFrom2     = D'1970.01.01'; // 2 Время: старт
input string   s7 = "Time:Start Stop";         // 7
input int      HoursFrom1     = 0;             // Время: старт
input int      HoursTo1       = 24;            // Время: стоп
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Закрыть Общий профит или профит на паре
   if(ProfitTarget())
     {
      return;
     }
//--- Закрыть профит BUY или SELL на паре
   ProfitOnTick();
//---
   if((HoursFrom<HoursTo && TimeLocal()>=HoursFrom && TimeLocal()<HoursTo) ||
      (HoursFrom>HoursTo && (TimeLocal()<HoursTo || TimeLocal()>=HoursFrom)) ||
      (HoursFrom2<HoursTo2 && TimeLocal()>=HoursFrom2 && TimeLocal()<HoursTo2) ||
      (HoursFrom2>HoursTo2 && (TimeLocal()<HoursTo2 || TimeLocal()>=HoursFrom2)))
     {
      MqlDateTime currTime;
      TimeLocal(currTime);
      int hour0 = currTime.hour;
      if((HoursFrom1 < HoursTo1 && hour0 >= HoursFrom1 && hour0 < HoursTo1) ||
         (HoursFrom1 > HoursTo1 && (hour0 < HoursTo1 || hour0 >= HoursFrom1)))
        {
         // Определение направления пересечения мувингов
         if(Init)
            InitMetod();
         // Ожидание нового бара на графике
         if(timeprev == Time[0])
            return;
         timeprev = Time[0];
         // Открытие ордера по методу Пуриа
         CheckForOpen();
        }
     }
  }
//+------------------------------------------------------------------+

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

La funzione Time in mt4 e in mt5 funziona

File:
 
MakarFX #:
Non vuoi sbarazzarti delle classi?

Li ho scoperti solo di recente. Non so, è una cosa molto utile. Cosa suggerisce? Mettere tutto in funzioni? Se questo risolvesse il problema.

Ho due oggetti globali (bar, db_last) di una classe Bar, il primo è inizializzato con i parametri di ogni nuova barra (solita barra sul grafico), e il secondo salva una barra corrispondente a tutte le condizioni. Infatti, in un altro oggetto locale di classe Order tutti i calcoli sono fatti a partire dai parametri db_last per aprire un ordine. I parametri db_last e bar sono usati in molti posti, ma solo per la lettura, l'inizializzazione e l'assegnazione avvengono in un posto, in OnTick(), quindi non dovrebbero esserci cambiamenti inaspettati negli oggetti.

void OnTick()
{
  last_time = iTime(NULL, 0, 0);
  BreakevenActivate();

  if(last_time > bar.time_open){
    bar.Initialize();
    TrawlOnFractals();

    if(BarRelativeMA() == "bear"){
      n_arrow_down++;
      db_last = bar;
      if(db_last.IsBearishDB() == true) OpenOrder("bear");
      ArrowCreate(OBJ_ARROW_DOWN,0,"ArrowDown"+IntegerToString(n_arrow_down,4,'0'),
                  0, iTime(NULL,0,1),AnchorPrise("bear"),ANCHOR_BOTTOM);
    }

    if(BarRelativeMA() == "bull"){
      n_arrow_up++;
      db_last = bar;
      if(db_last.IsBullishDB() == true) OpenOrder("bull");
      ArrowCreate(OBJ_ARROW_UP,0,"ArrowUp"+IntegerToString(n_arrow_down++,4,'0'),
                  0, iTime(NULL,0,1),AnchorPrise("bull"),ANCHOR_TOP);
    }

    bar.time_open = last_time;
  }
   
}
 
Nerd Trader #:

Li ho scoperti solo di recente. Non so, è una cosa molto utile. Cosa suggerisce? Mettere tutto in funzioni? Se questo risolvesse il problema.

Ho due oggetti globali (bar, db_last) di una classe Bar, il primo è inizializzato con i parametri di ogni nuova barra (solita barra sul grafico), e il secondo salva una barra corrispondente a tutte le condizioni. Infatti, in un altro oggetto locale di classe Order tutti i calcoli sono fatti a partire dai parametri db_last per aprire un ordine. I parametri db_last e bar sono usati in molti posti, ma solo per la lettura, l'inizializzazione e l'assegnazione avvengono in un posto, in OnTick (), quindi non dovrebbero verificarsi cambiamenti inaspettati negli oggetti.

Io lo proverei - non costa soldi).

Ma ci sono errori, inoltre, errori con la semplice normalizzazione

Puoi mandarmi il file in un messaggio privato? Gli darò un'occhiata.
 
SanAlex #:

Come si chiama l'Esperto? L'hai scaricato da kodobase? Ho bisogno di vedere come l'autore l'ha implementato nella funzione

Ho perso qualcosa - per aggiungere la condizione all'ontik

SanAlex, ho allegato la versione scaricata in questo messaggio - ha Puria + trailing stop + Breakeven level + watchdog trading. Vorrei testare il trading in base all'orologio, ma non l'ho ancora fatto)

 
MakarFX #:

La mancanza di storia influenza le letture dell'indicatore all'inizio del test

MakarFX, ho pensato anche a questo, quindi dovrebbe funzionare come dovrebbe

 
artem artem #:

SanAlex, ho allegato la versione che ho scaricato in questo post - è Puria + trailing stop + breakeven level + clock trading. Vorrei testare il trading in base all'orologio, ma non l'ho ancora fatto).

Ho trovato questo in kodobase https://www.mql5.com/ru/code/12654

- Ho mancato il tuo obiettivo, cosa volevi cambiare in esso?

Советник по методу Пуриа
Советник по методу Пуриа
  • www.mql5.com
Советник открывает позиции по алгоритму метода Пуриа.
 
SanAlex #:

Ho trovato questo in kodobase https://www.mql5.com/ru/code/12654

- Ho mancato il tuo obiettivo, cosa volevi cambiare in esso?

Quali aggiunte volevo fare:

1. Per fare in modo, che l'apertura di un affare e il controllo di tutte le condizioni dell'indicatore(attraversamento di un veloce (5) due lenti (75) (85) e l'apertura della barra MACD nella stessa direzione con un veloce (5) ) è stato eseguito solo al prezzo di apertura di una nuova candela (il primo tick di ogni candela 30 minuti);
  1. Creare le condizioni per "azzerare" gli indicatori. Per esempio, per un movimento veloce (5) Se è più alto del lento - allora è un segnale per comprare. Se poi va verso il basso e tocca uno di essi, o si trova tra il movimento lento (75) e (85)- allora il segnale dell'indicatore di movimento veloce si" azzera" per così dire, e rimarrà in questa posizione" zero" finché tocca o rimane tra i lenti. Se dopo questo il veloce attraversa entrambi i lenti da un lato(incluso se torna indietro al lato da cui è venuto prima di toccare i lenti)- allora sarà un segnale di questo indicatore. Con il MACD la situazione è simile- Solo il MACD=0 sarà considerato come "azzeramento"(se sulla prima candela il MACD, per esempio, ha aperto con 0.0043, e sulla seconda candela con -0.0010, significa che il MACD sulla seconda candela si è" azzerato" e ha dato un nuovo segnale). Tuttavia, c'è un momento in cui il veloce (5) e il MACD dovrebbero essere più o meno "alla pari" - se (5) non cambia la sua posizione rispetto al lento, e il MACD ha aperto sulla candela precedente nella zona sbagliata (nessuna entrata), e su quella successiva - nella stessa zona del veloce, allora tutte le condizioni sono convergenti e un'entrata all'ordine dovrebbe essere fatta. Si noti che tutto questo dovrebbe essere solo sui prezzi di apertura delle candele - solo su questo tick;
  1. E l'ultimo, per far aspettare all'Expert Advisor 4 aperture di candele consecutive:

    1. 1° prezzo aperto - (5) sopra (75) e (85) + barra MACD aperta sopra 0- 1 su 4 conferme;
    2.2. Il prezzo di apertura della 2a candela - (5) sopra (75) e (85) + MACD bar aperto sopra 0- 2 su 4 conferme è;
    3. Il prezzo di apertura della 3a candela - (5) sopra (75) e (85) + MACD bar aperto sopra 0- 3 su 4 conferme è;
    4.Prezzo di apertura della 4a candela - (5) sopra (75) e (85) + barra MACD aperta sopra lo 0- 4 conferme su 4- Aprire trade buy sulla stessa candela (4a).
La stessa situazione con gli ordini di vendita, solo nell'altra direzione gli indicatori dovrebbero aprirsi. E c'è un punto importante- se, per esempio, in qualsiasi fase della 1a candela alla 4a, gli indicatori cambiano la loro posizione(per esempio, sulla 3a candela di apertura, la barra MACD si apre o sotto 0, o = 0)- allora tutto si resetta, perché i segnali non sono stati controllati sull'apertura della 4a candela di fila.