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

 
MakarFX:

mql4 è anche possibile qui

Non credo che sia così. L'Expert Advisor crea un oggetto grafico sotto forma di linea di tendenza:

   if(PriceDemUp2() != 0 && PriceDemUp1() != 0)
      CreateLine(trendUp, TimeDemUp2(), PriceDemUp2(), TimeDemUp1(), PriceDemUp1(), TrendUpColor);
   if(PriceDemDw2() != 0 && PriceDemDw1() != 0)
      CreateLine(trendDw, TimeDemDw2(), PriceDemDw2(), TimeDemDw1(), PriceDemDw1(), TrendDwColor);

Ma dopo aver riavviato il terminale, solo i parametri del primo punto sono disponibili. I parametri del punto precedente appariranno solo dopo la formazione del nuovo punto. Credo di cominciare a capire - ho bisogno di trovare non solo l'ultimo punto calcolato dall'indicatore ma anche il precedente. Come posso saltare l'ultimo (primo) punto e calcolare il prossimo? Il primo punto lo trovo così:

int BarPointDemUp()
{
   int i;
   
   for(i = 0; i < 70; i++)
   {   
      if(iCustom(NULL, 0, "DeMark Point", LevelDP, 0, i) != 0)
         return(i);
   }
   return(-1);   
}
//////////////////////////////////////
int BarPointDemDw()
{
   int i;
   
   for(i = 0; i < 70; i++)
   {   
      if(iCustom(NULL, 0, "DeMark Point", LevelDP, 1, i) != 0)
         return(i);
   }
   return(-1);
 
Youri Lazurenko:

Non mi sembra che sia questo il caso. L'EA crea un oggetto grafico sotto forma di linea di tendenza:

Ma dopo aver riavviato il terminale sono disponibili solo i parametri del primo punto. I parametri del punto precedente appariranno solo dopo la formazione di un nuovo punto. Credo di cominciare a capire - ho bisogno di trovare non solo l'ultimo punto calcolato dall'indicatore ma anche il precedente. Come posso saltare l'ultimo (primo) punto e calcolare il prossimo? Il primo punto lo trovo così:

Mettete un contatore.

int BarPointDemUp()
{
   int i;
   int c=0;
   for(i = 0; i < 70; i++)
   {   
      if(iCustom(NULL, 0, "DeMark Point", LevelDP, 0, i) != 0)
       c++;
        if(c==2)  return(i);
   }
   return(-1);   
}

In generale, fate una matrice e riempitela, poi prendete il punto richiesto dalla matrice

 
Vitaly Muzichenko:

Impostare un contatore

E in generale, fate un array e riempitelo, poi prendete il punto desiderato dall'array.

Grazie. Mi sembra che il contatore che hai fornito sia proprio quello di cui abbiamo bisogno e, soprattutto, semplice.

Mentre il mio sito veniva aggiornato, ho provato la variante che suggerisci. Funziona tutto. Grazie mille. Così semplice, e stavo cominciando ad entrare nel vivo delle cose. Inoltre, le funzioni di prezzo e tempo di cui sopra sono state semplificate.

 
MakarFX:

Ho evidenziato ciò che era sbagliato

l'evidenziazione gialla non è necessaria e può essere cancellata.

La funzione evidenziata in verde deve essere al di fuori di OnStart(),

dove vuoi definire una nuova barra, usa l'evidenziazione marrone.

Grazie!)

 

Buon giorno a tuttiJ Per favore aiutatemi a trovare un codice funzionante di trailing stop su parabolica. Voglio chiedere come questa funzione dovrebbe essere aggiunta al mio Expert Advisor, in modo da seguire il percorso quando il prezzo sale di un certo numero di punti? Ringrazio in anticipo, e chiedo alle persone esperte e competenti di non passare - il Graal devo finirlo in qualche modo ;-)

 
DanilaMactep:

Buon giorno a tuttiJ Per favore aiutatemi a trovare un codice funzionante di trailing stop su parabolica. Voglio chiedere come aggiungere questa funzione al mio Expert Advisor, in modo che segua una traccia quando il prezzo sale di un certo numero di punti? Molte grazie in anticipo, e per favore non passate da persone esperte e competenti - dovrei in qualche modo aggiungere il Graal ;-)

come questo

//+------------------------------------------------------------------+
   int    Tral = 50;
   double Sar  = iCustom(_Symbol,Period(),"Parabolic",0.02,0.2,0);
//+------------------------------------------------------------------+
   for(int pos=0;pos<OrdersTotal();pos++)
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
      if(OrderSymbol()==_Symbol)
        {
         if(OrderType()==OP_SELL)
           {
            if(OrderOpenPrice()>Ask+Tral*Point&&OrderStopLoss()!= Sar)
            if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Sar,Digits),OrderTakeProfit(),0,clrNONE))
            {Print("Order SELL Modify")}
           }
         if(OrderType()==OP_BUY)
           {
            if(OrderOpenPrice()<Bid-Tral*Point&&OrderStopLoss()!= Sar)
            if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Sar,Digits),OrderTakeProfit(),0,clrNONE))
            {Print("Order BUY Modify")}
           }
        }
 

Potete dirmi come aggiornare il giorno del mese per riflettere il nuovo giorno dell'anno.


   datetime time_current=TimeCurrent();
   MqlDateTime time_structure;
   TimeToStruct(time_current,time_structure);
   int curr_day_year=time_structure.day_of_year;
   int start_day=(curr_day_year-m_days_back)>0?curr_day_year-m_days_back:0;
   time_structure.day_of_year=start_day;
   time_structure.hour=0;
   time_structure.min=0;
   time_structure.sec=0;
   datetime start_time=StructToTime(time_structure);

Così, ho pensato che lo start_time sarebbe stato con il giorno dell'anno cambiato. Ma c'è la vecchia data...

Hmm... probabilmente è più facile togliere dei secondi...

 
leonerd:

Non riesco a pensare ora, ti faccio un esempio, forse ti farai un'idea

//получаем номер недели в году
int GetWeekNumber(datetime eTime)
   {
   MqlDateTime eDate;
   //получаем дату начала года
   TimeToStruct(eTime,eDate);
   eDate.mon=1;
   eDate.day=1;
   eDate.hour=0;
   eDate.min=0;
   eDate.sec=0;
   datetime StartTime=StructToTime(eDate);
   //возвращаем дату назад в структуру, чтобы определить день недели начала года
   TimeToStruct(StartTime,eDate);
   return(int((eTime-StartTime+86400*eDate.day_of_week)/604800));
   }

un'idea https://www.mql5.com/ru/users/integer

Dmitry Fedoseev
Dmitry Fedoseev
  • www.mql5.com
Профиль трейдера
 
MakarFX:

come questo

Makar, grazie mille per il codice - ho riscritto il codice passando variabili esterne a icastom invece di valori fissi. Per favore chiarite, è intTral = 50; è questa la distanza alla quale la rete a strascico sarà mantenuta o è la distanza in pip dopo la quale la rete a strascico sarà attivata ?

 
DanilaMactep:

Makar, grazie mille per il codice - ho riscritto il codice passando variabili esterne a icastom invece di valori fissi. Si prega di chiarire, è intTral = 50; è la distanza di profitto in pip dopo la quale il trawl è acceso ?

è la distanza di profitto in pip dopo la quale si accende la rete a strascico