Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 662

 
Qualcuno ha già un RSI iMAOnArray pronto all'uso?
 
berezhnuy:
Qualcuno ha già un RSI iMAOnArray pronto all'uso?

Capisco perché nessuno ti ha risposto con molto "aiuto"...
 
berezhnuy:
Qualcuno ha già un RSI iMAOnArray pronto all'uso?

ce n'è uno nel kodobase, devi solo cercarlo
 
Compagni. Ho deciso per amore della pratica di fare un semplice display di assorbimento. Ma alla fine c'era un problema che se cambio il timeframe sul grafico e ritorno al timeframe con l'assorbimento, l'allarme scatta di nuovo. Ho trovato un'opzione per avvisare solo una volta per barra, ma di nuovo tutto si resetta quando cambio timeframes.
if (Bars != ThisBarTrade ) {
   ThisBarTrade = Bars;  // ensure only one trade opportunity per bar
   // Trade logic goes here
}
Ecco il codice stesso, senza disegni grafici, solo logica. Come correggerlo?
   if(engulfAlerter && Open[2]>Close[2] && Open[1]<Close[1] && Close[1]>Open[2])
      {
         Alert("Bullish Engulf");
      }
   if(engulfAlerter && Open[2]<Close[2] && Open[1]>Close[1] && Close[1]<Open[2])
      {
         Alert("Bearish Engulf");
      }
P.S. L'induttore azzera la condizione "ThisBarTrade" durante la deinizializzazione mentre si passa ad altri timeframes.
 

Puoi dirmi come separare il biglietto per comprare e vendere separatamente?

ticket=OrderSend("EURUSD",OP_SELL,SellLot,Bid,3,0,0,",MAGICMA,0,Red);


else

{

OrderSelect(ticket-3,SELECT_BY_POS,MODE_TRADES);

OrderClose(ticket-3,SellLot,Ask,3,Red);


}

ticket-3 specialmente, il commercio TK è una sorta di prezzo medio su più ordini) ma come faccio a separare i Buy Tickets dai Sell Tickets? così posso prendere un ordine che è stato aperto 3 baie fa) Anche per vendere

 

Ciao amici!) Ho un problema:

Ho scritto un programma che apre un template (con gli indicatori e l'oggetto grafico di cui ho bisogno) all'avvio, poi analizza i dati e fa trading. quando lo eseguo solo su un grafico, tutto funziona bene. quando lo eseguo in un tester, funziona solo quando viene visualizzato. capisco che il template può essere caricato solo su un grafico aperto visivamente... quindi non funziona in modalità test normale, perché funziona solo sul grafico senza caricare il modello... E per quanto riguarda l'ottimizzazione? Ho un bel po' di parametri, e in qualche modo è molto irragionevole eseguire ogni opzione manualmente con la visualizzazione.

help plz)) come si può risolvere il problema con l'ottimizzazione e il template?

 
evillive:

Punteggio ))))


Ma non ho scritto in MQL, ma formalmente, questo è il problema (:

E come si può determinare?

Poiché il numero di valori è molto limitato, possiamo controllarlo con una forza bruta diretta:

#property strict

/******************************************************************************/
void fun1(int const A) {
  Print("fun1()");

  if (A == 0 || A == 1) {
    Print("fun1 do!");
  }
}

/******************************************************************************/
void fun2(int const A) {
  Print("fun2()");

  if (A != 2) {
    Print("fun2 do!");
  }
}

/******************************************************************************/
void Гарантия_0_1_2(int const A) {
  switch (A) {
  case 0:
  case 1:
  case 2:
    fun1(A);
    fun2(A);
    break;
  default:
    Print("Не соблюдены условия (теоремы)");
  }
}

/******************************************************************************/
void OnStart() {
  for (int A = 0, limit = 4; A < limit; A++) {
    Print("Проверяем для A = ", A);
    Гарантия_0_1_2(A);
  }
}

Qui otteniamo:

22:52:38 Script 3 EURUSDm,H1: loaded successfully
22:52:38 3 EURUSDm,H1: initialized
22:52:38 3 EURUSDm,H1: Проверяем для A = 0
22:52:38 3 EURUSDm,H1: fun1()
22:52:38 3 EURUSDm,H1: fun1 do!
22:52:38 3 EURUSDm,H1: fun2()
22:52:38 3 EURUSDm,H1: fun2 do!
22:52:38 3 EURUSDm,H1: Проверяем для A = 1
22:52:38 3 EURUSDm,H1: fun1()
22:52:38 3 EURUSDm,H1: fun1 do!
22:52:38 3 EURUSDm,H1: fun2()
22:52:38 3 EURUSDm,H1: fun2 do!
22:52:38 3 EURUSDm,H1: Проверяем для A = 2
22:52:38 3 EURUSDm,H1: fun1()
22:52:38 3 EURUSDm,H1: fun2()
22:52:38 3 EURUSDm,H1: Проверяем для A = 3
22:52:38 3 EURUSDm,H1: Не соблюдены условия (теоремы)
22:52:38 3 EURUSDm,H1: uninit reason 0
22:52:38 Script 3 EURUSDm,H1: removed

Si scopre che sono uguali. Se non ci fossero 3 ma, diciamo, 3 milioni di valori, si potrebbe ancora avere un controllo macchina - restituire i risultati delle funzioni e confrontarli. Se non si trova alcuna differenza per l'intero intervallo, allora sono uguali.

Se si usa un'espressione al posto di una variabile, per esempio una chiamata di funzione, allora l'equivalenza diventa "equivalenza con riserve" a causa del corto circuito del calcolo delle espressioni logiche.

 

Ciao a tutti!

Fatto un indicatore basato su un altro indicatore.

Il primo buffer conta come dovrebbe.

La seconda no: voglio che inizi a contare su ogni barra dopo "line1 > 0".

Questo è fondamentalmente quello che ho fatto nel mio Expert Advisor:

if (line1 > 0 && time ==0){time=Time[i+0];}//сработало предварительное условие входа, записываем время
if (time > 0)shift=iBarShift(Symbol(),Period(),i+time);//находим индекс бара

E dopo "shift >= shet", scatta la condizione di disegno.

Cambio i parametri esterni della variabile "shet", non c'è nessun cambiamento nell'indicatore.

Quale può essere il problema?

Codice indicatore:

#property indicator_buffers 2
#property indicator_color1 Lime 
#property indicator_color2 Red
//--- input parameters
extern int       Period_MA_r=14;
extern int       r2          =7;
extern int       Period_MA_1=46;
extern int       p2          =19;
extern int       shet=7;
extern int       s        =0;
//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,119);
   SetIndexEmptyValue(0,0.0);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,119);
   SetIndexEmptyValue(1,0.0);
   IndicatorDigits(Digits+1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted(),
   i,limit1,shift;
   limit1=Bars-counted_bars-1;
   double line1,signal_line;
   static datetime time;
   for(i=limit1;i>=0;i--) 
   {
   line1=0;
   signal_line=0;
   line1=iCustom(NULL,0,"indikator1",Period_MA_r,r2,1,i+0);
   signal_line=iCustom(NULL,0,"indikator2",Period_MA_1,p2,0,i+0);
   
   if (line1 > 0 && time ==0){time=Time[i+0];}//сработало предварительное условие входа, записываем время
   if (time > 0)shift=iBarShift(Symbol(),Period(),i+time);//находим индекс бара
   if (line1 == 0){time=0;}//если индикатор равен нолю, то время сбрасывается на ноль
   if (line1 > 0 && signal_line < s){ExtMapBuffer1[i]=Low[i]-95*Point;}
   if (line1 > 0 && shift >= shet && signal_line < s){ExtMapBuffer2[i]=High[i]+95*Point;}
   }
   return(0);
  }
//+------------------------------------------------------------------+
 
Forexman77:

Ciao a tutti!

Fatto un indicatore basato su un altro indicatore.

Il primo buffer conta come dovrebbe.

La seconda no: voglio che inizi a contare su ogni barra dopo "line1 > 0".

Questo è fondamentalmente quello che ho fatto nel mio Expert Advisor:

E dopo "shift >= shet", scatta la condizione di disegno.

Cambio i parametri esterni della variabile "shet", non c'è nessun cambiamento nell'indicatore.

Quale può essere il problema?

Codice indicatore:


C'è un po' di confusione sull'aggiunta di 0, ma provate in questo modo:

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   int counted_bars=IndicatorCounted(),
   i,limit1,shift = 0;
   limit1=Bars-counted_bars-1;
   double line1,signal_line;
   static datetime time;
   for (i=limit1;i>=0;i--) 
   {
       line1=0.;
       signal_line=0.;
       line1 = iCustom (_Symbol, _Period,"indikator1",Period_MA_r,r2,1, i+0);       // Не понятно - зачем прибавлять 0 ???
       signal_line = iCustom (_Symbol, _Period,"indikator2",Period_MA_1,p2,0,i+0);  // Не понятно - зачем прибавлять 0 ???
   
       if (line1 > 0. && time == 0) {time = Time[i+0];}                   //сработало предварительное условие входа, записываем время [тоже + 0]
       if (time > 0.) shift= i + iBarShift (_Symbol, _Period, time);      //находим индекс бара
       if (line1 == 0.) {time = 0;}                                       //если индикатор равен нолю, то время сбрасывается на ноль
       if (line1 > 0.)
       {
           if (signal_line < s)
           {
               ExtMapBuffer1[i] = Low[i] - 95.*Point;
               if (shift >= shet) {ExtMapBuffer2[i] = High[i]+95.*Point;}
           }
       }
   }
   return(0);
}
//+------------------------------------------------------------------+
 

Buon pomeriggio.

Nel terminale, se faccio doppio clic sulla linea dell'ordine, si apre una finestra di modifica.

Ma se il prezzo di apertura di un ordine e il take profit di un altro ordine sono sulla linea, si apre l'ultimo ordine modificato.

Per favore, consigliatemi se mql4 ha una funzione per aprire la finestra di modifica dell'ordine cliccando sull'ordine necessario nell'indicatore?

Motivazione: