Spiegazione dettagliata di iCustom - pagina 4

 
honest_knave: Non ho mai saputo che si chiamasse caso del cammello. Grazie!
Sembra che il moderatore abbia cancellato il mio post precedente perché aveva un link a WikiPedia, quindi basta fare una ricerca su WikiPedia (o Google) per un po' di storia e dettagli sul "Camel Case".
 
Fernando Carreiro:
Sembra che il moderatore abbia cancellato il mio post precedente perché aveva un link a WikiPedia, quindi basta fare una ricerca su WikiPedia (o Google) per un po' di storia e dettagli su "Camel Case".
Il tuo post è stato rimosso perché era un doppio. Lo stesso link è già stato postato.
 
Continuando da #23 e incapsulando in una funzione #26, ora mostro una struct che funziona sia su MT4 che su MT5. (Per il post-build 600, ho cambiato i punti non validi(#29) nei nomi delle variabili, e approprato gli ints alle enumerazioni standard).
Non compilato, non testato.
struct SFX{                            // SFX indicator at #1
   #define  SFX_NAME_PATH   "SFX"       // Indicator filename without extension,
                                       // including blanks if any.
   enum SFXbuffer{SFX_STD, SFX_STDMA};
   string                  PairName;
   ENUM_TIMEFRAMES         tf;
   int                     StdDev_MA_Period;
   int                     StdDev_MA_Shift;
   ENUM_MA_METHOD          StdDev_MA_Method;
   ENUM_APPLIED_PRICE      StdDev_MA_Price;
   int                     MA_Fast_Period;
   ENUM_MA_METHOD          MA_Fast_Method;
   int                     MA_Fast_Shift;
   #define  CheckOncePerBar true;
   void SFX()      : PairName(_Symbol),            tf(PERIOD_CURRENT),
                     StdDev_MA_Period(12),         StdDev_MA_Shift(0),
                     StdDev_MA_Method(MODE_SMA),   StdDev_MA_Price(PRICE_CLOSE),
                     MA_Fast_Period(3),            MA_Fast_Method(MODE_SMMA),
#ifndef __MQL5__
                     MA_Fast_Shift(0){}
   double get(SFXbuffer buf, int iBar = 0){
      return iCustom(PairName, tf, SFX_NAME_PATH,
                     StdDev_MA_Period,             StdDev_MA_Shift,
                     StdDev_MA_Method,             StdDev_MA_Price,
                     MA_Fast_Period,               MA_Fast_Method,
                     MA_Fast_Shift,                CheckOncePerBar,
                     buf, iBar);
   }  // get
#else // MQL5
                     MA_Fast_Shift(0),             Handle(INVALID_HANDLE){}
   void ~SFX(){   if(Handle != INVALID_HANDLE) IndicatorRelease(Handle);   }
   double get(SFXbuffer buf, int iBar = 0){
      if(Handle == INVALID_HANDLE){
         Handle = iCustom(PairName, tf, SFX_NAME_PATH,
                     StdDev_MA_Period,             StdDev_MA_Shift,
                     StdDev_MA_Method,             StdDev_MA_Price,
                     MA_Fast_Period,               MA_Fast_Method,
                     MA_Fast_Shift,                CheckOncePerBar);
         if(Handle == INVALID_HANDLE){
            PrintFormat("%s: iCustom(%s) Failed: %i",
                        __FUNCTION__, SFX_NAME_PATH, _LastError);
            return 0;
         }
      }
      double  value[1]; CopyBuffer(Handle, buf, iBar, 1, value);
      return  value[0];
   }  // get
 Private:
   int                  Handle;     // MT5 only
#endif   // __MQL5__
}; // SFX
///////////////////////////////////////////////////////////////////////////////
SFX   SFXindicator;
// SFXindicator.StdDev_MA_Period = ...;   // modification of default parameters.
:
double     STDBuffer = SFXindicator.get(SFX_STD,   0);   // example calls
double     stddevma  = SFXindicator.get(SFX_STDMA, 0);
Non compilato, non testato.
 

Salve, ho una domanda veloce (e indolore, spero) su iCustom: diciamo che ho 3 indicatori chiamati Ind_A, Ind_B e Ind_C, e ho un Expert Advisor chiamato EA.

L'EA chiama tutti e 3 gli indicatori usando iCustom, passando i loro argomenti e ottenendo i risultati indicizzando i loro buffer di risposta.

Collego i miei 3 indicatori sul grafico EURUSD ed eseguo il mio EA; concentriamoci sull'indicatore Ind_A, è in esecuzione come indicatore ma allo stesso tempo viene eseguito dall'EA: l'istanza è la stessa o abbiamo due istanze di ind_A in esecuzione? (cioè, un'istanza gira per conto suo e l'altra istanza vive all'interno dell'EA).

In questo caso, ogni istanza ha il proprio buffer? o il buffer è condiviso tra tutte le istanze dell'indicatore?

Molte grazie!

 

Mi dispiace risvegliare di nuovo questo thread. Ma ho pensato che la mia domanda appartiene a questo argomento.

Cerco di accedere a 2 buffer da un indicatore personalizzato trend-target, l'indicatore ha un ingresso = 60, e due buffer Band UP e Band LO

usando

double Value1 = iCustom(Symbol(),0,"TrendTarget.ex4",60,0,1,0);



double Value2 = iCustom(Symbol(),0,"TrendTarget.ex4",60,0,0,1);double Value1 = iCustom(Symbol(),0,"TrendTarget.ex4",60,0,1,0);



Comment("iCustom returned v1= "+Value1+ " and value2= ",Value2);

è il modo in cui ho impostato i parametri per questo iCustom corretto? perché mi sembra di non ottenere i valori Band Up e Band LO non esatto ai buffer nel pannello di controllo dei dati pls controllare l'immagine allegata. Solo le 2 o 3 prime cifre decimali o 3e giuste ma per una quotazione FX tutte le 4 cifre devono essere corrette è giusto?

Spero che i codificatori e gli utenti esperti di MQL5 possano aiutarmi a correggere rapidamente questo problema? Grazie in anticipo

-----------------------------------------------------------------------------------------------------
Apropos cosa è il tuo indicatore ha 5 ingressi e 4 buffer,

double Value1 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,1,0,0,0);

double Value2 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,2,0,0);

double Value3 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,0,3,0);

double Value4 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,0,0,4);


Come questo sopra?

 
ntk2017: Mi dispiace risvegliare di nuovo questo thread. Ma

Per favore modifica il tuo post (originale) e usa il tasto CODICE (Alt-S)! (Per grandi quantità di codice, allegalo.)
Regole generali e buone pratiche del forum. -Generale - Forum di programmazione MQL5
Editor di messaggi

 
ntk2017: A proposito, il tuo indicatore ha 5 ingressi e 4 buffer,
double Value1 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,1,0,0,0);
double Value2 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,2,0,0);
double Value3 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,0,3,0);
double Value4 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,0,0,4);

Come questo qui sopra?

Assolutamente no.

iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,BufferIndex,BarIndex);
 
William Roeder:

Assolutamente no.

Dovrei usare come questo
double value1 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,1,0,0,0,0); //with BarIndex=0, when only check on close or 1= when check on every tick;
 double value2 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,1,0,0,0);
double value3 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,0,1,0,0);
double value4 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,0,0,1,0);

Grazie per la tua correzione ho appena trovato un esempio "Uso combinato di programmi"(https://book.mql4.com/samples/shared) in mql5 Penso che l'esempio in codig è quello che mi serve. Studierò quella parte, se ho domande nella mia programmazione spero che mi aiuterete a farla funzionare ottenendo più stabilità e più profitto

Combined Use of Programs - Simple Programs in MQL4 - MQL4 Tutorial
Combined Use of Programs - Simple Programs in MQL4 - MQL4 Tutorial
  • book.mql4.com
It was said earlier that according to MQL4 rules trade functions cannot be used in custom indicators, that is why for automated trading Expert Advisors or scripts should be used. However, the resource-saving technology used for calculations in indicators (see Creation of Custom Indicators) is widely used when creating trading programs. In most...
 
William Roeder:

Assolutamente no.

Ho il codice in questo modo ora posso vedere i buffer 1, 2 del TrendTarget (Ma ancora non tutte le 4 cifre corrette!!!), ho impostato il valore BarsIndex su ogni stick a 1 perché mi piace ricontrollare il TrendTarget

   double shortSma, longSma, ShortSL, ShortTP, LongSL, LongTP,Band_UP,Band_LO;

   double Value1,Value2 ;





   Value1 = iCustom(Symbol(),0,"TrendTarget.ex4",60,1,1);

   Value2 = iCustom(Symbol(),0,"TrendTarget.ex4",60,2,1);

   Band_UP = Value1;

   Band_LO = Value2;

   Comment(" !!!!!!! ICUSTOM returned Value1= "+Value1+ " and value2= ",Value2+"\n");

Ma ho ancora un problema. Uso TrendTarget come un filtro
if(tik <= 5 && Ask>Band_UP) ///////////////ONLY can open SELL////////////////
        {
         ////////////////////// TP1 SL1 ///////////////////////////////////
         openOrder(Symbol(), OP_SELLSTOP,LotSize,sellPrice,sellPrice+SL1*point(), sellPrice-TP1*point(),"_Sell_1",MagicNumber,exp,Crimson);
        }

      if(tik <= 5 && Bid<Band_LO)   ///////////////ONLY can open BUY////////////////

        {
         ////////////////////// TP1 SL1 ///////////////////////////////
         openOrder(Symbol(), OP_BUYSTOP,LotSize,buyPrice,buyPrice-SL1*point(), buyPrice+TP1*point(),"_Buy_1",MagicNumber,exp,Navy);
        }
ma dopo la sua esecuzione, collego l'indicatore TrendTarget e vedo che l'EA ha ancora aperto molti trade tra il canale!!!!!

Nell'immagine aggiungo il TrendTarget dopo l'avvio. Quando creo un template tester con incluso TrendTarget(parametro TF=60) il canale viene mostrato solo per le prime X barre, poi posso vedere solo la curva del prezzo, perché?
Come posso aggiungere semplicemente l'indicatore Trend Target per il controllo visivo di dove vengono aperti gli ordini?

Vorrei usare nel codice il valore_UP nel passato, similmente all'uso della chiusura: prima di ieri Close[2], ieri Close[1], chiusura attuale Close[0]? È possibile?
File:
 
I problemi che ho ancora con la scap test EA sono i seguenti:

1° problema:
Posso vedere i buffer 1, 2 del TrendTarget (Ma ancora non tutte le 4 cifre corrette!!!), è importante? per la quotazione EURUSD 1.0907 ho pensato che quando il valore del prezzo dovrebbe essere confrontato con il canale superiore o inferiore del TrendTarget, quei valori del TrendTarget dovrebbero essere esattamente corretti almeno 4 cifre decimali.
Ho impostato il valore BarsIndex su ogni stick a 1 perché mi piace ricontrollare il TrendTarget

2° problema:
Ma ho ancora un problema. Uso TrendTarget come un filtro.

ma dopo la sua esecuzione, allego l'indicatore TrendTarget e poi vedo che l'EA ha ancora aperto molti trade tra il canale!!!!!

3° problema:
Nell'immagine allegata devo aggiungere il TrendTarget dopo l'avvio. Quando creo un template tester con include TrendTarget (parametro TF=60) il canale TrendTarget viene mostrato solo per le prime X barre, forse 100, poi posso vedere solo la curva del prezzo, perché?

4° problema:
Come posso aggiungere semplicemente l'indicatore Trend Target per il controllo visivo a run-time dove vengono aperti gli ordini?

5° problema:
Vorrei usare nel codice il valore_UP nel passato, simile all'uso della chiusura: prima di ieri Close[2], ieri Close[1], chiusura attuale Close[0]? È possibile? Perché ci potrebbe essere un break-out più lungo di qualche barra, in quel caso mi piacerebbe cambiare la strategia in breakout trading, invece, solo una teoria che ancora non posso sapere come farlo in codifica

6° problema:
Quando la condizione è toccata, per esempio mi piace aprire solo 1 ordine, qui perché il prezzo rimane molte barre sopra il canale superiore quindi la condizione è sempre giusta, si apre fino a quando il mio conto si esaurisce! Come fare per inviare un solo ordine, poi aspettare che la condizione cambi?

7° problema:
Qualcuno sa cosa sia il trendtarget, mi sembra una linea di tendenza o MA(x) del prezzo con +/- 1xATR(14) aggiunto ad ogni lato, è corretto. Qualcuno ha il codice per questo?