Discussione sull’articolo "MQL5 Cookbook - Consulente esperto multi-valuta e il lavoro con ordini in sospeso in MQL5"

 

Il nuovo articolo MQL5 Cookbook - Consulente esperto multi-valuta e il lavoro con ordini in sospeso in MQL5 è stato pubblicato:

Questa volta creeremo un Expert Advisor multi-valuta con un algoritmo di trading basato sul lavoro con gli ordini in sospeso Buy Stop e Sell Stop. Il modello che creeremo sarà progettato per gli scambi/test infragiornalieri. L'articolo prende in considerazione i seguenti argomenti:

  • Trading in un intervallo di tempo specificato. Creiamo una funzionalità che ci permetterà di impostare l'ora di inizio e fine trading. Ad esempio, può essere l'ora delle sessioni di trading europee o americane. Sicuramente ci sarà l'opportunità di trovare l'intervallo di tempo più adatto durante l'ottimizzazione dei parametri dell'Expert Advisor.
  • Inserimento/modifica/cancellazione ordini in sospeso.
  • Elaborazione degli eventi commerciali: verifica se l'ultima posizione è stata chiusa a Take Profit o Stop Loss e controllo sullo storico delle transazioni per ogni simbolo.

Рецепты MQL5 - Мультивалютный советник и работа с отложенными ордерами на MQL5


    Autore: Anatoli Kazharski

     

    Tempo.

    Le ore non sono sempre sufficienti, sono necessari anche i minuti. Ad esempio, se il mercato apre e chiude a orari frazionati.

    E questa funzione solleva delle domande: è necessario fare trading fino a mezzanotte molto più spesso di quanto non siano necessari i minuti.

    bool IsInTradeTimeRange(int symbol_number)
      {
    //--- Se il trading su intervalli temporali è abilitato
       if(TradeInTimeRange[symbol_number])
         {
          //--- Struttura di data e ora
          MqlDateTime last_date;
          //--- Ottenere i dati di data e ora più recenti
          TimeTradeServer(last_date);
          //--- Al di fuori dell'intervallo di tempo autorizzato
          if(last_date.hour<StartTrade[symbol_number] ||
             last_date.hour>=EndTrade[symbol_number])
             return(false);
         }
    //--- Nell'intervallo di tempo consentito
       return(true);
      }
     
    TheXpert:

    Tempo.

    Le ore non sono sempre sufficienti, sono necessari anche i minuti. Ad esempio, se il mercato apre e chiude a orari frazionati.

    E questa funzione solleva delle domande: è necessario fare trading a mezzanotte molto più spesso che a minuti.

    Sì, sono d'accordo. Cercherò di visualizzarlo più tardi, in un nuovo schema.

    Allora forse, invece delle enumerazioni, dovremmo creare una riga in cui l'utente specifichi da solo l'ora. Per esempio:"9: 35". Altrimenti l'elenco dei parametri si allunga di altri tre parametri (nello schema dell'articolo) per specificare i minuti.

    Sarebbe bello se ci fosse una comoda possibilità standard per specificare l'ora. Ora abbiamo datetime, dobbiamo creare il tempo. )

     

    In effetti, è tutto codice di programma, IMHO non è adatto come articolo, piuttosto è per la sezione Code Base.

     
    revers45:

    In effetti, è tutto codice di programma, IMHO non funziona come articolo, piuttosto è per la sezione Code Base.

    Oh, bene. Allora buon lavoro. Scrivi e pubblica tutto in Code Base ;)
     
    revers45:

    In effetti, è tutto codice di programma, IMHO non funziona come articolo, piuttosto è per la sezione Code Base.

    Tali articoli sono comodi per l'apprendimento del linguaggio.

    È più facile leggere sia il testo che il codice e guardare le illustrazioni in una volta sola, piuttosto che scorrere l'articolo separatamente e separare i codici da file diversi.

    Tuttavia, sono d'accordo sul fatto che manchi una parte descrittiva. Concetto e punti principali dell'implementazione sotto forma di testo semplice.

     
    komposter:

    Tali articoli sono comodi per l'apprendimento di una lingua.

    È più facile leggere sia il testo che il codice e guardare le illustrazioni in una sola volta, piuttosto che scorrere l'articolo separatamente e separare i codici da file diversi.


    Tuttavia, sono d'accordo sul fatto che manchi una parte descrittiva. Concetto e punti principali dell'implementazione sotto forma di testo semplice.

    Questa serie di articoli è più per l'apprendimento sequenziale delle lingue. Lo schema è stato descritto in uno degli articoli precedenti e probabilmente non ha senso descrivere di nuovo tutto. All'inizio dell'articolo c'è un link all'articolo in cui questo schema è stato considerato in dettaglio. Qui sono state scritte funzioni aggiuntive e sono state apportate alcune piccole modifiche. Tutto è semplice e non c'è nulla di superfluo, e ogni riga del codice è commentata. Penso che sia bello avere un sacco di schemi diversi già pronti che si possono prendere e usare.

    Non riesco a immaginare cos'altro si sarebbe potuto aggiungere all'articolo. Ma va bene così. ))

     
    Perché tanto codice per diversi simboli? Non sarebbe più semplice mettere un Expert Advisor per ogni simbolo, credo che il programma verrebbe eseguito più velocemente. A questo proposito, caro autore, potresti dirmi come convertire queste funzioni per lavorare con gli ordini pendenti, in modo che siano solo per un simbolo, tranne che per il modo di inserire nella variabile #define NUMBER_OF_SYMBOLS uno?
     
    kuva:
    Perché c'è tanto codice per diversi simboli?

    Per poter testare il sistema nel tester su più simboli contemporaneamente.

    kuva:
    Non sarebbe più semplice mettere un Expert Advisor su diversi simboli, secondo me sarebbe più veloce eseguire i programmi. A questo proposito, caro autore, potresti dirmi come convertire questo codice in modo che funzioni solo su un carattere, a parte il modo di inserire nella variabile #define NUMBER_OF_SYMBOLS uno?

    Se si vuole che funzioni solo su un carattere, è sufficiente rimuovere tutti i cicli relativi alla ricerca dei caratteri. Da alcune funzioni sarà poi necessario rimuovere il primo parametro del numero di sequenza dei caratteri.

    Inoltre, gli array inizializzati con i valori dei parametri esterni non saranno più necessari. Nelle funzioni in cui venivano utilizzati, dovranno essere sostituiti da variabili di parametri esterni.

    [Eliminato]  
    Eseguite un test di avanzamento su zecche reali: il risultato dell'ottimizzazione sarà opposto.
     
    È terribilmente scomodo cercare i simboli tramite symbol_number. Ero solito usare questo schema, ma ora sono passato all'OOP. Ogni simbolo = un'istanza della classe. In fase di esecuzione, su ogni evento OnChartEvent, si cercano le istanze della classe in ordine. Funziona anche un po' più velocemente.