Announcement

Collapse
No announcement yet.

supporti e resistenze dinamici

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    supporti e resistenze dinamici

    Ciao a tutti,
    sono un novello con mql4 e vi chiedo un aiuto per sviluppare un’ idea.

    Voglio tracciare trend line dinamiche ( supporto e resistenza) su grafici giornalieri e settimanali, e visualizzare sul grafico le ultime due trend di resistenza e le ultime due di supporto.

    Per tracciare una trend mi occorrono due punti e li voglio trovare facendo riferimento alla posizione dello stocastico e delle candele.

    Per tracciare una Resistenza voglio almeno 2 candele consecutive con lo stocastico sotto il 50 e le candele ribassiste, la trend diventa NON valida se ho più di 2 picchi di stocastico superiore al 50 e 2 candele rialziste.

    Per tracciare un Supporto voglio almeno 2 candele consecutive con lo stocastico sopra il 50 e le candele rialziste, la trend diventa NON valida se ho più di 2 picchi di stocastico inferiore al 50 e 2 candele ribassiste.



    Trend_Resistenza.jpgTrend_Resistenza_1.jpgTrend_Supporto .jpgTrend_Supporto_1.jpg
    da dove potrei partire?

    In manuale mi resta molto facile ma voglio renderlo automatico
    allego due file per le resistenze e due file per i supporti

    Attached Files

    #2
    ciao avviolento, benvenuto nel forum.
    Quello che chiedi è sicuramente fattibile, ma è impegnativo da implementare.

    - dovrai costruire un EA che non apre trade, ma che fa tutte le elaborazioni che servono per validare le regole e disegnare le trendline dinamiche
    - su qualsiasi timframe su cui farai girare l'EA userai iStochastic() (https://docs.mql4.com/indicators/istochastic) che lavorerà su timeframe giornaliero o settimanale
    - ogni volta che lo stocastico è sotto il 50 un contatore verificherà che ci siano due candele ribassiste consecutive: quando accade, verrà disegnata una trendline usando la funzione ObjectCreate(nameTrendline,OBJ_TREND,Win,time1,pri ce1,time0,price0); (https://docs.mql4.com/objects/objectcreate)
    dove time1 price1 sono la data ed il minimo della barra su cui si verifica lo stocastico inferiore a 50
    - non appena però si verificano 2 picchi di stocastico superiore al 50 e 2 candele rialziste, la trendline va cancellata...

    ... e così via.

    E' un lavoro che richiede molto tempo per codificarlo e testarlo, ed anche un'ottima conoscenza di metaquote language
    La vita non è un giro di prova, cogli l’attimo..
    Realizzazione per Metatrader4 di trading system, indicatori, pattern grafici, Ottimizzazioni IS-OOS su Forex e CFD, Analisi di Portafoglio .

    Comment


      #3
      ciao umbertosm, grazie per avermi accolto.

      grazie per le tue indicazioni, in realtà qualcosa ho già scritto e lo stò usando ma con questa implementazione migliora notevolmente l'operatività.

      il codice che oggi stò usando "aggancia" la trend alla candela 1(quella che precede la candela attuale)


      //+------------------------------------------------------------------+
      //| trend_line_base.mq4 |
      //| Nicola |
      //| rev 1.01 |
      //+------------------------------------------------------------------+
      #property copyright "Nicola"
      #property version "1.01"
      #property description "traccia trend line dinamiche su Giornaliero, Settimanale, Mensile"
      #property strict
      #property show_inputs //mostra l'inserimento degli input quando l'expert viene caricato sul grafico

      //parametri stocastico giornaliero - settimanale - mesile
      int Stocastico_Level=50; // Livello Stocastico
      int Stocastico_K = 2; // %K
      int Stocastico_D = 2; // %D
      int Stocastico_Slow = 2; // rallentamento
      bool TrendLine_delimitata = true; // >RAY< trend line delimitata fra due punti noti= false,

      //+------------------------------------------------------------------+
      //| Expert tick function |
      //+------------------------------------------------------------------+
      void OnTick()
      {
      taccia_trend_line_giornaliero(); //traccio le linee di tendenza dinamiche
      }

      //+------------------------------------------------------------------+
      //| Trend Line Dinamiche Giornaliera - Settimanale - Mensile |
      //+------------------------------------------------------------------+
      // traccio le linee di tendenza del mercato
      void taccia_trend_line_giornaliero()
      {
      // setup contatore candele
      int ContatoreCandele = 10;

      //Cerco l'ultima candela con il picco più ALTO
      int Highest_Candle_day= iHighest(
      _Symbol, //
      _Period, //
      MODE_HIGH, //spike del prezzo più alto
      ContatoreCandele, //numero di candele da valutare nel passato
      1 //inizio a contare dalla candela 1
      );

      //Cerco l'ultima candela con il picco più BASSO
      int Lowest_Candle_day= iLowest(
      _Symbol, //
      _Period, //
      MODE_LOW, //spike del prezzo più basso
      ContatoreCandele, //numero di candele da valutare nel passato
      1 //inizio a contare dalla candela 1
      );

      //Cancello la vecchia trend line "Resistenza"
      ObjectDelete("Resistenza Day");

      //Cancello la vecchia trend line "Supporto"
      ObjectDelete("Supporto Day");

      if( _Period >= 1440)
      {
      if ( High[Highest_Candle_day] > High[1] )
      trend_grafico(
      "Resistenza Day", //nome dell'oggetto
      Time[Highest_Candle_day], //inizia a disegnare dalla candela più alta
      High[Highest_Candle_day], //dal prezzo più basso
      Time[1], //fino alla candela precedente quella attuale
      High[1], //al prezzo più basso della candela precedente quella attuale
      clrViolet, //colore oggetto
      STYLE_DOT, //Stile oggetto
      1, //Spessore e tipologia linea oggetto
      TrendLine_delimitata //Trend delimitata tra 2 punti o proiettata nel futuro
      );

      if ( Low[Lowest_Candle_day] < Low[1] )
      trend_grafico(
      "Supporto Day", //nome dell'oggetto
      Time[Lowest_Candle_day], //inizia a disegnare dalla candela più alta
      Low[Lowest_Candle_day], //dal prezzo più basso
      Time[1], //fino alla candela precedente quella attuale
      Low[1], //al prezzo più basso della candela precedente quella attuale
      clrOrange, //colore oggetto
      STYLE_DOT, //Stile oggetto
      1, //Spessore e tipologia linea oggetto
      TrendLine_delimitata //Trend delimitata tra 2 punti o proiettata nel futuro
      );
      }
      }
      //+------------------------------------------------------------------+
      //| Trend su Grafico |
      //+------------------------------------------------------------------+
      void trend_grafico( string _nome_trend, datetime _tempo_start, double _prezzo_start, datetime _tempo_end, double _prezzo_end, color _colore, int _stile, int _width, bool _ray)
      {
      //Cancello la vecchia trend line "Supporto"
      ObjectDelete( _nome_trend );

      // creo la nuova trend line
      ObjectCreate(
      0, //grafico corrente
      _nome_trend, //nome dell'oggetto
      OBJ_TREND, //Tipo oggetto
      0, //finestra principale
      _tempo_start, //candela iniziale
      _prezzo_start, //prezzo iniziale
      _tempo_end, //candela finale
      _prezzo_end //prezzo finale
      )
      ;

      //Definisco colore oggetto
      ObjectSetInteger( 0, _nome_trend, OBJPROP_COLOR, _colore);

      //Definisco stile oggetto
      ObjectSetInteger(0,_nome_trend,OBJPROP_STYLE,_stil e );

      //Definisco spessore linea oggetto
      ObjectSetInteger(0,_nome_trend,OBJPROP_WIDTH,_widt h );

      //Definisco Trend delimitata tra 2 punti o proiettata nel futuro
      ObjectSetInteger(0,_nome_trend,OBJPROP_RAY, _ray);
      }
      con le funzioni iStochastic ho già avuto modo di fare qualcosina

      la difficoltà che stò riscontrando è quella di far iterare una variabile con le condizioni dello stocastico.

      hai qualche esempio da mostrarmi?

      Comment


        #4
        per tenere conto dei valori dello stocastico e contare su quante candele ad esempio si mantiene lo stocastico sotto a 50
        è necessario
        - avere una variabile contatore, ad esempio int contatore , definita a livello globale, cioè una classica variabile il cui campo di applicazione è l'intero programma e che quindi mantiene il valore al variare dei tick,
        - contare le candele ad avvio di barra, quindi ti serve una funzione che controlla se è arrivata una nuova barra per poter interrogare il valore dello stocastico su questa nuova barra.

        Avrai quindi una nuova variabile booleana New_Bar

        che ad ogni tick assume il valore della funzione New_Bar()

        New_Bar = New_Bar(); // Verifica se è il tick di avvio di una nuova barra

        e la funzione è definita così:


        //+------------------------------------------------------------------+
        bool New_Bar() // funzione che identifica l'avvio di una nuova barra
        {
        static datetime New_Time=0; // memorizza la data di avvio dell'ultima barra; viene inizializzata a 0, corrispondente a 1970.01.01 00:00
        if(New_Time!=Time[0]) // Se la barra corrente ha diversa data di avvio memorizzata da New_Time, è stata individuata una nuova barra
        {
        New_Time=Time[0]; // Viene memorizzata la data di avvio della nuova barra
        return(true); // C'è una nuova barra
        }
        else return(false); // La barra corrente ha la stessa data di avvio memorizzata da New_Time
        }
        //+------------------------------------------------------------------+


        Poi se New_Bar è vera --> calcoli il valore dello stocastico e se è sotto 50, verifichi se la candela appena terminata è ribassista e se lo è il contatore diventa +1.
        alla successiva barra --> calcoli il valore dello stocastico e se è sotto 50, verifichi se la candela appena terminata è ribassista e se lo è il contatore diventa +2
        ora disegni la trendline.

        Se invece all'avvio della nuova barra non si verificano le condizioni, cancelli la trenline e metti il contatore = 0.

        e ricominci
        La vita non è un giro di prova, cogli l’attimo..
        Realizzazione per Metatrader4 di trading system, indicatori, pattern grafici, Ottimizzazioni IS-OOS su Forex e CFD, Analisi di Portafoglio .

        Comment


          #5
          per ora grazie mille
          per le indicazioni molto utili, faccio un po di test e ti aggiorno

          Comment

          Working...
          X