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

 
Roger:

In generale, ho aggiunto due variabili - una per il livello di deposito da raggiungere e la seconda per il numero di file da eliminare. Funzionerà solo una volta, poi è necessario correggere il livello per un altro valore o riavviare l'Expert Advisor.
Grazie - ora farò il test. O non è adatto a funzionare nel tester?
 
alex12:
Grazie - ora farò il test. O non è adatto alla corsa del tester?

Come potrei testarlo?
 
demlin:

Saluti a tutti!

Si prega di consigliare un indicatore normale per determinare un piatto, grazie in anticipo ))))


Questo lo sto testando io stesso.

Può essere facilmente aggiunto (inserito) in un Expert Advisor attraverso iCustom().

 
Un sistema semplice per incrociare 2 vagoni.
Compra - il veloce incrocia il lento verso l'alto.
Vendere - quello veloce incrocia quello lento verso il basso.

Chiudere - segnale opposto o traina. Potete dirmi cosa dovrei cambiare nel codice per impostare lo stop = 50 pips su ogni apertura di posizione?

extern double Lots           =   0; // лот, если 0, то динамический
extern double RiskPercentage =  70; // % от депо на лот, если динамический
extern int    FastPer        =   4;
extern int    SlowPer        =  18;
extern int    magicnumber    = 777;
extern int    TrailingStop   =  20; 
extern bool   PolLots        = true;



int prevtime;
int ticket=0;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----




   if (!IsDemo())
    {
//     Print ("Эта версия только для демо-счетов");
//     return(0);
    }   


   if(Time[0] == prevtime)
   { 

       return(0);
   }
   prevtime = Time[0];
   if(!IsTradeAllowed()) 
     {
       prevtime = Time[1];
       return(0);
     }




 int Ord=0;
 double ClLot=0;
int LotsCount=0;
   int i=0;  
   int total = OrdersTotal();   
   for(i = 0; i <= total; i++) 
     {
      if(TrailingStop>0)  
       {                 
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       if(OrderMagicNumber() == magicnumber) 
         {
         ticket=OrderTicket(); 
         ClLot=OrderLots();
         if (OrderType()==OP_BUY)
          {
           Ord=1;
          }
         else
          {
           Ord=2;
          }         
          LotsCount ++;
          TrailingStairs(OrderTicket(),TrailingStop);
         }
       }
      }
/*
 
     for(i = 0; i <= OrdersTotal(); i++) 
      {
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       if(OrderMagicNumber() == magicnumber) 
         {
         ticket=OrderTicket(); 
         ClLot=OrderLots();
         if (OrderType()==OP_BUY)
          {
           Ord=1;
          }
         else
          {
           Ord=2;
          }
         }
      } 
*/    
bool SellOp=false;
bool BuyOp=false;

double MAFast1=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,2),Digits);
double MAFast2=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,1),Digits);
double MAFast3=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,0),Digits);
double MASlow1=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,2),Digits);
double MASlow2=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,1),Digits);
double MASlow3=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,0),Digits);


      
if ((MAFast1<MASlow1)&&
    (MAFast2==MASlow2)&&
    (MAFast3>MASlow3))
{
 BuyOp=true;
}

if ((MAFast1>MASlow1)&&
    (MAFast2==MASlow2)&&
    (MAFast3<MASlow3))
{
 SellOp=true;
}



if (BuyOp)
 {
  if (Ord==2)
   {
    OrderClose(ticket,ClLot,Ask,3,Red);
   }
  if (Ord!=1)
   {
    OrderSend(Symbol(),OP_BUY,Lot(),Ask,3,0,0,"MA_Buy",magicnumber,0,Green);
   }
 }

if (SellOp)
 {
  if (Ord==1)
   {
    OrderClose(ticket,ClLot,Bid,3,Green);
   }
  if (Ord!=2)
   {
    OrderSend(Symbol(),OP_SELL,Lot(),Bid,3,0,0,"MA_Sell",magicnumber,0,Red);
   }
 }



   
//----
   return(0);
  }
//+------------------------------------------------------------------+
void TrailingStairs(int ticket,int trldistance)
   { 
    int Spred=Ask - Bid;
    if (OrderType()==OP_BUY)
      {
       if((Bid-OrderOpenPrice())>(Point*trldistance))
         {
          if(OrderStopLoss()<Bid-Point*trldistance || (OrderStopLoss()==0))
            {
             OrderModify(ticket,OrderOpenPrice(),Bid-Point*trldistance,OrderTakeProfit(),0,Green);
             if (PolLots)
             if (NormalizeDouble(OrderLots()/2,1)>MarketInfo(Symbol(), MODE_MINLOT))
               {
               OrderClose(ticket,NormalizeDouble(OrderLots()/2,1),Bid,3,Green);
               }
             else
               {
               OrderClose(ticket,OrderLots(),Bid,3,Green);
               }
            }
         }
       }
     else
       {
        if((OrderOpenPrice()-Ask)>(Point*trldistance))
          {
           if((OrderStopLoss()>(Ask+Point*trldistance)) || (OrderStopLoss()==0))
             {
              OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*trldistance,OrderTakeProfit(),0,Red);
             if (PolLots)
             if (NormalizeDouble(OrderLots()/2,1)>MarketInfo(Symbol(), MODE_MINLOT))
               {
               OrderClose(ticket,NormalizeDouble(OrderLots()/2,1),Ask,3,Green);
               }
             else
               {
               OrderClose(ticket,OrderLots(),Ask,3,Green);
               }
             }
          }
        }
    }
    
double Lot()
{
 double LotQ = Lots;

 if (Lots==0)
  {
   double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
   double minLot = MarketInfo(Symbol(), MODE_MINLOT);
   double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
   double step =   MarketInfo(Symbol(), MODE_LOTSTEP);
   double account = AccountFreeMargin();
   
   double percentage = account*RiskPercentage/100;
   
   LotQ = MathRound(percentage/margin/step)*step;
   
   if(LotQ < minLot)
   {
      LotQ = minLot;
   }
   
   if(LotQ > maxLot)
   {
      LotQ = maxLot;
   }
  } 
  return (LotQ);
  }

 
Roman.:


Questo lo sto testando io stesso.

Si aggiunge facilmente (collegato) all'Expert Advisor tramite iCustom().

Mi chiedo, come si fa a definire i suoi valori estremi bassi ed estremi alti in un EA? Dopo tutto, in un'area locale del grafico 0,3800 (la linea blu) era un valore estremo e corrispondeva ad una correzione temporanea, mentre nell'area locale successiva 0,3041 (la linea verde) divenne il suo valore estremo e segnò un'inversione...

Che dire del valore minimo estremo 0,4596 al primo lungo (linea rossa), che non ha detto nulla?

E come si fa a determinare se il valore minimo dell'estremo dell'indicatore indica una correzione o un'inversione? Infatti, il valore di 0,3800 nel primo caso indica una correzione (la linea verticale verde), e nel secondo caso - la fine della tendenza (la linea verticale rossa)

E infine - ci sono molti di questi estremi locali sul grafico. Dopo tutto, per un periodo di 3-5 ore, ci sarà sicuramente il valore più basso, e sarà un valore estremamente basso per quell'intervallo di tempo. Se specifichiamo un certo intervallo di tempo per trovare i valori estremi dell'indicatore, questi saranno trovati, ma... Tuttavia, su barre successive, oltre il timeframe specificato, può accadere che il valore dell'indicatore diventi ancora più basso (più alto) e quindi questo valore sarà estremamente basso (alto) - ma cosa fare con quello precedentemente trovato? Tanto più che l'Expert Advisor prenderà una decisione in base ad essa.

Tuttavia...


 
artmedia70:

Mi chiedo, come definisci i valori estremi bassi ed estremi alti nel tuo Expert Advisor? Dopo tutto, in un'area locale del grafico 0,3800 (la linea blu) era un valore estremo e corrispondeva ad una correzione temporanea, mentre nell'area locale successiva 0,3041 (la linea verde) divenne il suo valore estremo e segnò un'inversione...

Che dire del valore minimo estremo 0,4596 al primo lungo (linea rossa), che non ha detto nulla?

E come si fa a determinare se il valore estremamente basso dell'indicatore indica una correzione o un'inversione? Infatti, il valore di 0,3800 nel primo caso indica una correzione (la linea verticale verde), e nel secondo caso - la fine della tendenza (la linea verticale rossa)

E infine - ci sono molti di questi estremi locali sul grafico. Se impostiamo un intervallo di 3-5 ore, sarà sicuramente il valore più basso, e sarà un valore estremamente basso per quell'intervallo di tempo. Se specifichiamo un certo intervallo di tempo per trovare i valori estremi dell'indicatore, sarà trovato, ma... Tuttavia, su barre successive, oltre il timeframe specificato, può accadere che il valore dell'indicatore diventi ancora più basso (più alto) e quindi questo valore sarà estremamente basso (alto) - ma cosa fare con quello precedentemente trovato? Tanto più che l'Expert Advisor prenderà una decisione in base ad essa...

Tuttavia...





Guardo questo indicatore come un filtro per entrare nel mercato di una strategia di tendenza o piatta, cioè, appare la seguente interpretazione della sua lettura:

double iVAR_1 = iCustom (Symbol(),trend_period, "iVAR", n, nBars, 0, 1);                    // расчет индикатора iVAR
   

Un valore dell'indicatore inferiore a 0,5 significa che il mercato è in una tendenza.

iVAR_1 < 0.5 &&                                                            // тренд на основном ТФ   

I valori estremamente bassi spesso precedono la fine (correzione) della tendenza attuale - è già sulla figura - qui funziona il trawl (quando nel mercato).


Un valore dell'indicatore superiore a 0,5 significa una condizione di mercato piatta

iVAR_1 > 0.5 && 

Il valore estremamente alto spesso precede l'inizio di una tendenza significativa - vedi l'interpretazione precedente.

Il valore dell'indicatore intorno a 0,5 significa una situazione di mercato incerta - qui è possibile usare qualche "livello" di rientro (non escludo che sia ridondante, cioè prendere il valore 0,5 e tutto), sia sotto - x, che sopra - y il valore 0,5 (livello base), inserirli in variabili esterne e ottimizzare con passo 0,02, diciamo, lo stesso della variabile n - start:2 passo:1 stop:7 - non è superfluo, lo faccio - presto posterò i risultati nel ramo Avalanche (è un sistema di tendenza...:-)), solo con MM di Martin... e tutto... :-)))).

 
Roman.:


Guardo questo indicatore come un filtro per entrare nel mercato in una strategia di tendenza o piatta, cioè la sua lettura ha la seguente interpretazione:

Un valore dell'indicatore inferiore a 0,5 indica una condizione di mercato tendenziale -

I valori estremamente bassi spesso precedono la fine (correzione) della tendenza in corso - questo già si addice alla figura - qui il trawl funziona (quando nel mercato).


Il valore dell'indicatore superiore a 0,5 significa la condizione di mercato piatto

Un valore estremamente alto spesso precede l'inizio di una tendenza significativa - vedi l'interpretazione precedente.

Il valore dell'indicatore intorno a 0,5 significa una condizione di mercato incerta - qui è possibile usare qualche "livello" di rientro (non escludo che sia ridondante, cioè prendere il valore 0,5 e tutto), sia sotto - x, sia sopra - y il valore 0,5 (livello base), inserirli in variabili esterne e ottimizzare con passo 0,02, diciamo, lo stesso della variabile n - start:2 passo:1 stop:7 - questo non è eccessivo, lo faccio - presto posterò i risultati nel ramo Lavina (è sistema di tendenza...:-)), solo con MM di Martin... e tutto... :-)))).

Non mi piace l'ottimizzazione: l'essenza è un adattamento... E non ottimizzo mai i parametri dei miei bambini... Cerco di scegliere i parametri necessari per le diverse condizioni di mercato.

Grazie per il chiarimento, però... :) Onestamente - prendere il post sopra era un sasso nella direzione del tacchino... :)

 

Buon pomeriggio!

Ho una domanda del genere. L'Expert Advisor ha una funzione che scrive i trade in un file csv, ma ho scoperto un problema che si verifica quando attivo/disattivo(TRUE/FALSE) l'opzione money management system nei parametri dell'Expert Advisor. Per esempio, subito dopo la compilazione del file sorgente tutto funziona correttamente e gli scambi vengono scritti nel file come previsto. La figura qui sotto illustra i dati scritti correttamente:

Poi nel tester, abilito l'opzione money management system nei parametri di Expert Advisor, eseguo il test, ma i dati non vengono scritti correttamente nel file. La figura qui sotto mostra due varianti per il confronto. Quello a sinistra è corretto (come sopra) e quello a destra non è corretto:

Non sono stato in grado di capire da solo di cosa potrebbe trattarsi, ma ho trovato quanto segue. Se abilito/disabilito anche l'opzione del sistema di gestione del denaro e compilo nuovamente il file sorgente prima di iniziare il test, tutto viene scritto correttamente.

Puoi dirmi quale potrebbe essere il problema?

 
artmedia70:

Non mi piace l'ottimizzazione: l'essenza è il montaggio... E non ottimizzo mai i parametri dei miei prodotti... Cerco di fargli scegliere i parametri necessari per le diverse condizioni di mercato.

Anche se, grazie per il chiarimento... :) Onestamente - andare con il post sopra era un sasso nella direzione di un tacchino... :)


Capisco... Se vi interessa, ecco una cosa simile (nel trailer). Vedi anche qui (intero thread) - c'èun trattamento sopra/sotto 0.6 e qui(pagine selettive).

File:
 
Roman.:


Questo lo sto testando io stesso.

Facilmente aggiunto (inserito) all'EA tramite iCustom().

Grazie, l'ho scaricato, lo testerò nel mio Expert Advisor