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

 
tol64:

Come si ottimizzano i parametri multivaluta? Nel tester MT4 non c'è la possibilità di testare diversi simboli contemporaneamente... Sto pensando a quella multicurrency e finora sono arrivato all'idea che ottimizzo i parametri per ogni simbolo separatamente, e poi trasferisco tutti questi parametri al mio Expert Advisor in modalità multicurrency.

Mi sto muovendo nella giusta direzione o è più facile in realtà)?

In mql5 tutto questo può essere implementato in un EA per i test e il trading, ma per ora ho deciso di studiare mql4.

Ho solo pensato che se non puoi testare alcuni simboli in una volta, perché preoccuparsi di un EA se puoi semplicemente impostare la tua copia del grafico di ogni simbolo e sarà lo stesso. Mi piacerebbe sentire le opinioni dei membri della comunità)))

Non ho un multicurrency, semplicemente appendo lo stesso EA su ogni strumento.
 
Roman.:

risposta
Scusa, non ho capito la risposta
 
demlin:
Mi dispiace, non capisco la risposta.

Cerca su Google "come ottimizzare un sito:mql4.com": Il seguente libro è disponibile anche qui: "come ottimizzare un Expert Advisor site:mql4.com", anche qui.

Consiglio un buon libro su questo argomento: "Development, Testing and Optimization of Trading Systems for the Stock Trader" di Ralph Vince - tutto in dettaglio.

 

Problema: La figura mostra una curva (ad esempio, MA). I punti A,C,E sono massimi locali, e i punti B,D sono minimi locali. Domanda: come li calcoliamo se la distanza tra il massimo e il minimo più vicini è più di N punti? Ho provato a farlo, ma sembra essere troppo ingombrante. Forse c'è un algoritmo pronto per risolvere un tale problema? Si prega di consigliare, se qualcuno ne ha esperienza.

 
Elenn:

Problema: La figura mostra una curva (ad esempio, MA). I punti A,C,E sono massimi locali e i punti B,D sono minimi locali. Domanda: come li calcoliamo se la distanza tra il massimo e il minimo più vicini è più di N punti? Ho provato a farlo, ma sembra essere troppo ingombrante. Forse c'è un algoritmo pronto per risolvere un tale problema? Si prega di consigliare, se qualcuno ne ha esperienza.


Determinazione della direzione di scorrimento.

Se è su e le variabili B,C,D ed E sono vuote, allora inseriamo il valore attuale dell'angolo mobile nella variabile A.

Se la variabile A non è vuota, e la direzione di scorrimento è verso il basso, e le variabili C,D,E sono vuote, allora il valore attuale dell'indicatore di scorrimento viene inserito nella variabile B. Se le variabili A e B non sono vuote, e la media mobile punta verso l'alto, e le variabili D ed E sono vuote, allora la variabile C sarà popolata con il valore attuale della media mobile.

E così via, riempiamo i valori delle variabili con i valori.

Ora, se le variabili A e C non sono vuote, e se il modulo di differenza tra A e C è maggiore o uguale a un numero predefinito di punti, allora l'azione che avete in mente sarà eseguita.

Tutto sommato, il codice è abbastanza possibile. Abbiamo solo bisogno di determinare il punto dell'algoritmo in cui resetteremo le variabili, in modo che l'EA si renda conto di essere arrivato a un nuovo punto di partenza. Il codice può essere scritto attraverso un ciclo e gli array, e può essere meno complesso, ma è meglio scrivere l'algoritmo attraverso le variabili per evitare la confusione con gli indici degli array e i numeri delle candele nel ciclo.

 

Ragazzi, recentemente mi sono imbattuto in questo problema. Chi è nel giro - commenta. Ho trovato l'errore da solo - grazie al cielo - rapidamente... Quando si scrive il codice - tutto si compila senza errori, ma il trawl non funziona... Cioè, non andiamo oltre nel ciclo dell'ordine. Ecco i frammenti di codice... Il bug era nel seguente - abbiamo dato ordini magici in variabili esterne, ma nella ricerca di ordini nel ciclo - con una piccola lettera, la ricerca tramite CTRL + F - richiedendo "magic" è stato seguito da "magic"... Il compilatore ha dato nessun errore, ma nel ciclo, il programma non è stato cambiato in un trawl... il ciclo si interromperebbe su "magic"... Dovrebbe essere così? Ho sempre pensato che "magia" e "magia" fossero variabili diverse... e quindi il compilatore avrebbe dovuto indicare questo errore che la variabile "magica" è indefinita... Nel codice, siccome ora viene eseguito prima di selezionare il trawl e Printa () non viene più - l'uscita dal ciclo da questa condizione - a causa della magia - cioè questa condizione - non sarà mai soddisfatta, a causa dei nomi diversi - "magic" e "Magic".

if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != magic))
      {
         continue;
      }

// глоб переменные
...
...
extern int  Magic = 10;     // MagicNumber

//----------------------------------------------------------------------------
int start()                            // Спец. функция start
  {
  
   
   int orderCount = 0; 
  
   //---------------------------ТРАЛ ОРДЕРОВ---------------------------------------------------------------------------------------
   int orderType;
    for (orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
    {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))
      {
         continue;
      }

      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != magic))
      {
         continue;
      }

      orderType = OrderType();
      if ((orderType != OP_BUY) && (orderType != OP_SELL))
      {
         continue;
      }
                ticket = OrderTicket( );                         // Номер ордера
       double   orderLots = OrderLots();                         // Lots   
       double   orderProfit = OrderProfit() + OrderSwap();       // Profit
       double   Price = OrderOpenPrice();                        // Цена открытия рыночного ордера
       double   SL =  OrderStopLoss();                           // Значение StopLoss ордера
       double   TP = OrderTakeProfit();                          // Значение TakeProfit ордера
          
             if (ticket>0)                                               // Если позиция открылась
                    {
                             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                                 {
                                   Sleep(100);
                                 }
                                  double OpenPrice=OrderOpenPrice();
                    }
                 
         
      orderCount++;                     // считаем ордера (не больше 10)
     
            
       while (!IsTradeAllowed() || !IsConnected()) Sleep(5000); RefreshRates();
       
      //----------------------------Тралим последовательно все наши ордера по виду трала------------------
      if (UseTrailing && orderCount > 0 && type ==0)   // простой трал по аналогии учебнику - в зависимости от параметра trlinloss (тралить ли в зоне лоссов)
          {     
           if (orderType == OP_BUY)  SampleTrailing_texbook (0);          // если бай
           if (orderType == OP_SELL) SampleTrailing_texbook (1);          // если селл
          }      
      ...
      ...
      ...   
     Print( "Эксперт база: Всего наших ордеров = " ,orderCount);
     }   
//--------------------------------------------------------------------------------------------------------------------------------------     
   
   
  
//----------------------------------------------------------------  
   return;                             // Выход из start()
  }

P.S. Chi non lo sa - ne sia consapevole, altrimenti non è chiaro quanto si possa fare con il codice...

 
Roman.:

Ragazzi, recentemente mi sono imbattuto in questo problema. Chi è nel giro - commenta. Ho trovato l'errore da solo - grazie al cielo - rapidamente... Quando si scrive il codice - tutto si compila senza errori, ma il trawl non funziona... Cioè, non andiamo oltre nel ciclo dell'ordine. Ecco i frammenti di codice... Il bug era nel seguente - abbiamo dato ordini magici in variabili esterne, ma nella ricerca di ordini nel ciclo - con una piccola lettera, la ricerca tramite CTRL + F - richiedendo "magic" è stato seguito da "magic"... Il compilatore ha dato nessun errore, ma il programma non è stato cambiato in modalità trawl nel ciclo... il ciclo si interromperebbe su "magic"... Dovrebbe essere così? Ho sempre pensato che "magia" e "magia" fossero variabili diverse... e quindi il compilatore avrebbe dovuto indicare questo errore che la variabile "magica" è indefinita... Nel codice, poiché ora viene eseguito prima di selezionare il trawl e Printa () non viene più fuori - l'uscita dal ciclo su questa condizione - a causa dellamagia - cioè questa condizione - non verrà mai eseguita, a causa dei nomi diversi - "magic" e "Magic".

P.S. Chi non lo sa - ne sia consapevole, altrimenti non saprà quanto avrà a che fare con il codice...


Se la magia è dichiarata e la magia è usata, il compilatore dice che la variabile magica non è dichiarata.

MetaEditor 4 401.

 
Roman.:

Ragazzi, recentemente mi sono imbattuto in questo problema. Chi è nel giro - commenta. Ho trovato l'errore da solo - grazie al cielo - rapidamente... Quando si scrive il codice - tutto si compila senza errori, ma il trawl non funziona... Cioè, non andiamo oltre nel ciclo dell'ordine. Ecco i frammenti di codice... Il bug era nel seguente - abbiamo dato ordini magici in variabili esterne, ma nella ricerca di ordini nel ciclo - con una piccola lettera, la ricerca tramite CTRL + F - richiedendo "magic" è stato seguito da "magic"... Il compilatore ha dato nessun errore, ma il programma non è stato cambiato in modalità trawl nel ciclo... il ciclo si interromperebbe su "magic"... Dovrebbe essere così? Ho sempre pensato che "magia" e "magia" fossero variabili diverse... e quindi il compilatore avrebbe dovuto indicare questo errore che la variabile "magica" è indefinita... Nel codice, dato che ora viene eseguito prima di selezionare il trawl e Printa () non viene più fuori - l'uscita dal ciclo da questa condizione - a causa dellamagia - cioè questa condizione - non verrà mai eseguita, a causa dei nomi diversi - "magic" e "Magic".

P.S. Chi non lo sa - ne sia consapevole, altrimenti non capirà quanto avrà a che fare con il codice...

Confronta con il mio semplice strascico. In particolare, è un ciclo di ordini di ricerca:

   // В глоб. переменных
   string sy=Symbol();
   // ...................................................................
   color  cl;
   double sl, StopLevel;
   for (int i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=sy)           continue;
         if (OrderMagicNumber()!=Magic)   continue;
         if (OrderType()>1)               continue;
         sl=OrderStopLoss();
         if (OrderType()==OP_BUY) {
            cl=clModifyBuy;
            StopLevel=NormalizeDouble(strG-DeltaStop*PointX, dg);
            if (sl<StopLevel) ModifyOrder(-1, StopLevel, -1, -1, cl);
            }
         if (OrderType()==OP_SELL) {
            cl=clModifySell;
            StopLevel=NormalizeDouble(strR+DeltaStop*PointX, dg);
            if (sl>StopLevel) ModifyOrder(-1, StopLevel, -1, -1, cl);
            }
         }
      }

Penso che il principio vi sarà chiaro.

E la magia e le variabili magiche sono davvero diverse. Quando li cerchi con Ctrl+F, seleziona "case sensitive".

Da qualche parte nel codice li hai dichiarati entrambi

 
artmedia70:

E la magia e le variabili magiche sono davvero diverse. Quando li cerchi con Ctrl+F, spunta la casella "case-sensitive".

Da qualche parte nel codice li hai dichiarati entrambi dopo tutto

Esattamente. L'ho appena trovato grazie a te... :-))) In fondo a Variabili oltre alla variabile extern int Magic = 10; ho dichiarato una variabile -
int magic = 12345;

:-)))

Si è scoperto che stavo tenendo conto di Magic nel fie di apertura dell'ordine e di Magic nel loop, ecco perché il loop di ordini per tracciarli non funzionava...:-)))

Grazie dal profondo del mio cuore - ho risolto il problema. Hospuntato "Use Register" - l'ho messo lì e tutto funziona bene.

P.S. Come succede!!! (Quando la fortuna va sul codice - pronto e non solo qualche majiks a dichiarare...:-))))

 
artmedia70:

Confrontate questo con la mia pesca più semplice. In particolare il ciclo di ricerca degli ordini:

Penso che il principio sarà chiaro.

Grazie per l'opzione a strascico. Il principio è chiaro.