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

 
Zver4991:

Da cosa dipende la qualità del test e come posso aumentarla al massimo?

Guardate questo sito, come testare un EA con il 99% di qualità di simulazione

http://tradelikeapro.ru/kak-poluchit-kachestvo-modelirovaniya-99/

 
Zhunko:
Questo è così per il tipo BOOL. Cioè, per un bool di una vecchia versione di MQL4. Questo non è vero per un bool a singolo byte. Si verifica un overflow se il valore è maggiore di zero.

Mi chiedo perché allora.

   bool b=2;

Compila senza errori o avvertimenti?

 
artmedia70:

Mi chiedo perché allora.

bool b=2;
compila senza errori o avvertimenti?

L'operatore di assegnazione deve essere sovraccaricato per il tipo bool. Controlla l'overflow e se più di 1, assegna e restituisce true.

In studio al livello di avvertimento 4 ci sono spesso avvertimenti quando si cerca di inserire qualche tipo illogico in un'espressione logica. O viceversa, quando si applica un tipo logico in operazioni aritmetiche.

 
Zhunko:

L'operatore di assegnazione deve essere sovraccaricato per il tipo bool. Controlla l'overflow e, se maggiore di 1, assegna e restituisce true.

Nello studio a livello di avvertimento 4, ci sono spesso avvertimenti quando si cerca di inserire qualche tipo illogico in un'espressione logica. O viceversa, quando si applica un tipo logico in operazioni aritmetiche.

Sarebbe più logico

#property strict

per emettere un avvertimento e lasciarlo come nella vecchia versione senza

 
artmedia70:

non è esattamente vero, ma il succo è corretto.

In realtà: zero corrisponde a falso, e qualsiasi altro valore diverso da zero corrisponde a vero

Senza fare affidamento sui default, cambio l'init in una variabile booleana e poi uso solo quella.
 

Beh, non sono un programmatore dopo tutto...

C'è il numero di conto 1 - a cinque cifre con un min.lot 0.01 e passo 0.01 (build 584); il numero di conto 2 - a 4 segni con un min.lot 0.1 e passo lotti di 0.1 (build 584) e il numero di conto 3, proprio lo stesso del numero 2, ma il terminale build 509.

E c'è uno stop loss trawl:

void manageStops()
{ 
   string trailSymbol=Symbol();  
   for( int i = OrdersTotal()-1; i >=0 ; i-- ) 
   {
      if ( OrderSelect( i, SELECT_BY_POS ) == true ) 
      {  
         int trailOrderType = OrderType(); 
         if( OrderSymbol() != trailSymbol || trailOrderType > 1 || OrderProfit() < 0 ) continue; 
         double trailStopLoss = OrderStopLoss();   
         while( true ) {
            double trailStop = TrailingStop; 
            int trailDistance = MarketInfo( trailSymbol, MODE_STOPLEVEL ); 
            if( trailStop < trailDistance ) trailStop = trailStop+trailDistance;  
            bool modifyTrailingStop = false;  
            switch( trailOrderType ) 
            {
               case 0 : 
                  if(trailStopLoss < (Bid - (TrailingStop+TrailingStep) * pipPoints)) 
                  {
                     trailStopLoss = NormalizeDouble(Bid - TrailingStop * pipPoints,digits);   
                     modifyTrailingStop = true;       
                  }
                  break;    
               case 1 :                      
                  if(trailStopLoss > (Ask + (TrailingStop+TrailingStep) * pipPoints)) 
                  {
                     trailStopLoss = NormalizeDouble(Ask + TrailingStop * pipPoints,digits);             
                     modifyTrailingStop = true;             
                  }
               }                               
            if( modifyTrailingStop == false ) break;                       
            double trailTakeProfit = OrderTakeProfit(); 
            double trailPrice = OrderOpenPrice();  
            int trailTicket = OrderTicket();   
            if( ( OrderType() == OP_BUY && trailStopLoss > trailPrice && trailStopLoss < OrderOpenPrice() + ( MaxStop * pipPoints ) ) 
                  || ( OrderType() == OP_SELL && trailStopLoss < trailPrice && trailStopLoss > OrderOpenPrice() - ( MaxStop * pipPoints ) ) )

            OrderModify( trailTicket, trailPrice, trailStopLoss, trailTakeProfit,0);
            break; 
           } 
        }  
     }  
  return;   
} 

Perché sul conto #1 lo stoploss è tracciato normalmente, ma sui conti #2 e 3 "errore 130"? Anche se la logica è sovvertita, ma funziona in un caso...

 
evillive:

Beh, non sono un programmatore dopo tutto...

C'è il numero di conto 1 - a cinque cifre con un min.lot 0.01 e passo 0.01 (build 584); il numero di conto 2 - a 4 segni con un min.lot 0.1 e passo lotti di 0.1 (build 584) e il numero di conto 3, appena takoe stesso del numero 2, solo terminale build 509.

E c'è uno strascico di stoploss:

Perché lo stop loss sul conto 1 segue normalmente, ma i conti 2 e 3 mostrano "Error 130"? Anche se la logica è sovvertita, ma funziona in un caso...


La domanda stessa implica che il problema è un conto a 5 cifre o a 4 cifre. Guardando il codice. Dove è definita la variabile pipPoint e a cosa corrisponde? È molto probabile che il problema sia proprio questo.
 
pro_:

La domanda stessa suggerisce che il problema riguarda un conteggio a 5 o 4 cifre. Sto guardando il codice. Dove è definita la variabile pipPoints e a cosa corrisponde? È molto probabile che sia questo il problema.

Ho definito pipPoints = MarketInfo( Symbol(), MODE_POINT) nell'init;

Ho aumentato il valore MaxStop e la pesca a strascico dovrebbe cambiare in incrementi con quelli più grandi, ma cambia in incrementi di 1 punto, almeno inizia a pescare a 4 cifre... Avrò ancora bisogno di modificare la logica, ho bisogno di un passo regolabile.

 
smdm:

Ciao!

La domanda è la seguente. Ho un indicatore Heiken Ashi Smoothed https://www.mql5.com/ru/code/7930.

Quali modifiche devo apportare al codice dell'indicatore per essere in grado di attaccare questo indicatore su un grafico a cinque minuti su un timeframe superiore, per esempio su un grafico a trenta minuti o a un'ora?

Grazie.


Ho fatto una domanda simile - come applicare un indicatore dal grafico settimanale al grafico H4. ho pestato su diversi forum . e anche qui, ma non ha ottenuto nulla di meglio che prescrivere la dimensione di un grande TF-m nel codice per uno più piccolo, nessuno ha suggerito. anche se se il vostro indicatore ha una logistica semplice e prende per il suo calcolo di semplici calcoli bar, è possibile. se si può testo il codice e uno schermo su n1 uno studio con le vostre spiegazioni .
 

e quindi l'indicatore dovrebbe disegnare una linea verticale sulla barra in cui il prezzo chiude a metà della barra.....

double close_price(int nomer_bara)
{
if(nomer_bara<1)
{
Alert("нельзя анализировать текущий бар");
}
else
{
if(iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)<iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)/3)//возвращает 1/3 если цена текущего бара закрылась ниже 1/3 его спреда 
{
return(1/3);
}
if(iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)>iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)/3&&(iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)<iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)*2)/3)//возвращает 2/3 если цена текущего бара закрылась ниже 2/3 и выше 1/3 его спреда 
{
return(2/3);
}

if((iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)>(iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara))*2)/3&&iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)<iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara))//возвращает 1 если цена текущего бара закрылась выше 2/3 его спреда
{
return(1);
}
}

}

 if(close_price(1)==1/3)// в случае если цена закрылась внизу то нарисовать линию на этом баре
   {
 SetVLine(Red, "", Time[1], STYLE_SOLID, 2);
   }
и так вся проблема заключается в том что линия рисуется на каждом баре не пойму какого черта... помогите пожалуйста