[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 403

 
ruslanchik:
Per favore, ditemi come calcolare lo stacksize

Sii più specifico con la tua domanda.
 

È possibile saltare un passo inutile nell'ottimizzazione e passare a quello successivo?

Esempio: ci sono parametri di ingresso(tipo doppio) che devono essere ottimizzati: x1, x2, x3, x4. I loro valori sono da 1 a 5. Passo 0.1

È chiaro che in questo caso ci saranno 41*41*41*41=2.825.761

Ma dobbiamo cercare nel seguente vincolo: 10,5 < x1+x2+x3+x4 < 11,5. È già chiaro qui che ci saranno molte meno varianti di ricerca. (questo è il limite stesso della somma necessaria)

Quindi, se questa restrizione viene aggiunta al codice dell'Expert Advisor in questo modo

extern double    x1=1, x2=1, x3=1, x4=1;

int start()

{

  if (10.5<x1+x2+x3+x4 && x1+x2+x3+x4<11.5)

    {
      // основной код эксперта 

    }
  return; 

} 

poi durante l'ottimizzazione (quando arriva ogni nuovo tick), saranno prese anche le varianti non adatte, per esempio x1=4, x2=4, x3=4, x4=4; quello che esattamente non accadrà -- è l'esecuzione del codice principale.

Cioè, finché questo passo di ottimizzazione non "attraversa" l'intervallo storico, non ci sarà una transizione al passo successivo. Ci sarà una "convinzione" che la condizione 10.5 < x1+x2+x3+x4 < 11.5 non è soddisfatta e fermerà solo l'esecuzione del codice principale

Il tempo sarà molto sprecato su varianti così palesemente inadatte

Come possiamo escludere tali passi nell'ottimizzazione con parametri evidentemente inadatti?

In altre parole, quando un'altra serie di parametri diventa inadeguata, perché questo passo non dovrebbe essere ottimizzato e passare immediatamente a quello successivo?

 
fmql:

È possibile saltare un passo inutile nell'ottimizzazione e passare a quello successivo?


è possibile ottimizzare 3 parametri e regolare il quarto per la quantità desiderata.

o utilizzare la terza scheda "Ottimizzazione" per generare spontaneamente l'evento richiesto.

 
sergeev:

è possibile ottimizzare 3 parametri e regolare il quarto per la quantità richiesta.

o utilizzare la terza scheda "Ottimizzazione" per generare spontaneamente l'evento desiderato.

Il punto è che è impossibile ottimizzare 3 parametri senza il 4° parametro nel mio caso.

Qui è importante la loro selezione congiunta e la loro somma è limitata nell'intervallo.

(è più o meno come cercare le quote di tutti i componenti di una miscela e la massa totale di questa miscela è limitata a un intervallo stretto)

Puoi dirmi di più sulla terza scheda, cos'è questa generazione spontanea dell'evento desiderato?

 

Buon pomeriggio.

Potete dirmi come estrarre i valori delle candele (High, Low, Open, Close) dell'ultimo estremo dell'indicatore ZigZag?

 
Come per qualsiasi altra candela. Le stesse funzioni. ( Pensa al diametro del tuo pianeta.(c) )
 
Se volete ottenere il numero di barra dell'ultimo estremo stesso, usate il nome dell'oggetto dell'ultimo raggio per ottenere il tempo della prima coordinata, che corrisponderà al tempo della barra. Usando il tempo della barra, determinare il numero della barra. Determinare le caratteristiche della barra dal numero della barra.
 
fmql:

Potrebbe approfondire la terza scheda, qual è la generazione spontanea dell'evento desiderato?


Più in dettaglio nell'aiuto

In breve, puoi creare le tue condizioni per il punto nella terza scheda (per esempio, aprire 10 ordini perdenti di fila) e il tester salterà automaticamente questa corsa e passerà alla prossima.

 
Stells:

Buon pomeriggio.

Potete dirmi come estrarre i valori delle candele (High, Low, Open, Close) dell'ultimo estremo dell'indicatore ZigZag?


Tale operazione richiede alcuni calcoli.

Lo facevo in questo modo:

int start()
  {
 double // экстремумы Зиг-Зага
  y3=0, 
   y2=0,
    y1=0,
     y0,
     zz;   
 int    x3, x2, x1, sh=ShiftBars;// номера баров  

  y0=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, 1);

//=============================================================================
  // Берём три экстремума Зиг-Зага
   while (y3==0) 
      {
      zz=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, sh);
      if (zz!=0 && zz!=EMPTY_VALUE) 
         {
         if      (y1==0) { x1=sh; y1=zz; }
         else if (y2==0) { x2=sh; y2=zz; }
         else if (y3==0) { x3=sh; y3=zz; }
         }
      sh++;

//----- Вывод информации на экран -----------------------------------------------
string info="";
string on_off="---------------------------------------------------"+  "\r\n";

on_off=StringConcatenate (on_off,"Экстремум= ",y1," на ",x1," баре","\r\n");
on_off=StringConcatenate (on_off,"Экстремум= ",y2," на ",x2," баре","\r\n");
info=StringConcatenate(info,on_off,"\r\n");
info=StringConcatenate(info,"\r\n");
Comment(info);    

Ora conosci i numeri delle barre degli ultimi 2 estremi (min e max) e poi i loro massimi, minimi.... facile da trovare!

- Chiudi[x1], Apri[x2], .... ecc.

Forse qualcuno suggerirà un'opzione più semplice.

 
Non è possibile organizzare un ciclo, X e Y sono sempre 0.
//+------------------------------------------------------------------+
//|                                                    для лавин.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double stoploss=0; extern double takeprofit=20;extern int otstup=20; extern datetime expiration=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
 int tiket,tikett;double volume=0.1;int i=0,R1=0,R2=0,A=1 ;double price=PRICE_OPEN;
   //  R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;
     
     
int start()
  {       int X,Y; double price=(Ask+Bid)/2;            
//----
       Alert ("OrdersTotal()",OrdersTotal());

if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000){
 for(int i=OrdersTotal();i==0;i--){
OrderSelect(i,SELECT_BY_POS );if(OrderType( )==OP_BUYSTOP){X++;}}}Alert ("X", X);
if (X==0){


   tiket= OrderSend( Symbol(), OP_BUYSTOP,  volume*A, price +otstup*Point, Point* 3, R1, price+takeprofit*Point+otstup*Point, "OP_BUYSTOP", 1000,  expiration, Red); 
   Alert ("OP_BUYSTOP", GetLastError( )); }
   
if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()) { 
  for( i=OrdersTotal();i==0;i--){OrderSelect(i,SELECT_BY_POS );
if(OrderType( ) ==OP_SELLSTOP) { Y++;}}}Alert ("Y", Y);
 if (Y==0){ 
   tikett= OrderSend( Symbol(), OP_SELLSTOP,  volume*A, price -otstup*Point, Point* 3,R2, price-takeprofit*Point-otstup*Point, "OP_SELLSTOP" , 2000,  expiration,C'0,128,255' );
    Alert ("OP_SELLSTOP", GetLastError( )); 
    }       
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
Motivazione: